From dfc861833153f402164c96b8d0984db948ae1e1f Mon Sep 17 00:00:00 2001 From: Ruizhe Zhao Date: Mon, 24 May 2021 23:23:42 +0000 Subject: [PATCH] Sanitized statement splitting --- .../2mm/2mm.heuristic.polymer.par.log | 578 ++ .../2mm/2mm.heuristic.polymer.par.mlir | 117 +- .../2mm/2mm.heuristic.polymer.seq.log | 511 ++ .../2mm/2mm.heuristic.polymer.seq.mlir | 112 +- .../2mm/2mm.nosplit.polymer.par.log | 456 ++ .../2mm/2mm.nosplit.polymer.par.mlir | 142 +- .../2mm/2mm.nosplit.polymer.seq.log | 0 .../2mm/2mm.nosplit.polymer.seq.mlir | 346 - ...m.origin.0\n2\nsplit-0 2.polymer.seq.mlir" | 339 - .../split-and-merge/2mm/2mm.origin.c | 160 - .../2mm/2mm.origin.heuristic.polymer.seq.mlir | 339 - .../split-and-merge/2mm/2mm.origin.mlir | 283 - .../2mm.origin.nosplit.polymer.parallel.mlir | 346 - .../2mm/2mm.origin.nosplit.polymer.seq.mlir | 346 - .../split-and-merge/2mm/2mm.origin.pluto.c | 265 - .../2mm/2mm.origin.pluto.cloog | 137 - .../split-and-merge/2mm/2mm.origin.pluto.log | 1640 ----- .../2mm/2mm.origin.polymer.mlir | 371 -- .../2mm/2mm.origin.polymer.parallel.mlir | 344 - .../2mm/2mm.origin.polymer.seq.mlir | 371 -- ...2mm.origin.split-0 2.polymer.parallel.mlir | 344 - .../2mm/2mm.origin.split-0 2.polymer.seq.mlir | 339 - ...2mm.origin.split-0-2.polymer.parallel.mlir | 344 - .../2mm/2mm.origin.split-0-2.polymer.seq.mlir | 339 - .../2mm/2mm.origin.splittable.mlir | 284 - .../2mm/2mm.split-0-2.polymer.par.mlir | 344 - .../2mm/2mm.split-0-2.polymer.seq.mlir | 339 - .../split-and-merge/2mm/2mm.split.pluto.log | 1 - .../split-and-merge/2mm/2mm.split1-noinit.c | 165 - .../2mm/2mm.split1-noinit.pluto.c | 192 - .../2mm/2mm.split1-noinit.pluto.cloog | 123 - .../2mm/2mm.split1-noinit.pluto.log | 2039 ------ .../split-and-merge/2mm/2mm.split1.c | 165 - .../split-and-merge/2mm/2mm.split1.pluto.c | 265 - .../2mm/2mm.split1.pluto.cloog | 162 - .../split-and-merge/2mm/2mm.split1.pluto.log | 2340 ------- .../split-and-merge/2mm/2mm.split12-diff.c | 172 - .../2mm/2mm.split12-diff.pluto.c | 271 - .../2mm/2mm.split12-diff.pluto.cloog | 191 - .../2mm/2mm.split12-diff.pluto.log | 2935 --------- .../split-and-merge/2mm/2mm.split12.c | 168 - .../split-and-merge/2mm/2mm.split12.pluto.c | 207 - .../2mm/2mm.split12.pluto.cloog | 185 - .../split-and-merge/2mm/2mm.split12.pluto.log | 2990 --------- .../split-and-merge/2mm/2mm.split2.c | 166 - .../split-and-merge/2mm/2mm.split2.pluto.c | 276 - .../2mm/2mm.split2.pluto.cloog | 157 - .../split-and-merge/2mm/2mm.split2.pluto.log | 2174 ------- .../split-and-merge/2mm/2mm.splittable.mlir | 284 - .../3mm/3mm.heuristic.polymer.par.log | 820 +++ .../3mm/3mm.heuristic.polymer.par.mlir | 161 +- .../3mm/3mm.heuristic.polymer.seq.log | 722 +++ .../3mm/3mm.heuristic.polymer.seq.mlir | 157 +- .../3mm/3mm.nosplit.polymer.par.log | 631 ++ .../3mm/3mm.nosplit.polymer.par.mlir | 167 +- .../3mm/3mm.nosplit.polymer.seq.log | 558 ++ .../3mm/3mm.nosplit.polymer.seq.mlir | 167 +- .../split-and-merge/3mm/3mm.origin.c | 229 - .../split-and-merge/3mm/3mm.origin.mlir | 297 - .../split-and-merge/3mm/3mm.origin.pluto.c | 309 - .../3mm/3mm.origin.pluto.cloog | 195 - .../split-and-merge/3mm/3mm.origin.pluto.log | 2315 ------- .../3mm/3mm.origin.polymer.mlir | 425 -- .../3mm/3mm.origin.polymer.parallel.mlir | 368 -- .../3mm/3mm.origin.polymer.seq.mlir | 405 -- .../3mm/3mm.origin.splittable.mlir | 298 - .../3mm/3mm.split-0-1-2.polymer.par.mlir | 389 -- .../3mm/3mm.split-0-1-2.polymer.seq.mlir | 383 -- .../polybench/split-and-merge/3mm/3mm.split.c | 234 - .../split-and-merge/3mm/3mm.split.pluto.c | 311 - .../split-and-merge/3mm/3mm.split.pluto.cloog | 229 - .../split-and-merge/3mm/3mm.split.pluto.log | 2929 --------- .../split-and-merge/3mm/3mm.splittable.mlir | 298 - example/polybench/split-and-merge/README.md | 14 +- .../correlation.heuristic.polymer.par.log | 1030 +++ .../correlation.heuristic.polymer.par.mlir | 228 +- .../correlation.heuristic.polymer.seq.log | 887 +++ .../correlation.heuristic.polymer.seq.mlir | 224 +- .../correlation.nosplit.polymer.par.log | 963 +++ .../correlation.nosplit.polymer.par.mlir | 218 +- .../correlation.nosplit.polymer.seq.log | 821 +++ .../correlation.nosplit.polymer.seq.mlir | 218 +- .../correlation/correlation.origin.c | 144 - .../correlation/correlation.origin.mlir | 233 - .../correlation/correlation.origin.pluto.c | 204 - .../correlation.origin.pluto.cloog | 376 -- .../correlation/correlation.origin.pluto.log | 5054 --------------- .../correlation.origin.polymer.parallel.mlir | 385 -- .../correlation.origin.polymer.seq.mlir | 385 -- .../correlation.origin.splittable.mlir | 234 - .../correlation.split-8.polymer.par.mlir | 369 -- .../correlation.split-8.polymer.seq.mlir | 365 -- .../correlation/correlation.split.c | 148 - .../correlation/correlation.split.pluto.c | 205 - .../correlation/correlation.split.pluto.cloog | 385 -- .../correlation.split.pluto.inner.c | 221 - .../correlation/correlation.split.pluto.log | 5731 ----------------- .../correlation.split.pluto.noscr.c | 202 - .../covariance.heuristic.polymer.par.log | 777 +++ .../covariance.heuristic.polymer.par.mlir | 148 +- .../covariance.heuristic.polymer.seq.log | 663 ++ .../covariance.heuristic.polymer.seq.mlir | 142 +- .../covariance.nosplit.polymer.par.log | 718 +++ .../covariance.nosplit.polymer.par.mlir | 139 +- .../covariance.nosplit.polymer.seq.log | 607 ++ .../covariance.nosplit.polymer.seq.mlir | 139 +- .../covariance/covariance.origin.c | 120 - .../covariance/covariance.origin.pluto.c | 173 - .../covariance/covariance.origin.pluto.cloog | 221 - .../covariance/covariance.origin.pluto.log | 2651 -------- .../covariance.origin.polymer.parallel.mlir | 280 - .../covariance.origin.polymer.seq.mlir | 306 - .../covariance.split-0.polymer.par.mlir | 290 - .../covariance.split-0.polymer.seq.mlir | 286 - .../covariance/covariance.split.c | 123 - .../covariance/covariance.split.pluto.c | 171 - .../covariance/covariance.split.pluto.cloog | 237 - .../covariance/covariance.split.pluto.inner.c | 188 - .../covariance/covariance.split.pluto.log | 3248 ---------- .../covariance/covariance.split.pluto.noscr.c | 168 - .../split-and-merge/covariance/perf.data | Bin 8915704 -> 0 bytes .../split-and-merge/doitgen/doitgen.h | 86 - .../split-and-merge/doitgen/doitgen.origin.c | 168 - .../doitgen/doitgen.origin.pluto.c | 189 - .../doitgen/doitgen.origin.pluto.cloog | 102 - .../doitgen/doitgen.origin.pluto.log | 2750 -------- .../split-and-merge/doitgen/doitgen.split.c | 174 - .../doitgen/doitgen.split.pluto.c | 202 - .../doitgen/doitgen.split.pluto.cloog | 131 - .../doitgen/doitgen.split.pluto.log | 3453 ---------- .../split-and-merge/eval-split-mlir-heuristic | 9 +- .../eval-split-mlir-heuristic-all | 26 - .../eval-split-mlir-heuristic-batch | 15 +- .../split-and-merge/gramschmidt/gramschmidt.c | 212 - .../gramschmidt/gramschmidt.mlir | 266 - .../gramschmidt.nosplit.polymer.par.mlir | 340 - .../gramschmidt.nosplit.polymer.seq.mlir | 340 - .../gramschmidt/gramschmidt.origin.c | 212 - .../gramschmidt/gramschmidt.origin.mlir | 266 - .../gramschmidt/gramschmidt.origin.pluto.c | 242 - .../gramschmidt.origin.pluto.cloog | 196 - .../gramschmidt/gramschmidt.origin.pluto.log | 3069 --------- .../gramschmidt.origin.polymer.parallel.mlir | 376 -- .../gramschmidt.origin.polymer.seq.mlir | 376 -- .../gramschmidt.origin.splittable.mlir | 267 - .../gramschmidt.split-0.polymer.par.mlir | 352 - .../gramschmidt.split-0.polymer.seq.mlir | 352 - .../gramschmidt.split-1.polymer.seq.mlir | 343 - ...gramschmidt.split-split-1.polymer.seq.mlir | 0 .../gramschmidt/gramschmidt.split.pluto.cloog | 225 - .../gramschmidt/gramschmidt.split.pluto.log | 3565 ---------- .../gramschmidt/gramschmidt.split1.c | 219 - .../gramschmidt/gramschmidt.split1.pluto.c | 250 - .../gramschmidt.split1.pluto.cloog | 221 - .../gramschmidt/gramschmidt.split1.pluto.log | 3419 ---------- .../gramschmidt/gramschmidt.split2.c | 219 - .../gramschmidt/gramschmidt.split2.pluto.c | 244 - .../gramschmidt.split2.pluto.cloog | 225 - .../gramschmidt/gramschmidt.split2.pluto.log | 3565 ---------- .../gramschmidt/gramschmidt.split3.c | 219 - .../gramschmidt/gramschmidt.split3.pluto.c | 244 - .../gramschmidt.split3.pluto.cloog | 225 - .../gramschmidt/gramschmidt.split3.pluto.log | 3565 ---------- .../gramschmidt/gramschmidt.splittable.mlir | 267 - .../split-and-merge/num_splittable.txt | 30 - .../split-and-merge/report-timing.py | 31 + example/polybench/split-and-merge/trmm/trmm.c | 164 + .../gramschmidt.h => trmm/trmm.h} | 6 +- .../trmm/trmm.heuristic.polymer.par.log | 328 + .../trmm/trmm.heuristic.polymer.par.mlir | 244 + .../trmm/trmm.heuristic.polymer.seq.log | 292 + .../trmm.heuristic.polymer.seq.mlir} | 311 +- .../covariance.origin.mlir => trmm/trmm.mlir} | 203 +- .../trmm/trmm.nosplit.polymer.par.log | 263 + .../trmm.nosplit.polymer.par.mlir} | 279 +- .../trmm/trmm.nosplit.polymer.seq.log | 228 + .../trmm.nosplit.polymer.seq.mlir} | 277 +- 177 files changed, 14529 insertions(+), 88513 deletions(-) create mode 100644 example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.par.log create mode 100644 example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.seq.log create mode 100644 example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.par.log rename "example/polybench/split-and-merge/2mm/2mm.origin.0\n2\nsplit-0 2.polymer.parallel.mlir" => example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.seq.log (100%) delete mode 100644 "example/polybench/split-and-merge/2mm/2mm.origin.0\n2\nsplit-0 2.polymer.seq.mlir" delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.heuristic.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.nosplit.polymer.parallel.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.nosplit.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.pluto.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.pluto.cloog delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.pluto.log delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.polymer.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.polymer.parallel.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.split-0 2.polymer.parallel.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.split-0 2.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.split-0-2.polymer.parallel.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.split-0-2.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.origin.splittable.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split-0-2.polymer.par.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split-0-2.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split.pluto.log delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split1-noinit.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.cloog delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.log delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split1.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split1.pluto.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split1.pluto.cloog delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split1.pluto.log delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split12-diff.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.cloog delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.log delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split12.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split12.pluto.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split12.pluto.cloog delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split12.pluto.log delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split2.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split2.pluto.c delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split2.pluto.cloog delete mode 100644 example/polybench/split-and-merge/2mm/2mm.split2.pluto.log delete mode 100644 example/polybench/split-and-merge/2mm/2mm.splittable.mlir create mode 100644 example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.par.log create mode 100644 example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.seq.log create mode 100644 example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.par.log create mode 100644 example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.seq.log delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.c delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.mlir delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.pluto.c delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.pluto.cloog delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.pluto.log delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.polymer.mlir delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.polymer.parallel.mlir delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/3mm/3mm.origin.splittable.mlir delete mode 100644 example/polybench/split-and-merge/3mm/3mm.split-0-1-2.polymer.par.mlir delete mode 100644 example/polybench/split-and-merge/3mm/3mm.split-0-1-2.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/3mm/3mm.split.c delete mode 100644 example/polybench/split-and-merge/3mm/3mm.split.pluto.c delete mode 100644 example/polybench/split-and-merge/3mm/3mm.split.pluto.cloog delete mode 100644 example/polybench/split-and-merge/3mm/3mm.split.pluto.log delete mode 100644 example/polybench/split-and-merge/3mm/3mm.splittable.mlir create mode 100644 example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.par.log create mode 100644 example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.seq.log create mode 100644 example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.par.log create mode 100644 example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.seq.log delete mode 100644 example/polybench/split-and-merge/correlation/correlation.origin.c delete mode 100644 example/polybench/split-and-merge/correlation/correlation.origin.mlir delete mode 100644 example/polybench/split-and-merge/correlation/correlation.origin.pluto.c delete mode 100644 example/polybench/split-and-merge/correlation/correlation.origin.pluto.cloog delete mode 100644 example/polybench/split-and-merge/correlation/correlation.origin.pluto.log delete mode 100644 example/polybench/split-and-merge/correlation/correlation.origin.polymer.parallel.mlir delete mode 100644 example/polybench/split-and-merge/correlation/correlation.origin.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/correlation/correlation.origin.splittable.mlir delete mode 100644 example/polybench/split-and-merge/correlation/correlation.split-8.polymer.par.mlir delete mode 100644 example/polybench/split-and-merge/correlation/correlation.split-8.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/correlation/correlation.split.c delete mode 100644 example/polybench/split-and-merge/correlation/correlation.split.pluto.c delete mode 100644 example/polybench/split-and-merge/correlation/correlation.split.pluto.cloog delete mode 100644 example/polybench/split-and-merge/correlation/correlation.split.pluto.inner.c delete mode 100644 example/polybench/split-and-merge/correlation/correlation.split.pluto.log delete mode 100644 example/polybench/split-and-merge/correlation/correlation.split.pluto.noscr.c create mode 100644 example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.par.log create mode 100644 example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.seq.log create mode 100644 example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.par.log create mode 100644 example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.seq.log delete mode 100644 example/polybench/split-and-merge/covariance/covariance.origin.c delete mode 100644 example/polybench/split-and-merge/covariance/covariance.origin.pluto.c delete mode 100644 example/polybench/split-and-merge/covariance/covariance.origin.pluto.cloog delete mode 100644 example/polybench/split-and-merge/covariance/covariance.origin.pluto.log delete mode 100644 example/polybench/split-and-merge/covariance/covariance.origin.polymer.parallel.mlir delete mode 100644 example/polybench/split-and-merge/covariance/covariance.origin.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/covariance/covariance.split-0.polymer.par.mlir delete mode 100644 example/polybench/split-and-merge/covariance/covariance.split-0.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/covariance/covariance.split.c delete mode 100644 example/polybench/split-and-merge/covariance/covariance.split.pluto.c delete mode 100644 example/polybench/split-and-merge/covariance/covariance.split.pluto.cloog delete mode 100644 example/polybench/split-and-merge/covariance/covariance.split.pluto.inner.c delete mode 100644 example/polybench/split-and-merge/covariance/covariance.split.pluto.log delete mode 100644 example/polybench/split-and-merge/covariance/covariance.split.pluto.noscr.c delete mode 100644 example/polybench/split-and-merge/covariance/perf.data delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.h delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.origin.c delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.c delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.cloog delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.log delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.split.c delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.split.pluto.c delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.split.pluto.cloog delete mode 100644 example/polybench/split-and-merge/doitgen/doitgen.split.pluto.log delete mode 100755 example/polybench/split-and-merge/eval-split-mlir-heuristic-all delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.nosplit.polymer.par.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.nosplit.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.cloog delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.log delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.polymer.parallel.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.splittable.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split-0.polymer.par.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split-0.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split-1.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split-split-1.polymer.seq.mlir delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split.pluto.cloog delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split.pluto.log delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.cloog delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.log delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.cloog delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.log delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.c delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.cloog delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.log delete mode 100644 example/polybench/split-and-merge/gramschmidt/gramschmidt.splittable.mlir delete mode 100644 example/polybench/split-and-merge/num_splittable.txt create mode 100755 example/polybench/split-and-merge/report-timing.py create mode 100644 example/polybench/split-and-merge/trmm/trmm.c rename example/polybench/split-and-merge/{gramschmidt/gramschmidt.h => trmm/trmm.h} (95%) create mode 100644 example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.par.log create mode 100644 example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.par.mlir create mode 100644 example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.seq.log rename example/polybench/split-and-merge/{correlation/correlation.splittable.mlir => trmm/trmm.heuristic.polymer.seq.mlir} (64%) rename example/polybench/split-and-merge/{covariance/covariance.origin.mlir => trmm/trmm.mlir} (71%) create mode 100644 example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.par.log rename example/polybench/split-and-merge/{covariance/covariance.origin.splittable.mlir => trmm/trmm.nosplit.polymer.par.mlir} (64%) create mode 100644 example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.seq.log rename example/polybench/split-and-merge/{covariance/covariance.splittable.mlir => trmm/trmm.nosplit.polymer.seq.mlir} (64%) diff --git a/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.par.log b/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.par.log new file mode 100644 index 00000000..09fa9264 --- /dev/null +++ b/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.par.log @@ -0,0 +1,578 @@ +t7 {loop with stmts: S2, S3, } +t6 {loop with stmts: S2, S3, } +t5 {loop with stmts: S2, S3, } +t7 {loop with stmts: S5, S6, } +t6 {loop with stmts: S5, S6, } +t5 {loop with stmts: S5, S6, } +Pluto schedule elapsed time: 1.910326e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 6 0 0 0 4 + +# Parameters are provided +1 + +P0 P1 P2 P3 + + +# Number of statements +6 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +9 10 4 0 0 4 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 0 0 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +8 18 8 4 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 5 ## c8 == 5 + +# ---------------------------------------------- 1.3 Access +WRITE +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S0(i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +10 11 5 0 0 4 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 1 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +8 19 8 5 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 ## c3 == fk0+fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 3 ## c8 == 3 + +# ---------------------------------------------- 2.3 Access +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +2 13 2 5 0 4 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S1(i2, i1, i0) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +10 11 5 0 0 4 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 1 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +8 19 8 5 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 ## c3 == fk0+fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c8 == 4 + +# ---------------------------------------------- 3.3 Access +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +2 13 2 5 0 4 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S2(i0, i1, i2) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +9 10 4 0 0 4 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +8 18 8 4 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 2 ## c8 == 2 + +# ---------------------------------------------- 4.3 Access +READ +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +WRITE +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S3(i0, i1) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +10 11 5 0 0 4 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +8 19 8 5 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 ## c3 == fk0+fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 5.3 Access +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 6 ## Arr == A6 + +WRITE +2 13 2 5 0 4 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S4(i2, i1, i0) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +10 11 5 0 0 4 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +8 19 8 5 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 ## c3 == fk0+fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c8 == 1 + +# ---------------------------------------------- 6.3 Access +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +READ +2 13 2 5 0 4 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S5(i0, i1, i2) + + +# =============================================== Extensions + +# Number of arrays +6 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 +6 A6 + + + +kernel_2mm + + +t1 t2 t3 t4 t5 t6 t7 t8 + + + +# Number of loops +4 +# =========================================== +# Loop number 1 +# Iterator name +t3 +# Number of stmts +1 +# Statement identifiers +1 +# Private variables +t4,t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t3 +# Number of stmts +1 +# Statement identifiers +4 +# Private variables +t4,t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 3 +# Iterator name +t4 +# Number of stmts +2 +# Statement identifiers +2 +3 +# Private variables +t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 4 +# Iterator name +t4 +# Number of stmts +2 +# Statement identifiers +5 +6 +# Private variables +t5,t6,t7,t8 +# Directive +1 + + + + +[CLooG] INFO: 2 domains have been blocked. +[CLooG] INFO: 3 dimensions (over 8) are scalar. +if (P0 >= 1) { + if (P3 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t4,t5,t6,t7,t8) + for (t3=lbp;t3<=ubp;t3++) { + for (t4=0;t4<=floord(P3-1,32);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + for (t6=32*t4;t6<=min(P3-1,32*t4+31);t6++) { + S3(t5, t6) + } + } + } + } + } + if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t4,t5,t6,t7,t8) + for (t3=lbp;t3<=ubp;t3++) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + S0(t5, t6) + } + } + } + } + } + if ((P1 >= 1) && (P2 >= 1)) { + for (t3=0;t3<=floord(P0+P2-2,32);t3++) { + lbp=max(0,ceild(32*t3-P2+1,32)); + ubp=min(floord(P0-1,32),t3); +#pragma omp parallel for private(lbv,ubv,t5,t6,t7,t8) + for (t4=lbp;t4<=ubp;t4++) { + for (t5=32*t3-32*t4;t5<=min(P2-1,32*t3-32*t4+31);t5++) { + for (t6=32*t4;t6<=min(P0-1,32*t4+31);t6++) { + for (t7=0;t7<=P1-1;t7++) { + S1(t5, t7, t6) + S2(t6, t7, t5) + } + } + } + } + } + } + if ((P1 >= 1) && (P3 >= 1)) { + for (t3=0;t3<=floord(P0+P1-2,32);t3++) { + lbp=max(0,ceild(32*t3-P1+1,32)); + ubp=min(floord(P0-1,32),t3); +#pragma omp parallel for private(lbv,ubv,t5,t6,t7,t8) + for (t4=lbp;t4<=ubp;t4++) { + for (t5=32*t3-32*t4;t5<=min(P1-1,32*t3-32*t4+31);t5++) { + for (t6=32*t4;t6<=min(P0-1,32*t4+31);t6++) { + for (t7=0;t7<=P3-1;t7++) { + S4(t5, t7, t6) + S5(t6, t7, t5) + } + } + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.2571 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0003 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::AnnotateHeuristicPass + 0.0003 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::ScopStmtSplitPass + 0.0002 ( 0.1%) 0.0002 ( 0.1%) {anonymous}::UnifyScratchpadPass + 0.0008 ( 0.3%) 0.0008 ( 0.3%) Canonicalizer + 0.0006 ( 0.2%) 0.0003 ( 0.1%) 'func' Pipeline + 0.0004 ( 0.1%) 0.0002 ( 0.1%) {anonymous}::RegToMemPass + 0.0003 ( 0.1%) 0.0001 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0003 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.2503 ( 97.3%) 0.2503 ( 97.4%) {anonymous}::PlutoTransformPass + 0.0009 ( 0.4%) 0.0009 ( 0.4%) Canonicalizer + 0.0024 ( 0.9%) 0.0024 ( 0.9%) Inliner + 0.0018 ( 0.7%) 0.0018 ( 0.7%) 'func' Pipeline + 0.0018 ( 0.7%) 0.0018 ( 0.7%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0011 ( 0.4%) 0.0011 ( 0.4%) Canonicalizer + 0.2574 (100.0%) 0.2571 (100.0%) Total diff --git a/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.par.mlir b/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.par.mlir index 43290589..cd96531a 100644 --- a/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.par.mlir +++ b/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.par.mlir @@ -8,6 +8,14 @@ #map7 = affine_map<(d0, d1) -> (2200, d0 * 32 - d1 * 32 + 32)> #map8 = affine_map<(d0) -> (0, (d0 * 32 - 1799) ceildiv 32)> #map9 = affine_map<(d0, d1) -> (1800, d0 * 32 - d1 * 32 + 32)> +#map10 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map11 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map12 = affine_map<()[s0, s1] -> ((s0 + s1 - 2) floordiv 32 + 1)> +#map13 = affine_map<(d0)[s0] -> (0, (d0 * 32 - s0 + 1) ceildiv 32)> +#map14 = affine_map<(d0)[s0] -> ((s0 - 1) floordiv 32 + 1, d0 + 1)> +#map15 = affine_map<(d0, d1)[s0] -> (s0, d0 * 32 - d1 * 32 + 32)> +#set0 = affine_set<()[s0] : (s0 - 1 >= 0)> +#set1 = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -234,44 +242,79 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { + func @kernel_2mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = index_cast %arg2 : i32 to index + %3 = index_cast %arg3 : i32 to index + affine.if #set0()[%0] { + affine.if #set0()[%3] { + affine.for %arg13 = 0 to #map10()[%0] { + affine.for %arg14 = 0 to #map10()[%3] { + affine.for %arg15 = #map0(%arg13) to min #map11(%arg13)[%0] { + affine.for %arg16 = #map0(%arg14) to min #map11(%arg14)[%3] { + %4 = affine.load %arg10[%arg15, %arg16] : memref + %5 = mulf %4, %arg5 : f64 + affine.store %5, %arg10[%arg15, %arg16] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set0()[%1] { + affine.for %arg13 = 0 to #map10()[%0] { + affine.for %arg14 = 0 to #map10()[%1] { + affine.for %arg15 = #map0(%arg13) to min #map11(%arg13)[%0] { + affine.for %arg16 = #map0(%arg14) to min #map11(%arg14)[%1] { + affine.store %cst, %arg6[%arg15, %arg16] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set1()[%1, %2] { + affine.for %arg13 = 0 to #map12()[%0, %2] { + affine.for %arg14 = max #map13(%arg13)[%2] to min #map14(%arg13)[%0] { + affine.for %arg15 = #map6(%arg13, %arg14) to min #map15(%arg13, %arg14)[%2] { + affine.for %arg16 = #map0(%arg14) to min #map11(%arg14)[%0] { + affine.for %arg17 = 0 to %1 { + %4 = affine.load %arg7[%arg16, %arg15] : memref + %5 = mulf %arg4, %4 : f64 + %6 = affine.load %arg8[%arg15, %arg17] : memref + %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 + affine.store %7, %arg11[%arg15] : memref + %8 = affine.load %arg6[%arg16, %arg17] : memref + %9 = affine.load %arg11[%arg15] : memref + %10 = addf %8, %9 : f64 + affine.store %10, %arg6[%arg16, %arg17] : memref + } + } + } + } {scop.parallelizable} + } + } + affine.if #set1()[%1, %3] { + affine.for %arg13 = 0 to #map12()[%0, %1] { + affine.for %arg14 = max #map13(%arg13)[%1] to min #map14(%arg13)[%0] { + affine.for %arg15 = #map6(%arg13, %arg14) to min #map15(%arg13, %arg14)[%1] { + affine.for %arg16 = #map0(%arg14) to min #map11(%arg14)[%0] { + affine.for %arg17 = 0 to %3 { + %4 = affine.load %arg6[%arg16, %arg15] : memref + %5 = affine.load %arg9[%arg15, %arg17] : memref + %6 = mulf %4, %5 {scop.splittable = 1 : index} : f64 + affine.store %6, %arg11[%arg15] : memref + %7 = affine.load %arg10[%arg16, %arg17] : memref + %8 = affine.load %arg11[%arg15] : memref + %9 = addf %7, %8 : f64 + affine.store %9, %arg10[%arg16, %arg17] : memref + } + } + } + } {scop.parallelizable} + } + } + } return } func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { diff --git a/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.seq.log b/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.seq.log new file mode 100644 index 00000000..a13c4c14 --- /dev/null +++ b/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.seq.log @@ -0,0 +1,511 @@ +t7 {loop with stmts: S2, S3, } +t6 {loop with stmts: S2, S3, } +t5 {loop with stmts: S2, S3, } +t7 {loop with stmts: S5, S6, } +t6 {loop with stmts: S5, S6, } +t5 {loop with stmts: S5, S6, } +Pluto schedule elapsed time: 1.853334e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 6 0 0 0 4 + +# Parameters are provided +1 + +P0 P1 P2 P3 + + +# Number of statements +6 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +9 10 4 0 0 4 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 0 0 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +8 18 8 4 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 5 ## c8 == 5 + +# ---------------------------------------------- 1.3 Access +WRITE +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S0(i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +10 11 5 0 0 4 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 1 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +8 19 8 5 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c3 == fk0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 3 ## c8 == 3 + +# ---------------------------------------------- 2.3 Access +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +2 13 2 5 0 4 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S1(i2, i1, i0) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +10 11 5 0 0 4 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 1 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +8 19 8 5 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c3 == fk0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c8 == 4 + +# ---------------------------------------------- 3.3 Access +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +2 13 2 5 0 4 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S2(i0, i1, i2) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +9 10 4 0 0 4 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +8 18 8 4 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 2 ## c8 == 2 + +# ---------------------------------------------- 4.3 Access +READ +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +WRITE +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S3(i0, i1) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +10 11 5 0 0 4 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +8 19 8 5 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c3 == fk0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 5.3 Access +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 6 ## Arr == A6 + +WRITE +2 13 2 5 0 4 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S4(i2, i1, i0) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +10 11 5 0 0 4 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +8 19 8 5 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c3 == fk0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c4 == fk1 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c8 == 1 + +# ---------------------------------------------- 6.3 Access +READ +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +READ +2 13 2 5 0 4 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 14 3 5 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S5(i0, i1, i2) + + +# =============================================== Extensions + +# Number of arrays +6 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 +6 A6 + + + +kernel_2mm + + +t1 t2 t3 t4 t5 t6 t7 t8 + + + + +[CLooG] INFO: 2 domains have been blocked. +[CLooG] INFO: 3 dimensions (over 8) are scalar. +if (P0 >= 1) { + if (P3 >= 1) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=0;t4<=floord(P3-1,32);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + for (t6=32*t4;t6<=min(P3-1,32*t4+31);t6++) { + S3(t5, t6) + } + } + } + } + } + if (P1 >= 1) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + S0(t5, t6) + } + } + } + } + } + if (P1 >= 1) { + for (t3=0;t3<=floord(P2-1,32);t3++) { + for (t4=0;t4<=floord(P0-1,32);t4++) { + for (t5=32*t3;t5<=min(P2-1,32*t3+31);t5++) { + for (t6=32*t4;t6<=min(P0-1,32*t4+31);t6++) { + for (t7=0;t7<=P1-1;t7++) { + S1(t5, t7, t6) + S2(t6, t7, t5) + } + } + } + } + } + } + if (P3 >= 1) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=0;t4<=floord(P0-1,32);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + for (t6=32*t4;t6<=min(P0-1,32*t4+31);t6++) { + for (t7=0;t7<=P3-1;t7++) { + S4(t5, t7, t6) + S5(t6, t7, t5) + } + } + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.2572 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0008 ( 0.3%) 0.0008 ( 0.3%) {anonymous}::AnnotateHeuristicPass + 0.0010 ( 0.4%) 0.0010 ( 0.4%) {anonymous}::ScopStmtSplitPass + 0.0006 ( 0.2%) 0.0006 ( 0.2%) {anonymous}::UnifyScratchpadPass + 0.0020 ( 0.8%) 0.0020 ( 0.8%) Canonicalizer + 0.0010 ( 0.4%) 0.0004 ( 0.1%) 'func' Pipeline + 0.0006 ( 0.2%) 0.0002 ( 0.1%) {anonymous}::RegToMemPass + 0.0004 ( 0.2%) 0.0002 ( 0.1%) {anonymous}::InsertRedundantLoadPass + 0.0005 ( 0.2%) 0.0005 ( 0.2%) {anonymous}::ExtractScopStmtPass + 0.2477 ( 96.1%) 0.2477 ( 96.3%) {anonymous}::PlutoTransformPass + 0.0009 ( 0.3%) 0.0009 ( 0.3%) Canonicalizer + 0.0023 ( 0.9%) 0.0023 ( 0.9%) Inliner + 0.0017 ( 0.7%) 0.0017 ( 0.7%) 'func' Pipeline + 0.0017 ( 0.7%) 0.0017 ( 0.7%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0010 ( 0.4%) 0.0010 ( 0.4%) Canonicalizer + 0.2578 (100.0%) 0.2572 (100.0%) Total diff --git a/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.seq.mlir b/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.seq.mlir index 13bc842c..d5303742 100644 --- a/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.seq.mlir +++ b/example/polybench/split-and-merge/2mm/2mm.heuristic.polymer.seq.mlir @@ -3,6 +3,9 @@ #map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> #map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> #map4 = affine_map<(d0) -> (2200, d0 * 32 + 32)> +#map5 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map6 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#set = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -229,44 +232,79 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { + func @kernel_2mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = index_cast %arg2 : i32 to index + %3 = index_cast %arg3 : i32 to index + affine.if #set()[%0] { + affine.if #set()[%3] { + affine.for %arg13 = 0 to #map5()[%0] { + affine.for %arg14 = 0 to #map5()[%3] { + affine.for %arg15 = #map0(%arg13) to min #map6(%arg13)[%0] { + affine.for %arg16 = #map0(%arg14) to min #map6(%arg14)[%3] { + %4 = affine.load %arg10[%arg15, %arg16] : memref + %5 = mulf %4, %arg5 : f64 + affine.store %5, %arg10[%arg15, %arg16] : memref + } + } + } + } + } + affine.if #set()[%1] { + affine.for %arg13 = 0 to #map5()[%0] { + affine.for %arg14 = 0 to #map5()[%1] { + affine.for %arg15 = #map0(%arg13) to min #map6(%arg13)[%0] { + affine.for %arg16 = #map0(%arg14) to min #map6(%arg14)[%1] { + affine.store %cst, %arg6[%arg15, %arg16] : memref + } + } + } + } + } + affine.if #set()[%1] { + affine.for %arg13 = 0 to #map5()[%2] { + affine.for %arg14 = 0 to #map5()[%0] { + affine.for %arg15 = #map0(%arg13) to min #map6(%arg13)[%2] { + affine.for %arg16 = #map0(%arg14) to min #map6(%arg14)[%0] { + affine.for %arg17 = 0 to %1 { + %4 = affine.load %arg7[%arg16, %arg15] : memref + %5 = mulf %arg4, %4 : f64 + %6 = affine.load %arg8[%arg15, %arg17] : memref + %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 + affine.store %7, %arg11[%arg15] : memref + %8 = affine.load %arg6[%arg16, %arg17] : memref + %9 = affine.load %arg11[%arg15] : memref + %10 = addf %8, %9 : f64 + affine.store %10, %arg6[%arg16, %arg17] : memref + } + } + } + } + } + } + affine.if #set()[%3] { + affine.for %arg13 = 0 to #map5()[%1] { + affine.for %arg14 = 0 to #map5()[%0] { + affine.for %arg15 = #map0(%arg13) to min #map6(%arg13)[%1] { + affine.for %arg16 = #map0(%arg14) to min #map6(%arg14)[%0] { + affine.for %arg17 = 0 to %3 { + %4 = affine.load %arg6[%arg16, %arg15] : memref + %5 = affine.load %arg9[%arg15, %arg17] : memref + %6 = mulf %4, %5 {scop.splittable = 1 : index} : f64 + affine.store %6, %arg11[%arg15] : memref + %7 = affine.load %arg10[%arg16, %arg17] : memref + %8 = affine.load %arg11[%arg15] : memref + %9 = addf %7, %8 : f64 + affine.store %9, %arg10[%arg16, %arg17] : memref + } + } + } + } + } + } + } return } func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { diff --git a/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.par.log b/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.par.log new file mode 100644 index 00000000..34e86d8f --- /dev/null +++ b/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.par.log @@ -0,0 +1,456 @@ +Pluto schedule elapsed time: 1.485379e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 6 0 0 0 4 + +# Parameters are provided +1 + +P0 P1 P2 P3 + + +# Number of statements +4 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +9 10 4 0 0 4 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 0 0 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +9 19 9 4 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## c6 == 1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S0(i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +12 12 6 0 0 4 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 1 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 0 1 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +9 21 9 6 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c5 == fk2 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c8 == i2 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c9 == i1 + +# ---------------------------------------------- 2.3 Access +READ +3 15 3 6 0 4 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 15 3 6 0 4 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 15 3 6 0 4 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 15 3 6 0 4 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S1(i0, i1, i2) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +9 10 4 0 0 4 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 1 0 0 1 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +9 19 9 4 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 3.3 Access +READ +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 13 3 4 0 4 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S2(i0, i1) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +12 12 6 0 0 4 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 1 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 0 1 0 0 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 0 -1 0 0 0 0 31 ## 32*fk1-i2+31 >= 0 + 1 0 0 -32 0 1 0 0 0 0 0 0 ## -32*fk2+i1 >= 0 + 1 0 0 32 0 -1 0 0 0 0 0 31 ## 32*fk2-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +9 21 9 6 0 4 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c4 == 1 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c5 == fk2 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 ## c7 == i2 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## c8 == 1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c9 == i1 + +# ---------------------------------------------- 4.3 Access +READ +3 15 3 6 0 4 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +READ +3 15 3 6 0 4 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 15 3 6 0 4 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +WRITE +3 15 3 6 0 4 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S3(i0, i1, i2) + + +# =============================================== Extensions + +# Number of arrays +5 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 + + + +kernel_2mm + + +t1 t2 t3 t4 t5 t6 t7 t8 t9 + + + +# Number of loops +2 +# =========================================== +# Loop number 1 +# Iterator name +t2 +# Number of stmts +2 +# Statement identifiers +1 +3 +# Private variables +t3,t4,t5,t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t2 +# Number of stmts +2 +# Statement identifiers +2 +4 +# Private variables +t3,t4,t5,t6,t7,t8,t9 +# Directive +1 + + + + +[CLooG] INFO: 1 dimensions (over 9) are scalar. +if (P0 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8,t9) + for (t2=lbp;t2<=ubp;t2++) { + if ((P1 >= 0) && (P3 >= 0)) { + for (t3=0;t3<=floord(P1+P3-1,32);t3++) { + if (t3 <= min(floord(P1-1,32),floord(P3-1,32))) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(min(P1-1,P3-1),32*t3+31);t5++) { + S2(t4, t5) + S0(t4, t5) + } + for (t5=P3;t5<=min(P1-1,32*t3+31);t5++) { + S0(t4, t5) + } + for (t5=P1;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + } + if ((t3 <= floord(P1-1,32)) && (t3 >= ceild(P3,32))) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + S0(t4, t5) + } + } + } + if ((t3 <= floord(P3-1,32)) && (t3 >= ceild(P1,32))) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + } + } + } + if (P3 <= -1) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + S0(t4, t5) + } + } + } + } + if (P1 <= -1) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + } + } + } + if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8,t9) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + if (P2 >= 1) { + for (t5=0;t5<=floord(P2-1,32);t5++) { + for (t6=32*t2;t6<=min(P0-1,32*t2+31);t6++) { + for (t8=32*t5;t8<=min(P2-1,32*t5+31);t8++) { + for (t9=32*t3;t9<=min(P1-1,32*t3+31);t9++) { + S1(t6, t9, t8) + } + } + } + } + } + if (P3 >= 1) { + for (t5=0;t5<=floord(P3-1,32);t5++) { + for (t6=32*t2;t6<=min(P0-1,32*t2+31);t6++) { + for (t7=32*t3;t7<=min(P1-1,32*t3+31);t7++) { + for (t9=32*t5;t9<=min(P3-1,32*t5+31);t9++) { + S3(t6, t9, t7) + } + } + } + } + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.2751 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0013 ( 0.5%) 0.0004 ( 0.2%) 'func' Pipeline + 0.0008 ( 0.3%) 0.0003 ( 0.1%) {anonymous}::RegToMemPass + 0.0005 ( 0.2%) 0.0002 ( 0.1%) {anonymous}::InsertRedundantLoadPass + 0.0009 ( 0.3%) 0.0009 ( 0.3%) {anonymous}::ExtractScopStmtPass + 0.2688 ( 97.4%) 0.2688 ( 97.7%) {anonymous}::PlutoTransformPass + 0.0010 ( 0.4%) 0.0010 ( 0.4%) Canonicalizer + 0.0027 ( 1.0%) 0.0027 ( 1.0%) Inliner + 0.0021 ( 0.7%) 0.0021 ( 0.8%) 'func' Pipeline + 0.0021 ( 0.7%) 0.0021 ( 0.8%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0012 ( 0.4%) 0.0012 ( 0.4%) Canonicalizer + 0.2759 (100.0%) 0.2751 (100.0%) Total diff --git a/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.par.mlir b/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.par.mlir index 0535e58f..eb1ef123 100644 --- a/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.par.mlir +++ b/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.par.mlir @@ -4,9 +4,18 @@ #map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> #map4 = affine_map<(d0) -> (2400, d0 * 32 + 32)> #map5 = affine_map<(d0) -> (2200, d0 * 32 + 32)> +#map6 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map7 = affine_map<()[s0, s1] -> ((s0 + s1 - 1) floordiv 32 + 1)> +#map8 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map9 = affine_map<(d0)[s0, s1] -> (s0, s1, d0 * 32 + 32)> #set0 = affine_set<(d0) : (-d0 + 56 >= 0, -d0 + 74 >= 0)> #set1 = affine_set<(d0) : (-d0 + 56 >= 0, d0 - 75 >= 0)> #set2 = affine_set<(d0) : (-d0 + 74 >= 0, d0 - 57 >= 0)> +#set3 = affine_set<()[s0] : (s0 - 1 >= 0)> +#set4 = affine_set<()[s0, s1] : (s0 >= 0, s1 >= 0)> +#set5 = affine_set<(d0)[s0, s1] : (-d0 + (s0 - 1) floordiv 32 >= 0, -d0 + (s1 - 1) floordiv 32 >= 0)> +#set6 = affine_set<(d0)[s0, s1] : (-d0 + (s0 - 1) floordiv 32 >= 0, d0 - s1 ceildiv 32 >= 0)> +#set7 = affine_set<()[s0] : (-s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -246,34 +255,113 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { + func @kernel_2mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: f64, %arg6: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg6[symbol(%arg1), symbol(%arg4)] : memref - %2 = mulf %arg5, %1 : f64 - %3 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %4 = mulf %2, %3 : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = index_cast %arg2 : i32 to index + %3 = index_cast %arg3 : i32 to index + affine.if #set3()[%0] { + affine.for %arg11 = 0 to #map6()[%0] { + affine.if #set4()[%1, %3] { + affine.for %arg12 = 0 to #map7()[%1, %3] { + affine.if #set5(%arg12)[%1, %3] { + affine.for %arg13 = #map0(%arg11) to min #map8(%arg11)[%0] { + affine.for %arg14 = #map0(%arg12) to min #map9(%arg12)[%1, %3] { + %4 = affine.load %arg10[%arg13, %arg14] : memref + %5 = mulf %4, %arg5 : f64 + affine.store %5, %arg10[%arg13, %arg14] : memref + affine.store %cst, %arg6[%arg13, %arg14] : memref + } + affine.for %arg14 = %3 to min #map8(%arg12)[%1] { + affine.store %cst, %arg6[%arg13, %arg14] : memref + } + affine.for %arg14 = %1 to min #map8(%arg12)[%3] { + %4 = affine.load %arg10[%arg13, %arg14] : memref + %5 = mulf %4, %arg5 : f64 + affine.store %5, %arg10[%arg13, %arg14] : memref + } + } + } + affine.if #set6(%arg12)[%1, %3] { + affine.for %arg13 = #map0(%arg11) to min #map8(%arg11)[%0] { + affine.for %arg14 = #map0(%arg12) to min #map8(%arg12)[%1] { + affine.store %cst, %arg6[%arg13, %arg14] : memref + } + } + } + affine.if #set6(%arg12)[%3, %1] { + affine.for %arg13 = #map0(%arg11) to min #map8(%arg11)[%0] { + affine.for %arg14 = #map0(%arg12) to min #map8(%arg12)[%3] { + %4 = affine.load %arg10[%arg13, %arg14] : memref + %5 = mulf %4, %arg5 : f64 + affine.store %5, %arg10[%arg13, %arg14] : memref + } + } + } + } + } + affine.if #set7()[%3] { + affine.for %arg12 = 0 to #map6()[%1] { + affine.for %arg13 = #map0(%arg11) to min #map8(%arg11)[%0] { + affine.for %arg14 = #map0(%arg12) to min #map8(%arg12)[%1] { + affine.store %cst, %arg6[%arg13, %arg14] : memref + } + } + } + } + affine.if #set7()[%1] { + affine.for %arg12 = 0 to #map6()[%3] { + affine.for %arg13 = #map0(%arg11) to min #map8(%arg11)[%0] { + affine.for %arg14 = #map0(%arg12) to min #map8(%arg12)[%3] { + %4 = affine.load %arg10[%arg13, %arg14] : memref + %5 = mulf %4, %arg5 : f64 + affine.store %5, %arg10[%arg13, %arg14] : memref + } + } + } + } + } {scop.parallelizable} + affine.if #set3()[%1] { + affine.for %arg11 = 0 to #map6()[%0] { + affine.for %arg12 = 0 to #map6()[%1] { + affine.if #set3()[%2] { + affine.for %arg13 = 0 to #map6()[%2] { + affine.for %arg14 = #map0(%arg11) to min #map8(%arg11)[%0] { + affine.for %arg15 = #map0(%arg13) to min #map8(%arg13)[%2] { + affine.for %arg16 = #map0(%arg12) to min #map8(%arg12)[%1] { + %4 = affine.load %arg6[%arg14, %arg16] : memref + %5 = affine.load %arg7[%arg14, %arg15] : memref + %6 = mulf %arg4, %5 : f64 + %7 = affine.load %arg8[%arg15, %arg16] : memref + %8 = mulf %6, %7 : f64 + %9 = addf %4, %8 : f64 + affine.store %9, %arg6[%arg14, %arg16] : memref + } + } + } + } + } + affine.if #set3()[%3] { + affine.for %arg13 = 0 to #map6()[%3] { + affine.for %arg14 = #map0(%arg11) to min #map8(%arg11)[%0] { + affine.for %arg15 = #map0(%arg12) to min #map8(%arg12)[%1] { + affine.for %arg16 = #map0(%arg13) to min #map8(%arg13)[%3] { + %4 = affine.load %arg10[%arg14, %arg16] : memref + %5 = affine.load %arg6[%arg14, %arg15] : memref + %6 = affine.load %arg9[%arg15, %arg16] : memref + %7 = mulf %5, %6 : f64 + %8 = addf %4, %7 : f64 + affine.store %8, %arg10[%arg14, %arg16] : memref + } + } + } + } + } + } + } {scop.parallelizable} + } + } return } func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { diff --git "a/example/polybench/split-and-merge/2mm/2mm.origin.0\n2\nsplit-0 2.polymer.parallel.mlir" b/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.seq.log similarity index 100% rename from "example/polybench/split-and-merge/2mm/2mm.origin.0\n2\nsplit-0 2.polymer.parallel.mlir" rename to example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.seq.log diff --git a/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.seq.mlir b/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.seq.mlir index 7d738c83..e69de29b 100644 --- a/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.seq.mlir +++ b/example/polybench/split-and-merge/2mm/2mm.nosplit.polymer.seq.mlir @@ -1,346 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (1800, 2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -#set0 = affine_set<(d0) : (-d0 + 56 >= 0, -d0 + 74 >= 0)> -#set1 = affine_set<(d0) : (-d0 + 56 >= 0, d0 - 75 >= 0)> -#set2 = affine_set<(d0) : (-d0 + 74 >= 0, d0 - 57 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<1600x1800xf64> - %3 = memref.alloc() : memref<1600x2200xf64> - %4 = memref.alloc() : memref<2200x1800xf64> - %5 = memref.alloc() : memref<1800x2400xf64> - %6 = memref.alloc() : memref<1600x2400xf64> - %7 = memref.cast %6 : memref<1600x2400xf64> to memref - affine.store %cst, %0[0] : memref<1xf64> - affine.store %cst_0, %1[0] : memref<1xf64> - %8:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%19) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %19 = index_cast %arg4 : i32 to index - %20 = muli %arg3, %arg4 : i32 - %21 = addi %20, %c1_i32 : i32 - %22 = remi_signed %21, %c1600_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c1600_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %3[%16, %19] : memref<1600x2200xf64> - %26 = addi %arg4, %c1_i32 : i32 - scf.yield %26 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %9:2 = scf.while (%arg2 = %8#0) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %19 = index_cast %arg5 : i32 to index - %20 = addi %arg5, %c1_i32 : i32 - %21 = muli %arg3, %20 : i32 - %22 = remi_signed %21, %c1800_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c1800_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %4[%16, %19] : memref<2200x1800xf64> - scf.yield %20 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%19) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %19 = index_cast %arg4 : i32 to index - %20 = addi %arg4, %c3_i32 : i32 - %21 = muli %arg3, %20 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c2400_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2400_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%16, %19] : memref<1800x2400xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %11 = scf.while (%arg2 = %10#0) : (i32) -> i32 { - %16 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%16) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %16 = index_cast %arg2 : i32 to index - %17 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%19) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %19 = index_cast %arg3 : i32 to index - %20 = addi %arg3, %c2_i32 : i32 - %21 = muli %arg2, %20 : i32 - %22 = remi_signed %21, %c2200_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c2200_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %6[%16, %19] : memref<1600x2400xf64> - %26 = addi %arg3, %c1_i32 : i32 - scf.yield %26 : i32 - } - %18 = addi %arg2, %c1_i32 : i32 - scf.yield %18 : i32 - } - call @polybench_timer_start() : () -> () - %12 = affine.load %0[0] : memref<1xf64> - %13 = affine.load %1[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 132 { - affine.if #set0(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - affine.for %arg5 = 2400 to min #map3(%arg3) { - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - affine.for %arg5 = 1800 to min #map4(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - affine.if #set1(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - affine.if #set2(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map4(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = 0 to 69 { - affine.for %arg5 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg6 = #map0(%arg4) to min #map5(%arg4) { - affine.for %arg7 = #map0(%arg3) to min #map3(%arg3) { - %16 = affine.load %2[%arg5, %arg7] : memref<1600x1800xf64> - %17 = affine.load %3[%arg5, %arg6] : memref<1600x2200xf64> - %18 = mulf %12, %17 : f64 - %19 = affine.load %4[%arg6, %arg7] : memref<2200x1800xf64> - %20 = mulf %18, %19 : f64 - %21 = addf %16, %20 : f64 - affine.store %21, %2[%arg5, %arg7] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg4 = 0 to 75 { - affine.for %arg5 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg6 = #map0(%arg3) to min #map3(%arg3) { - affine.for %arg7 = #map0(%arg4) to min #map4(%arg4) { - %16 = affine.load %6[%arg5, %arg7] : memref<1600x2400xf64> - %17 = affine.load %2[%arg5, %arg6] : memref<1600x1800xf64> - %18 = affine.load %5[%arg6, %arg7] : memref<1800x2400xf64> - %19 = mulf %17, %18 : f64 - %20 = addf %16, %19 : f64 - affine.store %20, %6[%arg5, %arg7] : memref<1600x2400xf64> - } - } - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %14 = cmpi sgt, %arg0, %c42_i32 : i32 - %15 = scf.if %14 -> (i1) { - %16 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %17 = llvm.load %16 : !llvm.ptr> - %18 = llvm.mlir.addressof @str0 : !llvm.ptr> - %19 = llvm.getelementptr %18[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %20 = llvm.call @strcmp(%17, %19) : (!llvm.ptr, !llvm.ptr) -> i32 - %21 = trunci %20 : i32 to i1 - %22 = xor %21, %true : i1 - scf.yield %22 : i1 - } else { - scf.yield %false : i1 - } - scf.if %15 { - call @print_array(%c1600_i32, %c2400_i32, %7) : (i32, i32, memref) -> () - } - memref.dealloc %2 : memref<1600x1800xf64> - memref.dealloc %3 : memref<1600x2200xf64> - memref.dealloc %4 : memref<2200x1800xf64> - memref.dealloc %5 : memref<1800x2400xf64> - memref.dealloc %6 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: f64, %arg6: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg6[symbol(%arg1), symbol(%arg4)] : memref - %2 = mulf %arg5, %1 : f64 - %3 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %4 = mulf %2, %3 : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git "a/example/polybench/split-and-merge/2mm/2mm.origin.0\n2\nsplit-0 2.polymer.seq.mlir" "b/example/polybench/split-and-merge/2mm/2mm.origin.0\n2\nsplit-0 2.polymer.seq.mlir" deleted file mode 100644 index 0cfc06af..00000000 --- "a/example/polybench/split-and-merge/2mm/2mm.origin.0\n2\nsplit-0 2.polymer.seq.mlir" +++ /dev/null @@ -1,339 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg2 = 0 to 69 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.c b/example/polybench/split-and-merge/2mm/2mm.origin.c deleted file mode 100644 index a1b42ee6..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.c +++ /dev/null @@ -1,160 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j, k; - -#pragma scop - /* D := alpha*A*B*C + beta*D */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NJ; j++) - { - tmp[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NK; ++k) - tmp[i][j] += alpha * A[i][k] * B[k][j]; - } - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NL; j++) - { - D[i][j] *= beta; - for (k = 0; k < _PB_NJ; ++k) - D[i][j] += tmp[i][k] * C[k][j]; - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.heuristic.polymer.seq.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.heuristic.polymer.seq.mlir deleted file mode 100644 index 13bc842c..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.heuristic.polymer.seq.mlir +++ /dev/null @@ -1,339 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg2 = 0 to 69 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 1 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.mlir deleted file mode 100644 index 94d51a2d..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.mlir +++ /dev/null @@ -1,283 +0,0 @@ -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<1600x1800xf64> - %3 = memref.alloc() : memref<1600x2200xf64> - %4 = memref.alloc() : memref<2200x1800xf64> - %5 = memref.alloc() : memref<1800x2400xf64> - %6 = memref.alloc() : memref<1600x2400xf64> - %7 = memref.cast %0 : memref<1xf64> to memref - %8 = memref.cast %1 : memref<1xf64> to memref - %9 = memref.cast %3 : memref<1600x2200xf64> to memref - %10 = memref.cast %4 : memref<2200x1800xf64> to memref - %11 = memref.cast %5 : memref<1800x2400xf64> to memref - %12 = memref.cast %6 : memref<1600x2400xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %7, %8, %9, %10, %11, %12) : (i32, i32, i32, i32, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %13 = affine.load %0[0] : memref<1xf64> - %14 = affine.load %1[0] : memref<1xf64> - %15 = memref.cast %2 : memref<1600x1800xf64> to memref - call @kernel_2mm(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %13, %14, %15, %9, %10, %11, %12) : (i32, i32, i32, i32, f64, f64, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %16 = cmpi sgt, %arg0, %c42_i32 : i32 - %17 = scf.if %16 -> (i1) { - %18 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %19 = llvm.load %18 : !llvm.ptr> - %20 = llvm.mlir.addressof @str0 : !llvm.ptr> - %21 = llvm.getelementptr %20[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %22 = llvm.call @strcmp(%19, %21) : (!llvm.ptr, !llvm.ptr) -> i32 - %23 = trunci %22 : i32 to i1 - %24 = xor %23, %true : i1 - scf.yield %24 : i1 - } else { - scf.yield %false : i1 - } - scf.if %17 { - call @print_array(%c1600_i32, %c2400_i32, %12) : (i32, i32, memref) -> () - } - memref.dealloc %2 : memref<1600x1800xf64> - memref.dealloc %3 : memref<1600x2200xf64> - memref.dealloc %4 : memref<2200x1800xf64> - memref.dealloc %5 : memref<1800x2400xf64> - memref.dealloc %6 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: memref, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref) { - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - affine.store %cst, %arg4[0] : memref - affine.store %cst_0, %arg5[0] : memref - %0:2 = scf.while (%arg10 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg2 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = muli %arg11, %arg12 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg0 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg6[%4, %7] : memref - %14 = addi %arg12, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg10 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg12 = %c0 to %5 step %c1 iter_args(%arg13 = %c0_i32) -> (i32) { - %8 = index_cast %arg13 : i32 to index - %9 = addi %arg13, %c1_i32 : i32 - %10 = muli %arg11, %9 : i32 - %11 = remi_signed %10, %arg1 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg1 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg7[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg11, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg10 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg3 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = addi %arg12, %c3_i32 : i32 - %9 = muli %arg11, %8 : i32 - %10 = addi %9, %c1_i32 : i32 - %11 = remi_signed %10, %arg3 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg3 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg8[%4, %7] : memref - %15 = addi %arg12, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg10 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg3 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c2_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg2 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg2 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg9[%4, %7] : memref - %14 = addi %arg11, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_2mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg0 : i32 to index - affine.for %arg11 = 0 to %3 { - affine.for %arg12 = 0 to %0 { - affine.store %cst, %arg6[%arg11, %arg12] : memref - affine.for %arg13 = 0 to %1 { - %4 = affine.load %arg7[%arg11, %arg13] : memref - %5 = mulf %arg4, %4 : f64 - %6 = affine.load %arg8[%arg13, %arg12] : memref - %7 = mulf %5, %6 : f64 - %8 = affine.load %arg6[%arg11, %arg12] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg6[%arg11, %arg12] : memref - } - } - } - affine.for %arg11 = 0 to %3 { - affine.for %arg12 = 0 to %2 { - %4 = affine.load %arg10[%arg11, %arg12] : memref - %5 = mulf %4, %arg5 : f64 - affine.store %5, %arg10[%arg11, %arg12] : memref - affine.for %arg13 = 0 to %0 { - %6 = affine.load %arg6[%arg11, %arg13] : memref - %7 = affine.load %arg9[%arg13, %arg12] : memref - %8 = mulf %6, %7 : f64 - %9 = affine.load %arg10[%arg11, %arg12] : memref - %10 = addf %9, %8 : f64 - affine.store %10, %arg10[%arg11, %arg12] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.nosplit.polymer.parallel.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.nosplit.polymer.parallel.mlir deleted file mode 100644 index 5851ddc4..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.nosplit.polymer.parallel.mlir +++ /dev/null @@ -1,346 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (1800, 2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -#set0 = affine_set<(d0) : (-d0 + 56 >= 0, -d0 + 74 >= 0)> -#set1 = affine_set<(d0) : (-d0 + 56 >= 0, d0 - 75 >= 0)> -#set2 = affine_set<(d0) : (-d0 + 74 >= 0, d0 - 57 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<1600x1800xf64> - %3 = memref.alloc() : memref<1600x2200xf64> - %4 = memref.alloc() : memref<2200x1800xf64> - %5 = memref.alloc() : memref<1800x2400xf64> - %6 = memref.alloc() : memref<1600x2400xf64> - %7 = memref.cast %6 : memref<1600x2400xf64> to memref - affine.store %cst, %0[0] : memref<1xf64> - affine.store %cst_0, %1[0] : memref<1xf64> - %8:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%19) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %19 = index_cast %arg4 : i32 to index - %20 = muli %arg3, %arg4 : i32 - %21 = addi %20, %c1_i32 : i32 - %22 = remi_signed %21, %c1600_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c1600_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %3[%16, %19] : memref<1600x2200xf64> - %26 = addi %arg4, %c1_i32 : i32 - scf.yield %26 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %9:2 = scf.while (%arg2 = %8#0) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %19 = index_cast %arg5 : i32 to index - %20 = addi %arg5, %c1_i32 : i32 - %21 = muli %arg3, %20 : i32 - %22 = remi_signed %21, %c1800_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c1800_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %4[%16, %19] : memref<2200x1800xf64> - scf.yield %20 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%19) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %19 = index_cast %arg4 : i32 to index - %20 = addi %arg4, %c3_i32 : i32 - %21 = muli %arg3, %20 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c2400_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2400_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%16, %19] : memref<1800x2400xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %11 = scf.while (%arg2 = %10#0) : (i32) -> i32 { - %16 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%16) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %16 = index_cast %arg2 : i32 to index - %17 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%19) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %19 = index_cast %arg3 : i32 to index - %20 = addi %arg3, %c2_i32 : i32 - %21 = muli %arg2, %20 : i32 - %22 = remi_signed %21, %c2200_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c2200_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %6[%16, %19] : memref<1600x2400xf64> - %26 = addi %arg3, %c1_i32 : i32 - scf.yield %26 : i32 - } - %18 = addi %arg2, %c1_i32 : i32 - scf.yield %18 : i32 - } - call @polybench_timer_start() : () -> () - %12 = affine.load %0[0] : memref<1xf64> - %13 = affine.load %1[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 132 { - affine.if #set0(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - affine.for %arg5 = 2400 to min #map3(%arg3) { - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - affine.for %arg5 = 1800 to min #map4(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - affine.if #set1(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - affine.if #set2(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map4(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = 0 to 69 { - affine.for %arg5 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg6 = #map0(%arg4) to min #map5(%arg4) { - affine.for %arg7 = #map0(%arg3) to min #map3(%arg3) { - %16 = affine.load %2[%arg5, %arg7] : memref<1600x1800xf64> - %17 = affine.load %3[%arg5, %arg6] : memref<1600x2200xf64> - %18 = mulf %12, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %4[%arg6, %arg7] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - %21 = addf %16, %20 : f64 - affine.store %21, %2[%arg5, %arg7] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg4 = 0 to 75 { - affine.for %arg5 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg6 = #map0(%arg3) to min #map3(%arg3) { - affine.for %arg7 = #map0(%arg4) to min #map4(%arg4) { - %16 = affine.load %6[%arg5, %arg7] : memref<1600x2400xf64> - %17 = affine.load %2[%arg5, %arg6] : memref<1600x1800xf64> - %18 = affine.load %5[%arg6, %arg7] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - %20 = addf %16, %19 : f64 - affine.store %20, %6[%arg5, %arg7] : memref<1600x2400xf64> - } - } - } - } - } - } {scop.parallelizable} - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %14 = cmpi sgt, %arg0, %c42_i32 : i32 - %15 = scf.if %14 -> (i1) { - %16 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %17 = llvm.load %16 : !llvm.ptr> - %18 = llvm.mlir.addressof @str0 : !llvm.ptr> - %19 = llvm.getelementptr %18[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %20 = llvm.call @strcmp(%17, %19) : (!llvm.ptr, !llvm.ptr) -> i32 - %21 = trunci %20 : i32 to i1 - %22 = xor %21, %true : i1 - scf.yield %22 : i1 - } else { - scf.yield %false : i1 - } - scf.if %15 { - call @print_array(%c1600_i32, %c2400_i32, %7) : (i32, i32, memref) -> () - } - memref.dealloc %2 : memref<1600x1800xf64> - memref.dealloc %3 : memref<1600x2200xf64> - memref.dealloc %4 : memref<2200x1800xf64> - memref.dealloc %5 : memref<1800x2400xf64> - memref.dealloc %6 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: f64, %arg6: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg6[symbol(%arg1), symbol(%arg4)] : memref - %2 = mulf %arg5, %1 {scop.splittable = 1 : index} : f64 - %3 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %4 = mulf %2, %3 {scop.splittable = 0 : index} : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.nosplit.polymer.seq.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.nosplit.polymer.seq.mlir deleted file mode 100644 index 7d738c83..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.nosplit.polymer.seq.mlir +++ /dev/null @@ -1,346 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (1800, 2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -#set0 = affine_set<(d0) : (-d0 + 56 >= 0, -d0 + 74 >= 0)> -#set1 = affine_set<(d0) : (-d0 + 56 >= 0, d0 - 75 >= 0)> -#set2 = affine_set<(d0) : (-d0 + 74 >= 0, d0 - 57 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<1600x1800xf64> - %3 = memref.alloc() : memref<1600x2200xf64> - %4 = memref.alloc() : memref<2200x1800xf64> - %5 = memref.alloc() : memref<1800x2400xf64> - %6 = memref.alloc() : memref<1600x2400xf64> - %7 = memref.cast %6 : memref<1600x2400xf64> to memref - affine.store %cst, %0[0] : memref<1xf64> - affine.store %cst_0, %1[0] : memref<1xf64> - %8:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%19) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %19 = index_cast %arg4 : i32 to index - %20 = muli %arg3, %arg4 : i32 - %21 = addi %20, %c1_i32 : i32 - %22 = remi_signed %21, %c1600_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c1600_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %3[%16, %19] : memref<1600x2200xf64> - %26 = addi %arg4, %c1_i32 : i32 - scf.yield %26 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %9:2 = scf.while (%arg2 = %8#0) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %19 = index_cast %arg5 : i32 to index - %20 = addi %arg5, %c1_i32 : i32 - %21 = muli %arg3, %20 : i32 - %22 = remi_signed %21, %c1800_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c1800_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %4[%16, %19] : memref<2200x1800xf64> - scf.yield %20 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %16 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%16) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %16 = index_cast %arg3 : i32 to index - %17 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%19) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %19 = index_cast %arg4 : i32 to index - %20 = addi %arg4, %c3_i32 : i32 - %21 = muli %arg3, %20 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c2400_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2400_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%16, %19] : memref<1800x2400xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %18 = addi %arg3, %c1_i32 : i32 - scf.yield %18 : i32 - } - %11 = scf.while (%arg2 = %10#0) : (i32) -> i32 { - %16 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%16) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %16 = index_cast %arg2 : i32 to index - %17 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %19 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%19) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %19 = index_cast %arg3 : i32 to index - %20 = addi %arg3, %c2_i32 : i32 - %21 = muli %arg2, %20 : i32 - %22 = remi_signed %21, %c2200_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c2200_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %6[%16, %19] : memref<1600x2400xf64> - %26 = addi %arg3, %c1_i32 : i32 - scf.yield %26 : i32 - } - %18 = addi %arg2, %c1_i32 : i32 - scf.yield %18 : i32 - } - call @polybench_timer_start() : () -> () - %12 = affine.load %0[0] : memref<1xf64> - %13 = affine.load %1[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 132 { - affine.if #set0(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - affine.for %arg5 = 2400 to min #map3(%arg3) { - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - affine.for %arg5 = 1800 to min #map4(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - affine.if #set1(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %2[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - affine.if #set2(%arg3) { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map4(%arg3) { - %16 = affine.load %6[%arg4, %arg5] : memref<1600x2400xf64> - %17 = mulf %16, %13 : f64 - affine.store %17, %6[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = 0 to 69 { - affine.for %arg5 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg6 = #map0(%arg4) to min #map5(%arg4) { - affine.for %arg7 = #map0(%arg3) to min #map3(%arg3) { - %16 = affine.load %2[%arg5, %arg7] : memref<1600x1800xf64> - %17 = affine.load %3[%arg5, %arg6] : memref<1600x2200xf64> - %18 = mulf %12, %17 : f64 - %19 = affine.load %4[%arg6, %arg7] : memref<2200x1800xf64> - %20 = mulf %18, %19 : f64 - %21 = addf %16, %20 : f64 - affine.store %21, %2[%arg5, %arg7] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg4 = 0 to 75 { - affine.for %arg5 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg6 = #map0(%arg3) to min #map3(%arg3) { - affine.for %arg7 = #map0(%arg4) to min #map4(%arg4) { - %16 = affine.load %6[%arg5, %arg7] : memref<1600x2400xf64> - %17 = affine.load %2[%arg5, %arg6] : memref<1600x1800xf64> - %18 = affine.load %5[%arg6, %arg7] : memref<1800x2400xf64> - %19 = mulf %17, %18 : f64 - %20 = addf %16, %19 : f64 - affine.store %20, %6[%arg5, %arg7] : memref<1600x2400xf64> - } - } - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %14 = cmpi sgt, %arg0, %c42_i32 : i32 - %15 = scf.if %14 -> (i1) { - %16 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %17 = llvm.load %16 : !llvm.ptr> - %18 = llvm.mlir.addressof @str0 : !llvm.ptr> - %19 = llvm.getelementptr %18[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %20 = llvm.call @strcmp(%17, %19) : (!llvm.ptr, !llvm.ptr) -> i32 - %21 = trunci %20 : i32 to i1 - %22 = xor %21, %true : i1 - scf.yield %22 : i1 - } else { - scf.yield %false : i1 - } - scf.if %15 { - call @print_array(%c1600_i32, %c2400_i32, %7) : (i32, i32, memref) -> () - } - memref.dealloc %2 : memref<1600x1800xf64> - memref.dealloc %3 : memref<1600x2200xf64> - memref.dealloc %4 : memref<2200x1800xf64> - memref.dealloc %5 : memref<1800x2400xf64> - memref.dealloc %6 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: f64, %arg6: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg6[symbol(%arg1), symbol(%arg4)] : memref - %2 = mulf %arg5, %1 : f64 - %3 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %4 = mulf %2, %3 : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.pluto.c b/example/polybench/split-and-merge/2mm/2mm.origin.pluto.c deleted file mode 100644 index 67adeb83..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.pluto.c +++ /dev/null @@ -1,265 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9; - register int lbv, ubv; -if (_PB_NI >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - if ((_PB_NJ >= 0) && (_PB_NL >= 0)) { - for (t3=0;t3<=floord(_PB_NJ+_PB_NL-1,32);t3++) { - if ((_PB_NJ >= _PB_NL+1) && (t3 <= floord(_PB_NL-1,32)) && (t3 >= ceild(_PB_NL-31,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=_PB_NL-1;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - for (t5=_PB_NL;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ >= _PB_NL+1) && (t3 <= floord(_PB_NL-32,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=32*t3+31;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ <= _PB_NL-1) && (t3 <= floord(_PB_NJ-1,32)) && (t3 >= ceild(_PB_NJ-31,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=_PB_NJ-1;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - for (t5=_PB_NJ;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - if ((_PB_NJ == _PB_NL) && (t3 <= floord(_PB_NJ-1,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ <= _PB_NL-1) && (t3 <= floord(_PB_NJ-32,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=32*t3+31;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((t3 <= floord(_PB_NJ-1,32)) && (t3 >= ceild(_PB_NL,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((t3 <= floord(_PB_NL-1,32)) && (t3 >= ceild(_PB_NJ,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - if (_PB_NL <= -1) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } - if (_PB_NJ <= -1) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - if (_PB_NJ >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - if (_PB_NK >= 1) { - for (t5=0;t5<=floord(_PB_NK-1,32);t5++) { - for (t6=32*t2;t6<=min(_PB_NI-1,32*t2+31);t6++) { - for (t8=32*t5;t8<=min(_PB_NK-1,32*t5+31);t8++) { - for (t9=32*t3;t9<=min(_PB_NJ-1,32*t3+31);t9++) { - tmp[t6][t9] += alpha * A[t6][t8] * B[t8][t9];; - } - } - } - } - } - if (_PB_NL >= 1) { - for (t5=0;t5<=floord(_PB_NL-1,32);t5++) { - for (t6=32*t2;t6<=min(_PB_NI-1,32*t2+31);t6++) { - for (t7=32*t3;t7<=min(_PB_NJ-1,32*t3+31);t7++) { - for (t9=32*t5;t9<=min(_PB_NL-1,32*t5+31);t9++) { - D[t6][t9] += tmp[t6][t7] * C[t7][t9];; - } - } - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.pluto.cloog b/example/polybench/split-and-merge/2mm/2mm.origin.pluto.cloog deleted file mode 100644 index 627576cb..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.pluto.cloog +++ /dev/null @@ -1,137 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 6 - -1 -_PB_NI _PB_NJ _PB_NK _PB_NL - -# Number of statements -4 - -# S1 (tmp[i][j] = SCALAR_VAL(0.0);) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 1 0 0 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S2 (tmp[i][j] += alpha * A[i][k] * B[k][j];) -15 12 -1 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 0 0 -1 0 32 0 0 -1 0 0 0 0 0 31 -1 0 0 -32 0 0 1 0 0 0 0 0 -1 0 0 32 0 0 -1 0 0 0 0 31 -0 0 0 - -# S3 (D[i][j] *= beta;) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S4 (D[i][j] += tmp[i][k] * C[k][j];) -15 12 -1 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 0 31 -1 0 -32 0 0 0 1 0 0 0 0 0 -1 0 32 0 0 0 -1 0 0 0 0 31 -1 0 0 -32 0 1 0 0 0 0 0 0 -1 0 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -4 - -# T(S1) -9 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# T(S2) -9 21 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 - -# T(S3) -9 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# T(S4) -9 21 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 - -# we will set the scattering dimension names -9 -t1 t2 t3 t4 t5 t6 t7 t8 t9 diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.pluto.log b/example/polybench/split-and-merge/2mm/2mm.origin.pluto.log deleted file mode 100644 index 1f2d0853..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.pluto.log +++ /dev/null @@ -1,1640 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 6 0 0 0 4 - -# Parameters are provided -1 - -_PB_NI _PB_NJ _PB_NK _PB_NL - - -# Number of statements -4 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -tmp[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -7 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 2.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -1 10 1 3 0 4 -# e/i| Arr| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == alpha - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 10 ## Arr == A - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == B - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -tmp[i][j] += alpha * A[i][k] * B[k][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 3.3 Access -READ -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -READ -1 9 1 2 0 4 -# e/i| Arr| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 14 ## Arr == beta - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -D[i][j] *= beta; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 4.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 15 ## Arr == C - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -D[i][j] += tmp[i][k] * C[k][j]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -15 -# Mapping array-identifiers/array-names -1 i -2 _PB_NI -3 j -4 _PB_NJ -5 tmp -6 SCALAR_VAL -7 k -8 _PB_NK -9 alpha -10 A -11 B -12 _PB_NL -13 D -14 beta -15 C - - - -# File name -(null) -# Starting line and column -88 0 -# Ending line and column -103 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 4 -Parameters: _PB_NI _PB_NJ _PB_NK _PB_NL -S1 "tmp[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S2 "tmp[i][j] += alpha * A[i][k] * B[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][j] -alpha[0] -A[i][k] -B[k][j] -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S3 "D[i][j] *= beta;" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -D[i][j] -beta[0] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S4 "D[i][j] += tmp[i][k] * C[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -D[i][j] -tmp[i][k] -C[k][j] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 2 from S2 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 3 from S1 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 4 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 5 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 6 from S4 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 7 from S3 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 8 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 9 from S4 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S3 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 11 from S4 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 12 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 13 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 4 -[pluto] Total number of loops: 10 -[pluto] Number of deps: 13 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 4 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 3 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[4 dims; 4 constraints] -c_l-1 >= 0 -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied - 6 dep(s) satisfied -h(S1) = 0, h(S2) = 1, h(S3) = 0, h(S4) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 1; num_constraints: 14 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 12 constraints - For dep 2; num_constraints: 14 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 3; num_constraints: 14 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 4; num_constraints: 7 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 5; num_constraints: 14 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 6; num_constraints: 7 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 7; num_constraints: 14 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 8; num_constraints: 7 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 9; num_constraints: 7 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 10; num_constraints: 14 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 11; num_constraints: 7 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 12; num_constraints: 14 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 13; num_constraints: 7 - After dep 2; num_constraints: 14 - After dep 4; num_constraints: 21 - After dep 6; num_constraints: 28 - After dep 8; num_constraints: 35 - After dep 9; num_constraints: 42 - After dep 11; num_constraints: 49 - After dep 13; num_constraints: 56 - After all dependences: num constraints: 20, num variables: 21 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_n >= 0 - -Set #1 -[21 dims; 1 constraints] -c_o >= 0 - -Set #1 -[21 dims; 1 constraints] -c_n+c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[21 dims; 1 constraints] -c_r >= 0 - -Set #1 -[21 dims; 1 constraints] -c_s >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] -c_r+c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_v >= 0 - -Set #1 -[21 dims; 1 constraints] -c_w >= 0 - -Set #1 -[21 dims; 1 constraints] -c_v+c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 3 disjuncts -Set #1 -[21 dims; 1 constraints] -c_z >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_| >= 0 - -Set #1 -[21 dims; 1 constraints] -c_z+c_{+c_|-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 4 constraints] - +c_n +c_o -1 >= 0 - +c_r +c_s -c_t -1 >= 0 - +c_v +c_w -1 >= 0 - +c_z +c_{ +c_| -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (21 variables, 49 constraints) -[pluto] pluto_constraints_lexmin_isl (19 variables, 49 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = i, h(S2) = i, h(S3) = i, h(S4) = i -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_o >= 0 - -Set #1 -[21 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_s >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] -c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_w >= 0 - -Set #1 -[21 dims; 1 constraints] -c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_| >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{+c_|-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 4 constraints] - +c_o -1 >= 0 - +c_s -c_t -1 >= 0 - +c_w -1 >= 0 - +c_{ +c_| -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (21 variables, 49 constraints) -[pluto] pluto_constraints_lexmin_isl (19 variables, 49 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 2 constraints] - -c_t -1 >= 0 - +c_{ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (21 variables, 45 constraints) -[pluto] pluto_constraints_lexmin_isl (19 variables, 45 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 2 hyperplane(s) found -T(S1): (0, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, i, j) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, i, k) -loop types (scalar, loop, loop) - -[pluto] pluto_diamond_tile - After dep 2; num_constraints: 14 - After dep 4; num_constraints: 21 - After dep 6; num_constraints: 28 - After dep 8; num_constraints: 35 - After dep 9; num_constraints: 42 - After dep 11; num_constraints: 49 - After dep 13; num_constraints: 56 - After all dependences: num constraints: 20, num variables: 21 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 1 - After dep 2; num_constraints: 14 - After dep 4; num_constraints: 21 - After dep 8; num_constraints: 28 - After dep 13; num_constraints: 35 - After all dependences: num constraints: 17, num variables: 21 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 2 constraints] - -c_t -1 >= 0 - +c_{ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (21 variables, 42 constraints) -[pluto] pluto_constraints_lexmin_isl (19 variables, 42 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (0, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, i, j) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, i, k) -loop types (scalar, loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 1 and id 2 -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 2 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 0, h(S4) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 2 - After dep 4; num_constraints: 7 - After dep 8; num_constraints: 14 - After dep 13; num_constraints: 21 - After all dependences: num constraints: 7, num variables: 21 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_t >= 0 - -Set #1 -[21 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 2 constraints] - +c_t -1 >= 0 - +c_{ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (21 variables, 32 constraints) -[pluto] pluto_constraints_lexmin_isl (19 variables, 32 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = k, h(S3) = 0, h(S4) = j -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (0, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S4): (1, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 2 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisft5 {loop with stmts: S1, S3, } -t4 {loop with stmts: S1, S3, } -t9 {loop with stmts: S2, } -t7 {loop with stmts: S2, } -t6 {loop with stmts: S2, } -t7 {loop with stmts: S2, } -t9 {loop with stmts: S4, } -t7 {loop with stmts: S4, } -t6 {loop with stmts: S4, } -action_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (0, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S4): (1, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S1, S3, } -(t2, t3, t4, t5, ) with stmts {S2, S4, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S1, S3, } -(t2, t3, t4, t5, ) with stmts {S2, S4, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 2 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied - 3 dep(s) satisfied -[Pluto] After tiling: -T(S1): (0, i/32, j/32, i, j, 1, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, i/32, j/32, 0, k/32, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -T(S3): (0, i/32, j/32, i, j, 0, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, i/32, k/32, 1, j/32, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 36 -[pluto-intra-tile-opt] Score for loop 1: -88 -Stmts in bands 0 and 1 are distributed in tile space -Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: -2 -[pluto-intra-tile-opt] Score for loop 1: 22 -[pluto-intra-tile-opt] Score for loop 2: -40 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: 18 -[pluto-intra-tile-opt] Score for loop 1: -6 -[pluto-intra-tile-opt] Score for loop 2: -44 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 2 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (0, i/32, j/32, i, j, 1, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, i/32, j/32, 0, k/32, i, 0, k, j) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -T(S3): (0, i/32, j/32, i, j, 0, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, i/32, k/32, 1, j/32, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(4,9), S2(6,9), S3(4,9), S4(6,9), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to 2mm.origin.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.003338s -[pluto] Auto-transformation time: 0.021379s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.002414s -[pluto] Code generation time: 0.147546s -[pluto] Other/Misc time: 0.180795s -[pluto] Total time: 0.353058s -[pluto] All times: 0.003338 0.021379 0.147546 0.180795 diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.polymer.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.polymer.mlir deleted file mode 100644 index ef9ed9a6..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.polymer.mlir +++ /dev/null @@ -1,371 +0,0 @@ -#map0 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#set = affine_set<()[s0, s1, s2, s3] : (s0 - 1 >= 0, s1 - 1 >= 0, s2 - 1 >= 0, s3 - 1 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.cast %0 : memref<2200xf64> to memref - %2 = memref.alloca() : memref<2200xf64> - %3 = memref.cast %2 : memref<2200xf64> to memref - %4 = memref.alloca() : memref<1xf64> - %5 = memref.alloca() : memref<1xf64> - %6 = memref.alloc() : memref<1600x1800xf64> - %7 = memref.alloc() : memref<1600x2200xf64> - %8 = memref.alloc() : memref<2200x1800xf64> - %9 = memref.alloc() : memref<1800x2400xf64> - %10 = memref.alloc() : memref<1600x2400xf64> - %11 = memref.cast %4 : memref<1xf64> to memref - %12 = memref.cast %5 : memref<1xf64> to memref - %13 = memref.cast %7 : memref<1600x2200xf64> to memref - %14 = memref.cast %8 : memref<2200x1800xf64> to memref - %15 = memref.cast %9 : memref<1800x2400xf64> to memref - %16 = memref.cast %10 : memref<1600x2400xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %11, %12, %13, %14, %15, %16) : (i32, i32, i32, i32, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %17 = affine.load %4[0] : memref<1xf64> - %18 = affine.load %5[0] : memref<1xf64> - %19 = memref.cast %6 : memref<1600x1800xf64> to memref - call @kernel_2mm_opt(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %17, %18, %19, %13, %14, %15, %16, %1, %3) : (i32, i32, i32, i32, f64, f64, memref, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %20 = cmpi sgt, %arg0, %c42_i32 : i32 - %21 = scf.if %20 -> (i1) { - %22 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %23 = llvm.load %22 : !llvm.ptr> - %24 = llvm.mlir.addressof @str0 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @strcmp(%23, %25) : (!llvm.ptr, !llvm.ptr) -> i32 - %27 = trunci %26 : i32 to i1 - %28 = xor %27, %true : i1 - scf.yield %28 : i1 - } else { - scf.yield %false : i1 - } - scf.if %21 { - call @print_array(%c1600_i32, %c2400_i32, %16) : (i32, i32, memref) -> () - } - memref.dealloc %6 : memref<1600x1800xf64> - memref.dealloc %7 : memref<1600x2200xf64> - memref.dealloc %8 : memref<2200x1800xf64> - memref.dealloc %9 : memref<1800x2400xf64> - memref.dealloc %10 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: memref, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref) { - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - affine.store %cst, %arg4[0] : memref - affine.store %cst_0, %arg5[0] : memref - %0:2 = scf.while (%arg10 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg2 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = muli %arg11, %arg12 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg0 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg6[%4, %7] : memref - %14 = addi %arg12, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg10 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg12 = %c0 to %5 step %c1 iter_args(%arg13 = %c0_i32) -> (i32) { - %8 = index_cast %arg13 : i32 to index - %9 = addi %arg13, %c1_i32 : i32 - %10 = muli %arg11, %9 : i32 - %11 = remi_signed %10, %arg1 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg1 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg7[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg11, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg10 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg3 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = addi %arg12, %c3_i32 : i32 - %9 = muli %arg11, %8 : i32 - %10 = addi %9, %c1_i32 : i32 - %11 = remi_signed %10, %arg3 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg3 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg8[%4, %7] : memref - %15 = addi %arg12, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg10 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg3 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c2_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg2 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg2 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg9[%4, %7] : memref - %14 = addi %arg11, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_2mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref) { - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg0 : i32 to index - affine.for %arg13 = 0 to %3 { - affine.for %arg14 = 0 to %0 { - call @S0(%arg6, %arg13, %arg14) : (memref, index, index) -> () - affine.for %arg15 = 0 to %1 { - call @S1(%arg12, %arg15, %arg8, %arg14, %arg4, %arg7, %arg13) : (memref, index, memref, index, f64, memref, index) -> () - call @S2(%arg6, %arg13, %arg14, %arg12, %arg15) : (memref, index, index, memref, index) -> () - } - } - } - affine.for %arg13 = 0 to %3 { - affine.for %arg14 = 0 to %2 { - call @S3(%arg10, %arg13, %arg14, %arg5) : (memref, index, index, f64) -> () - affine.for %arg15 = 0 to %0 { - call @S4(%arg12, %arg15, %arg9, %arg14, %arg6, %arg13) : (memref, index, memref, index, memref, index) -> () - call @S5(%arg10, %arg13, %arg14, %arg12, %arg15) : (memref, index, index, memref, index) -> () - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @kernel_2mm_opt(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref) { - %0 = index_cast %arg0 : i32 to index - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %arg2 : i32 to index - %3 = index_cast %arg3 : i32 to index - affine.if #set()[%0, %1, %2, %3] { - affine.for %arg13 = 0 to #map0()[%0] { - affine.for %arg14 = 0 to #map0()[%3] { - affine.for %arg15 = #map1(%arg13) to min #map2(%arg13)[%0] { - affine.for %arg16 = #map1(%arg14) to min #map2(%arg14)[%3] { - call @S3(%arg10, %arg15, %arg16, %arg5) : (memref, index, index, f64) -> () - } - } - } - } - affine.for %arg13 = 0 to #map0()[%0] { - affine.for %arg14 = 0 to #map0()[%1] { - affine.for %arg15 = #map1(%arg13) to min #map2(%arg13)[%0] { - affine.for %arg16 = #map1(%arg14) to min #map2(%arg14)[%1] { - call @S0(%arg6, %arg15, %arg16) : (memref, index, index) -> () - } - } - } - } - affine.for %arg13 = 0 to #map0()[%2] { - affine.for %arg14 = 0 to #map0()[%0] { - affine.for %arg15 = #map1(%arg13) to min #map2(%arg13)[%2] { - affine.for %arg16 = #map1(%arg14) to min #map2(%arg14)[%0] { - affine.for %arg17 = 0 to %1 { - call @S1(%arg12, %arg15, %arg8, %arg17, %arg4, %arg7, %arg16) : (memref, index, memref, index, f64, memref, index) -> () - call @S2(%arg6, %arg16, %arg17, %arg12, %arg15) : (memref, index, index, memref, index) -> () - } - } - } - } - } - affine.for %arg13 = 0 to #map0()[%1] { - affine.for %arg14 = 0 to #map0()[%0] { - affine.for %arg15 = #map1(%arg13) to min #map2(%arg13)[%1] { - affine.for %arg16 = #map1(%arg14) to min #map2(%arg14)[%0] { - affine.for %arg17 = 0 to %3 { - call @S4(%arg12, %arg15, %arg9, %arg17, %arg6, %arg16) : (memref, index, memref, index, memref, index) -> () - call @S5(%arg10, %arg16, %arg17, %arg12, %arg15) : (memref, index, index, memref, index) -> () - } - } - } - } - } - } - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.polymer.parallel.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.polymer.parallel.mlir deleted file mode 100644 index f97774d0..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.polymer.parallel.mlir +++ /dev/null @@ -1,344 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (0, (d0 * 32 - 2199) ceildiv 32)> -#map5 = affine_map<(d0) -> (50, d0 + 1)> -#map6 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> -#map7 = affine_map<(d0, d1) -> (2200, d0 * 32 - d1 * 32 + 32)> -#map8 = affine_map<(d0) -> (0, (d0 * 32 - 1799) ceildiv 32)> -#map9 = affine_map<(d0, d1) -> (1800, d0 * 32 - d1 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 119 { - affine.for %arg3 = max #map4(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map7(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - } - affine.for %arg2 = 0 to 107 { - affine.for %arg3 = max #map8(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map9(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } {scop.parallelizable} - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.polymer.seq.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.polymer.seq.mlir deleted file mode 100644 index ef9ed9a6..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.polymer.seq.mlir +++ /dev/null @@ -1,371 +0,0 @@ -#map0 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#set = affine_set<()[s0, s1, s2, s3] : (s0 - 1 >= 0, s1 - 1 >= 0, s2 - 1 >= 0, s3 - 1 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.cast %0 : memref<2200xf64> to memref - %2 = memref.alloca() : memref<2200xf64> - %3 = memref.cast %2 : memref<2200xf64> to memref - %4 = memref.alloca() : memref<1xf64> - %5 = memref.alloca() : memref<1xf64> - %6 = memref.alloc() : memref<1600x1800xf64> - %7 = memref.alloc() : memref<1600x2200xf64> - %8 = memref.alloc() : memref<2200x1800xf64> - %9 = memref.alloc() : memref<1800x2400xf64> - %10 = memref.alloc() : memref<1600x2400xf64> - %11 = memref.cast %4 : memref<1xf64> to memref - %12 = memref.cast %5 : memref<1xf64> to memref - %13 = memref.cast %7 : memref<1600x2200xf64> to memref - %14 = memref.cast %8 : memref<2200x1800xf64> to memref - %15 = memref.cast %9 : memref<1800x2400xf64> to memref - %16 = memref.cast %10 : memref<1600x2400xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %11, %12, %13, %14, %15, %16) : (i32, i32, i32, i32, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %17 = affine.load %4[0] : memref<1xf64> - %18 = affine.load %5[0] : memref<1xf64> - %19 = memref.cast %6 : memref<1600x1800xf64> to memref - call @kernel_2mm_opt(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %17, %18, %19, %13, %14, %15, %16, %1, %3) : (i32, i32, i32, i32, f64, f64, memref, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %20 = cmpi sgt, %arg0, %c42_i32 : i32 - %21 = scf.if %20 -> (i1) { - %22 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %23 = llvm.load %22 : !llvm.ptr> - %24 = llvm.mlir.addressof @str0 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @strcmp(%23, %25) : (!llvm.ptr, !llvm.ptr) -> i32 - %27 = trunci %26 : i32 to i1 - %28 = xor %27, %true : i1 - scf.yield %28 : i1 - } else { - scf.yield %false : i1 - } - scf.if %21 { - call @print_array(%c1600_i32, %c2400_i32, %16) : (i32, i32, memref) -> () - } - memref.dealloc %6 : memref<1600x1800xf64> - memref.dealloc %7 : memref<1600x2200xf64> - memref.dealloc %8 : memref<2200x1800xf64> - memref.dealloc %9 : memref<1800x2400xf64> - memref.dealloc %10 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: memref, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref) { - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - affine.store %cst, %arg4[0] : memref - affine.store %cst_0, %arg5[0] : memref - %0:2 = scf.while (%arg10 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg2 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = muli %arg11, %arg12 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg0 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg6[%4, %7] : memref - %14 = addi %arg12, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg10 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg12 = %c0 to %5 step %c1 iter_args(%arg13 = %c0_i32) -> (i32) { - %8 = index_cast %arg13 : i32 to index - %9 = addi %arg13, %c1_i32 : i32 - %10 = muli %arg11, %9 : i32 - %11 = remi_signed %10, %arg1 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg1 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg7[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg11, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg10 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg3 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = addi %arg12, %c3_i32 : i32 - %9 = muli %arg11, %8 : i32 - %10 = addi %9, %c1_i32 : i32 - %11 = remi_signed %10, %arg3 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg3 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg8[%4, %7] : memref - %15 = addi %arg12, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg10 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg3 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c2_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg2 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg2 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg9[%4, %7] : memref - %14 = addi %arg11, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_2mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref) { - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg0 : i32 to index - affine.for %arg13 = 0 to %3 { - affine.for %arg14 = 0 to %0 { - call @S0(%arg6, %arg13, %arg14) : (memref, index, index) -> () - affine.for %arg15 = 0 to %1 { - call @S1(%arg12, %arg15, %arg8, %arg14, %arg4, %arg7, %arg13) : (memref, index, memref, index, f64, memref, index) -> () - call @S2(%arg6, %arg13, %arg14, %arg12, %arg15) : (memref, index, index, memref, index) -> () - } - } - } - affine.for %arg13 = 0 to %3 { - affine.for %arg14 = 0 to %2 { - call @S3(%arg10, %arg13, %arg14, %arg5) : (memref, index, index, f64) -> () - affine.for %arg15 = 0 to %0 { - call @S4(%arg12, %arg15, %arg9, %arg14, %arg6, %arg13) : (memref, index, memref, index, memref, index) -> () - call @S5(%arg10, %arg13, %arg14, %arg12, %arg15) : (memref, index, index, memref, index) -> () - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @kernel_2mm_opt(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref) { - %0 = index_cast %arg0 : i32 to index - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %arg2 : i32 to index - %3 = index_cast %arg3 : i32 to index - affine.if #set()[%0, %1, %2, %3] { - affine.for %arg13 = 0 to #map0()[%0] { - affine.for %arg14 = 0 to #map0()[%3] { - affine.for %arg15 = #map1(%arg13) to min #map2(%arg13)[%0] { - affine.for %arg16 = #map1(%arg14) to min #map2(%arg14)[%3] { - call @S3(%arg10, %arg15, %arg16, %arg5) : (memref, index, index, f64) -> () - } - } - } - } - affine.for %arg13 = 0 to #map0()[%0] { - affine.for %arg14 = 0 to #map0()[%1] { - affine.for %arg15 = #map1(%arg13) to min #map2(%arg13)[%0] { - affine.for %arg16 = #map1(%arg14) to min #map2(%arg14)[%1] { - call @S0(%arg6, %arg15, %arg16) : (memref, index, index) -> () - } - } - } - } - affine.for %arg13 = 0 to #map0()[%2] { - affine.for %arg14 = 0 to #map0()[%0] { - affine.for %arg15 = #map1(%arg13) to min #map2(%arg13)[%2] { - affine.for %arg16 = #map1(%arg14) to min #map2(%arg14)[%0] { - affine.for %arg17 = 0 to %1 { - call @S1(%arg12, %arg15, %arg8, %arg17, %arg4, %arg7, %arg16) : (memref, index, memref, index, f64, memref, index) -> () - call @S2(%arg6, %arg16, %arg17, %arg12, %arg15) : (memref, index, index, memref, index) -> () - } - } - } - } - } - affine.for %arg13 = 0 to #map0()[%1] { - affine.for %arg14 = 0 to #map0()[%0] { - affine.for %arg15 = #map1(%arg13) to min #map2(%arg13)[%1] { - affine.for %arg16 = #map1(%arg14) to min #map2(%arg14)[%0] { - affine.for %arg17 = 0 to %3 { - call @S4(%arg12, %arg15, %arg9, %arg17, %arg6, %arg16) : (memref, index, memref, index, memref, index) -> () - call @S5(%arg10, %arg16, %arg17, %arg12, %arg15) : (memref, index, index, memref, index) -> () - } - } - } - } - } - } - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.split-0 2.polymer.parallel.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.split-0 2.polymer.parallel.mlir deleted file mode 100644 index f97774d0..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.split-0 2.polymer.parallel.mlir +++ /dev/null @@ -1,344 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (0, (d0 * 32 - 2199) ceildiv 32)> -#map5 = affine_map<(d0) -> (50, d0 + 1)> -#map6 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> -#map7 = affine_map<(d0, d1) -> (2200, d0 * 32 - d1 * 32 + 32)> -#map8 = affine_map<(d0) -> (0, (d0 * 32 - 1799) ceildiv 32)> -#map9 = affine_map<(d0, d1) -> (1800, d0 * 32 - d1 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 119 { - affine.for %arg3 = max #map4(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map7(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - } - affine.for %arg2 = 0 to 107 { - affine.for %arg3 = max #map8(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map9(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } {scop.parallelizable} - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.split-0 2.polymer.seq.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.split-0 2.polymer.seq.mlir deleted file mode 100644 index 0cfc06af..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.split-0 2.polymer.seq.mlir +++ /dev/null @@ -1,339 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg2 = 0 to 69 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.split-0-2.polymer.parallel.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.split-0-2.polymer.parallel.mlir deleted file mode 100644 index f97774d0..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.split-0-2.polymer.parallel.mlir +++ /dev/null @@ -1,344 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (0, (d0 * 32 - 2199) ceildiv 32)> -#map5 = affine_map<(d0) -> (50, d0 + 1)> -#map6 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> -#map7 = affine_map<(d0, d1) -> (2200, d0 * 32 - d1 * 32 + 32)> -#map8 = affine_map<(d0) -> (0, (d0 * 32 - 1799) ceildiv 32)> -#map9 = affine_map<(d0, d1) -> (1800, d0 * 32 - d1 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 119 { - affine.for %arg3 = max #map4(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map7(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - } - affine.for %arg2 = 0 to 107 { - affine.for %arg3 = max #map8(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map9(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } {scop.parallelizable} - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.split-0-2.polymer.seq.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.split-0-2.polymer.seq.mlir deleted file mode 100644 index 0cfc06af..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.split-0-2.polymer.seq.mlir +++ /dev/null @@ -1,339 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg2 = 0 to 69 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.origin.splittable.mlir b/example/polybench/split-and-merge/2mm/2mm.origin.splittable.mlir deleted file mode 100644 index 86614902..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.origin.splittable.mlir +++ /dev/null @@ -1,284 +0,0 @@ -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<1600x1800xf64> - %3 = memref.alloc() : memref<1600x2200xf64> - %4 = memref.alloc() : memref<2200x1800xf64> - %5 = memref.alloc() : memref<1800x2400xf64> - %6 = memref.alloc() : memref<1600x2400xf64> - %7 = memref.cast %0 : memref<1xf64> to memref - %8 = memref.cast %1 : memref<1xf64> to memref - %9 = memref.cast %3 : memref<1600x2200xf64> to memref - %10 = memref.cast %4 : memref<2200x1800xf64> to memref - %11 = memref.cast %5 : memref<1800x2400xf64> to memref - %12 = memref.cast %6 : memref<1600x2400xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %7, %8, %9, %10, %11, %12) : (i32, i32, i32, i32, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %13 = affine.load %0[0] : memref<1xf64> - %14 = affine.load %1[0] : memref<1xf64> - %15 = memref.cast %2 : memref<1600x1800xf64> to memref - call @kernel_2mm(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %13, %14, %15, %9, %10, %11, %12) : (i32, i32, i32, i32, f64, f64, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %16 = cmpi sgt, %arg0, %c42_i32 : i32 - %17 = scf.if %16 -> (i1) { - %18 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %19 = llvm.load %18 : !llvm.ptr> - %20 = llvm.mlir.addressof @str0 : !llvm.ptr> - %21 = llvm.getelementptr %20[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %22 = llvm.call @strcmp(%19, %21) : (!llvm.ptr, !llvm.ptr) -> i32 - %23 = trunci %22 : i32 to i1 - %24 = xor %23, %true : i1 - scf.yield %24 : i1 - } else { - scf.yield %false : i1 - } - scf.if %17 { - call @print_array(%c1600_i32, %c2400_i32, %12) : (i32, i32, memref) -> () - } - memref.dealloc %2 : memref<1600x1800xf64> - memref.dealloc %3 : memref<1600x2200xf64> - memref.dealloc %4 : memref<2200x1800xf64> - memref.dealloc %5 : memref<1800x2400xf64> - memref.dealloc %6 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: memref, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref) { - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - affine.store %cst, %arg4[0] : memref - affine.store %cst_0, %arg5[0] : memref - %0:2 = scf.while (%arg10 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg2 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = muli %arg11, %arg12 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg0 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg6[%4, %7] : memref - %14 = addi %arg12, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg10 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg12 = %c0 to %5 step %c1 iter_args(%arg13 = %c0_i32) -> (i32) { - %8 = index_cast %arg13 : i32 to index - %9 = addi %arg13, %c1_i32 : i32 - %10 = muli %arg11, %9 : i32 - %11 = remi_signed %10, %arg1 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg1 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg7[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg11, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg10 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg3 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = addi %arg12, %c3_i32 : i32 - %9 = muli %arg11, %8 : i32 - %10 = addi %9, %c1_i32 : i32 - %11 = remi_signed %10, %arg3 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg3 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg8[%4, %7] : memref - %15 = addi %arg12, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg10 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg3 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c2_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg2 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg2 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg9[%4, %7] : memref - %14 = addi %arg11, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_2mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg0 : i32 to index - affine.for %arg11 = 0 to %3 { - affine.for %arg12 = 0 to %0 { - affine.store %cst, %arg6[%arg11, %arg12] : memref - affine.for %arg13 = 0 to %1 { - %4 = affine.load %arg7[%arg11, %arg13] : memref - %5 = mulf %arg4, %4 {scop.splittable = 1 : index} : f64 - %6 = affine.load %arg8[%arg13, %arg12] : memref - %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 - %8 = affine.load %arg6[%arg11, %arg12] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg6[%arg11, %arg12] : memref - } - } - } - affine.for %arg11 = 0 to %3 { - affine.for %arg12 = 0 to %2 { - %4 = affine.load %arg10[%arg11, %arg12] : memref - %5 = mulf %4, %arg5 : f64 - affine.store %5, %arg10[%arg11, %arg12] : memref - affine.for %arg13 = 0 to %0 { - %6 = affine.load %arg6[%arg11, %arg13] : memref - %7 = affine.load %arg9[%arg13, %arg12] : memref - %8 = mulf %6, %7 {scop.splittable = 2 : index} : f64 - %9 = affine.load %arg10[%arg11, %arg12] : memref - %10 = addf %9, %8 : f64 - affine.store %10, %arg10[%arg11, %arg12] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.split-0-2.polymer.par.mlir b/example/polybench/split-and-merge/2mm/2mm.split-0-2.polymer.par.mlir deleted file mode 100644 index f97774d0..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split-0-2.polymer.par.mlir +++ /dev/null @@ -1,344 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (0, (d0 * 32 - 2199) ceildiv 32)> -#map5 = affine_map<(d0) -> (50, d0 + 1)> -#map6 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> -#map7 = affine_map<(d0, d1) -> (2200, d0 * 32 - d1 * 32 + 32)> -#map8 = affine_map<(d0) -> (0, (d0 * 32 - 1799) ceildiv 32)> -#map9 = affine_map<(d0, d1) -> (1800, d0 * 32 - d1 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 119 { - affine.for %arg3 = max #map4(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map7(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - } - affine.for %arg2 = 0 to 107 { - affine.for %arg3 = max #map8(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map9(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } {scop.parallelizable} - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.split-0-2.polymer.seq.mlir b/example/polybench/split-and-merge/2mm/2mm.split-0-2.polymer.seq.mlir deleted file mode 100644 index 0cfc06af..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split-0-2.polymer.seq.mlir +++ /dev/null @@ -1,339 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c1800 = constant 1800 : index - %cst_1 = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2200xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloca() : memref<1xf64> - %3 = memref.alloc() : memref<1600x1800xf64> - %4 = memref.alloc() : memref<1600x2200xf64> - %5 = memref.alloc() : memref<2200x1800xf64> - %6 = memref.alloc() : memref<1800x2400xf64> - %7 = memref.alloc() : memref<1600x2400xf64> - %8 = memref.cast %7 : memref<1600x2400xf64> to memref - affine.store %cst, %1[0] : memref<1xf64> - affine.store %cst_0, %2[0] : memref<1xf64> - %9:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2200_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = muli %arg3, %arg4 : i32 - %22 = addi %21, %c1_i32 : i32 - %23 = remi_signed %22, %c1600_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1600_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %4[%17, %20] : memref<1600x2200xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c2200_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %20 = index_cast %arg5 : i32 to index - %21 = addi %arg5, %c1_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = remi_signed %22, %c1800_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c1800_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %5[%17, %20] : memref<2200x1800xf64> - scf.yield %21 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %11:2 = scf.while (%arg2 = %10#0) : (i32) -> (i32, i32) { - %17 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%17) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%20) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %20 = index_cast %arg4 : i32 to index - %21 = addi %arg4, %c3_i32 : i32 - %22 = muli %arg3, %21 : i32 - %23 = addi %22, %c1_i32 : i32 - %24 = remi_signed %23, %c2400_i32 : i32 - %25 = sitofp %24 : i32 to f64 - %26 = sitofp %c2400_i32 : i32 to f64 - %27 = divf %25, %26 : f64 - memref.store %27, %6[%17, %20] : memref<1800x2400xf64> - %28 = addi %arg4, %c1_i32 : i32 - scf.yield %28 : i32 - } - %19 = addi %arg3, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = scf.while (%arg2 = %11#0) : (i32) -> i32 { - %17 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%17) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %17 = index_cast %arg2 : i32 to index - %18 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %20 = cmpi slt, %arg3, %c2400_i32 : i32 - scf.condition(%20) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %20 = index_cast %arg3 : i32 to index - %21 = addi %arg3, %c2_i32 : i32 - %22 = muli %arg2, %21 : i32 - %23 = remi_signed %22, %c2200_i32 : i32 - %24 = sitofp %23 : i32 to f64 - %25 = sitofp %c2200_i32 : i32 to f64 - %26 = divf %24, %25 : f64 - memref.store %26, %7[%17, %20] : memref<1600x2400xf64> - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %19 = addi %arg2, %c1_i32 : i32 - scf.yield %19 : i32 - } - call @polybench_timer_start() : () -> () - %13 = affine.load %1[0] : memref<1xf64> - %14 = affine.load %2[0] : memref<1xf64> - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - %17 = affine.load %7[%arg4, %arg5] : memref<1600x2400xf64> - %18 = mulf %17, %14 : f64 - affine.store %18, %7[%arg4, %arg5] : memref<1600x2400xf64> - } - } - } - } - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst_1, %3[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg2 = 0 to 69 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %17 = affine.load %4[%arg5, %arg4] : memref<1600x2200xf64> - %18 = mulf %13, %17 {scop.splittable = 1 : index} : f64 - %19 = affine.load %5[%arg4, %arg6] : memref<2200x1800xf64> - %20 = mulf %18, %19 {scop.splittable = 0 : index} : f64 - affine.store %20, %0[%arg4] : memref<2200xf64> - %21 = affine.load %3[%arg5, %arg6] : memref<1600x1800xf64> - %22 = affine.load %0[%arg4] : memref<2200xf64> - %23 = addf %21, %22 : f64 - affine.store %23, %3[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2400 { - %17 = affine.load %3[%arg5, %arg4] : memref<1600x1800xf64> - %18 = affine.load %6[%arg4, %arg6] : memref<1800x2400xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - affine.store %19, %0[%arg4] : memref<2200xf64> - %20 = affine.load %7[%arg5, %arg6] : memref<1600x2400xf64> - %21 = affine.load %0[%arg4] : memref<2200xf64> - %22 = addf %20, %21 : f64 - affine.store %22, %7[%arg5, %arg6] : memref<1600x2400xf64> - } - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %15 = cmpi sgt, %arg0, %c42_i32 : i32 - %16 = scf.if %15 -> (i1) { - %17 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %18 = llvm.load %17 : !llvm.ptr> - %19 = llvm.mlir.addressof @str0 : !llvm.ptr> - %20 = llvm.getelementptr %19[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %21 = llvm.call @strcmp(%18, %20) : (!llvm.ptr, !llvm.ptr) -> i32 - %22 = trunci %21 : i32 to i1 - %23 = xor %22, %true : i1 - scf.yield %23 : i1 - } else { - scf.yield %false : i1 - } - scf.if %16 { - call @print_array(%c1600_i32, %c2400_i32, %8) : (i32, i32, memref) -> () - } - memref.dealloc %3 : memref<1600x1800xf64> - memref.dealloc %4 : memref<1600x2200xf64> - memref.dealloc %5 : memref<2200x1800xf64> - memref.dealloc %6 : memref<1800x2400xf64> - memref.dealloc %7 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: f64, %arg5: memref, %arg6: index) attributes {scop.stmt} { - %0 = affine.load %arg5[symbol(%arg6), symbol(%arg1)] : memref - %1 = mulf %arg4, %0 {scop.splittable = 1 : index} : f64 - %2 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - affine.store %3, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = mulf %0, %arg3 : f64 - affine.store %1, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/2mm/2mm.split.pluto.log b/example/polybench/split-and-merge/2mm/2mm.split.pluto.log deleted file mode 100644 index 2d7183ac..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split.pluto.log +++ /dev/null @@ -1 +0,0 @@ -pluto: error opening source file: '2mm.split.c' diff --git a/example/polybench/split-and-merge/2mm/2mm.split1-noinit.c b/example/polybench/split-and-merge/2mm/2mm.split1-noinit.c deleted file mode 100644 index 1ea7fc09..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split1-noinit.c +++ /dev/null @@ -1,165 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NK,nk)) -{ - int i, j, k; - -#pragma scop - /* D := alpha*A*B*C + beta*D */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NJ; j++) - { - // tmp[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NK; ++k) { - S[k] = alpha * A[i][k] * B[k][j]; - tmp[i][j] += S[k]; - } - } - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NL; j++) - { - D[i][j] *= beta; - for (k = 0; k < _PB_NJ; ++k) - D[i][j] += tmp[i][k] * C[k][j]; - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,NK,nk); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.c b/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.c deleted file mode 100644 index 8fe54f86..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.c +++ /dev/null @@ -1,192 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NK,nk)) -{ - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8; - register int lbv, ubv; -if (_PB_NI >= 1) { - if (_PB_NL >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - if (_PB_NJ >= 1) { - for (t2=0;t2<=_PB_NI-1;t2++) { - for (t3=0;t3<=_PB_NJ-1;t3++) { - if (_PB_NK >= 1) { - for (t6=0;t6<=floord(_PB_NK-1,32);t6++) { - for (t7=32*t6;t7<=min(_PB_NK-1,32*t6+31);t7++) { - S[t7] = alpha * A[t2][t7] * B[t7][t3];; - } - } - } - if (_PB_NK >= 1) { - for (t6=0;t6<=_PB_NK-1;t6++) { - tmp[t2][t3] += S[t6];; - } - } - if (_PB_NL >= 1) { - for (t6=0;t6<=floord(_PB_NL-1,32);t6++) { - for (t7=32*t6;t7<=min(_PB_NL-1,32*t6+31);t7++) { - D[t2][t7] += tmp[t2][t3] * C[t3][t7];; - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,NK,nk); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.cloog b/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.cloog deleted file mode 100644 index c29078c7..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.cloog +++ /dev/null @@ -1,123 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 6 - -1 -_PB_NI _PB_NJ _PB_NK _PB_NL - -# Number of statements -4 - -# S1 (S[k] = alpha * A[i][k] * B[k][j];) -11 10 -1 0 1 0 0 0 0 0 0 0 -1 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 1 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 1 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 31 -0 0 0 - -# S2 (tmp[i][j] += S[k];) -9 9 -1 1 0 0 0 0 0 0 0 -1 -1 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 -1 -1 0 1 0 0 0 0 0 0 -1 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 -1 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -0 0 0 - -# S3 (D[i][j] *= beta;) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S4 (D[i][j] += tmp[i][k] * C[k][j];) -11 10 -1 0 1 0 0 0 0 0 0 0 -1 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 1 0 0 -1 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -4 - -# T(S1) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# T(S2) -8 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - -# T(S3) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# T(S4) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -8 -t1 t2 t3 t4 t5 t6 t7 t8 diff --git a/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.log b/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.log deleted file mode 100644 index b26a895b..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split1-noinit.pluto.log +++ /dev/null @@ -1,2039 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 6 0 0 0 4 - -# Parameters are provided -1 - -_PB_NI _PB_NJ _PB_NK _PB_NL - - -# Number of statements -4 - -# =============================================== Statement 1 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c5 == 0 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 7 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -READ -1 10 1 3 0 4 -# e/i| Arr| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == alpha - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 9 ## Arr == A - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 10 ## Arr == B - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -S[k] = alpha * A[i][k] * B[k][j]; - - -# =============================================== Statement 2 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c5 == 0 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 2.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 7 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -tmp[i][j] += S[k]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 3.3 Access -READ -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -READ -1 9 1 2 0 4 -# e/i| Arr| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 14 ## Arr == beta - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -D[i][j] *= beta; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 4.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 15 ## Arr == C - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -D[i][j] += tmp[i][k] * C[k][j]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -15 -# Mapping array-identifiers/array-names -1 i -2 _PB_NI -3 j -4 _PB_NJ -5 k -6 _PB_NK -7 S -8 alpha -9 A -10 B -11 tmp -12 _PB_NL -13 D -14 beta -15 C - - - -# File name -(null) -# Starting line and column -89 0 -# Ending line and column -106 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 4 -Parameters: _PB_NI _PB_NJ _PB_NK _PB_NL -S1 "S[k] = alpha * A[i][k] * B[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, i, 0, j, 0, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -alpha[0] -A[i][k] -B[k][j] -Write accesses -S[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S2 "tmp[i][j] += S[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, i, 0, j, 0, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][j] -S[k] -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S3 "D[i][j] *= beta;" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -D[i][j] -beta[0] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S4 "D[i][j] += tmp[i][k] * C[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -D[i][j] -tmp[i][k] -C[k][j] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 2 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 3 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 4 from S4 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 5 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 6 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 7 from S2 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 8 from S3 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 9 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S4 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 11 from S2 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 12 from S2 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 13 from S3 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 14 from S4 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 15 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 16 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 17 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - -T(S1): (0, i, 0, j, 0, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S2): (0, i, 0, j, 0, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 4 -[pluto] Total number of loops: 11 -[pluto] Number of deps: 17 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 4 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 1 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 2: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[4 dims; 4 constraints] -c_l-1 >= 0 -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied - 3 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 0, h(S4) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 1; num_constraints: 18 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 2; num_constraints: 14 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 3; num_constraints: 12 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 4; num_constraints: 7 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 5; num_constraints: 14 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 6; num_constraints: 7 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 12 constraints - For dep 7; num_constraints: 14 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 8; num_constraints: 14 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 9; num_constraints: 7 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 10; num_constraints: 7 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 11; num_constraints: 18 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 12; num_constraints: 14 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 13; num_constraints: 14 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 14; num_constraints: 7 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 9 constraints - For dep 15; num_constraints: 11 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 16; num_constraints: 7 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 17; num_constraints: 7 - After dep 1; num_constraints: 18 - After dep 2; num_constraints: 32 - After dep 3; num_constraints: 44 - After dep 4; num_constraints: 51 - After dep 6; num_constraints: 58 - After dep 7; num_constraints: 72 - After dep 9; num_constraints: 79 - After dep 10; num_constraints: 86 - After dep 11; num_constraints: 104 - After dep 12; num_constraints: 118 - After dep 14; num_constraints: 125 - After dep 15; num_constraints: 136 - After dep 16; num_constraints: 143 - After dep 17; num_constraints: 150 - After all dependences: num constraints: 56, num variables: 21 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 3 disjuncts -Set #1 -[21 dims; 1 constraints] -c_n >= 0 - -Set #1 -[21 dims; 1 constraints] --c_o >= 0 - -Set #1 -[21 dims; 1 constraints] --c_p >= 0 - -Set #1 -[21 dims; 1 constraints] -c_n-c_o-c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[21 dims; 1 constraints] -c_r >= 0 - -Set #1 -[21 dims; 1 constraints] --c_s >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] -c_r-c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_v >= 0 - -Set #1 -[21 dims; 1 constraints] -c_w >= 0 - -Set #1 -[21 dims; 1 constraints] -c_v+c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 3 disjuncts -Set #1 -[21 dims; 1 constraints] -c_z >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_| >= 0 - -Set #1 -[21 dims; 1 constraints] -c_z+c_{+c_|-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 4 constraints] - +c_n -c_o -c_p -1 >= 0 - +c_r -c_s -c_t -1 >= 0 - +c_v +c_w -1 >= 0 - +c_z +c_{ +c_| -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (21 variables, 85 constraints) -[pluto] pluto_constraints_lexmin_isl (20 variables, 85 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = i, h(S2) = i, h(S3) = i, h(S4) = i -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[21 dims; 1 constraints] --c_o >= 0 - -Set #1 -[21 dims; 1 constraints] --c_p >= 0 - -Set #1 -[21 dims; 1 constraints] --c_o-c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[21 dims; 1 constraints] --c_s >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] --c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_w >= 0 - -Set #1 -[21 dims; 1 constraints] -c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_| >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{+c_|-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 4 constraints] - -c_o -c_p -1 >= 0 - -c_s -c_t -1 >= 0 - +c_w -1 >= 0 - +c_{ +c_| -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (21 variables, 85 constraints) -[pluto] pluto_constraints_lexmin_isl (20 variables, 85 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (1, i) -loop types (scalar, loop) - -T(S2): (1, i) -loop types (scalar, loop) - -T(S3): (0, i) -loop types (scalar, loop) - -T(S4): (1, i) -loop types (scalar, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 1 - After dep 2; num_constraints: 14 - After dep 3; num_constraints: 26 - After dep 4; num_constraints: 33 - After dep 6; num_constraints: 40 - After dep 7; num_constraints: 54 - After dep 9; num_constraints: 61 - After dep 10; num_constraints: 68 - After dep 12; num_constraints: 82 - After dep 14; num_constraints: 89 - After dep 16; num_constraints: 96 - After dep 17; num_constraints: 103 - After all dependences: num constraints: 43, num variables: 21 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_o >= 0 - -Set #1 -[21 dims; 1 constraints] --c_p >= 0 - -Set #1 -[21 dims; 1 constraints] -c_o-c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_s >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] -c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_w >= 0 - -Set #1 -[21 dims; 1 constraints] -c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_| >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{+c_|-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 4 constraints] - +c_o -c_p -1 >= 0 - +c_s -c_t -1 >= 0 - +c_w -1 >= 0 - +c_{ +c_| -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (21 variables, 72 constraints) -[pluto] pluto_constraints_lexmin_isl (20 variables, 72 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = k -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[21 dims; 1 constraints] --c_p >= 0 - -Set #1 -[21 dims; 1 constraints] --c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 3 constraints] - -c_p -1 >= 0 - -c_t -1 >= 0 - +c_{ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (21 variables, 70 constraints) -[pluto] pluto_constraints_lexmin_isl (20 variables, 70 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 1 hyperplane(s) found -T(S1): (1, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, i, j) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, i, k) -loop types (scalar, loop, loop) - -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 2 - After dep 3; num_constraints: 12 - After dep 6; num_constraints: 19 - After dep 7; num_constraints: 33 - After dep 9; num_constraints: 40 - After dep 17; num_constraints: 47 - After all dependences: num constraints: 25, num variables: 21 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[21 dims; 1 constraints] --c_p >= 0 - -Set #1 -[21 dims; 1 constraints] --c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 3 constraints] - -c_p -1 >= 0 - -c_t -1 >= 0 - +c_{ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (21 variables, 52 constraints) -[pluto] pluto_constraints_lexmin_isl (20 variables, 52 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 0 hyperplane(s) found -T(S1): (1, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, i, j) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, i, k) -loop types (scalar, loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 3 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 1 and id 2 -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 3 satisfied - 1 dep(s) satisfied -h(S1) = 0, h(S2) = 1, h(S3) = 0, h(S4) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 3 - After dep 6; num_constraints: 7 - After dep 7; num_constraints: 21 - After dep 9; num_constraints: 28 - After dep 17; num_constraints: 35 - After all dependences: num constraints: 17, num variables: 21 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_p >= 0 - -Set #1 -[21 dims; 1 constraints] -c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[21 dims; 1 constraints] --c_t >= 0 - -Set #1 -[21 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 3 constraints] - +c_p -1 >= 0 - -c_t -1 >= 0 - +c_{ -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (21 variables, 44 constraints) -[pluto] pluto_constraints_lexmin_isl (20 variables, 44 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (1, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S2): (1, i, j, 1) -loop types (scalar, loop, loop, scalar) - -T(S3): (0, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S4): (1, i, k, 1) -loop types (scalar, loop, loop, scalar) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 1 and id 2 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 7 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 0, h(S4) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 4 - After dep 6; num_constraints: 7 - After dep 9; num_constraints: 14 - After dep 17; num_constraints: 21 - After all dependences: num constraints: 7, num variables: 21 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_p >= 0 - -Set #1 -[21 dims; 1 constraints] -c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_t >= 0 - -Set #1 -[21 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[21 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[21 dims; 1 constraints] -c_{-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S4 -linear independence constraints -[21 dims; 3 constraints] - +c_p -1 >= 0 - +c_t -1 >= 0 - +c_{ -1 >= 0 - -[pluto] (Band 5) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (21 variables, 34 constraints) -[pluto] pluto_constraints_lexmin_isl (20 variables, 34 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = k, h(S2) = k, h(S3) = 0, h(S4) = j -[pluto] pluto_auto_transform: band level 4; 1 hyperplane(s) found -T(S1): (1, i, j, 0, 1, k) -loop types (scalar, loop, loop, scalar, scalar, loop) - -T(S2): (1, i, j, 1, 0, k) -loop types (scalar, loop, loop, scalar, scalar, loop) - -T(S3): (0, i, j, 0, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S4): (1, i, k, 1, 1, j) -loop types (scalar, loop, loop, scalar, scalar, loop) - -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 3 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 7 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (1, i, j, 0, 1, k) -loop types (scalar, loop, loop, scalar, scalar, loop) - -T(S2): (1, i, j, 1, 0, k) -loop types (scalar, loop, loop, scalar, scalar, loop) - -T(S3): (0, i, j, 0, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S4): (1, i, k, 1, 1, j) -loop types (scalar, loop, loop, scalar, scalar, loop) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S3, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S3, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 3 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 7 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[Pluto] After tiling: -T(S1): (1, i, j, 0, 1, k/32, k, 0) -loop types (scalar, loop, loop, scalar, scalar, loop, loop, scalar) - -T(S2): (1, i, j, 1, 0, k, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, loop, scalar, scalar) - -T(S3): (0, i/32, j/32, i, j, 0, 0, 0) -loop types (scat5 {loop with stmts: S3, } -t4 {loop with stmts: S3, } -t7 {loop with stmts: S1, } -t7 {loop with stmts: S4, } -lar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S4): (1, i, k, 1, 1, j/32, j, 0) -loop types (scalar, loop, loop, scalar, scalar, loop, loop, scalar) - -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 16 -[pluto-intra-tile-opt] Score for loop 1: -28 -Getting loop at depth 6 -[pluto-intra-tile-opt] Score for loop 0: -8 -Getting loop at depth 6 -[pluto-intra-tile-opt] Score for loop 0: 18 -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(7,8), S2(2,8), S3(4,8), S4(7,8), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to 2mm.split1-noinit.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.002368s -[pluto] Auto-transformation time: 0.029849s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.003639s -[pluto] Code generation time: 0.024809s -[pluto] Other/Misc time: 0.062831s -[pluto] Total time: 0.119857s -[pluto] All times: 0.002368 0.029849 0.024809 0.062831 diff --git a/example/polybench/split-and-merge/2mm/2mm.split1.c b/example/polybench/split-and-merge/2mm/2mm.split1.c deleted file mode 100644 index 550794e1..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split1.c +++ /dev/null @@ -1,165 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NK,nk)) -{ - int i, j, k; - -#pragma scop - /* D := alpha*A*B*C + beta*D */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NJ; j++) - { - tmp[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NK; ++k) { - S[k] = alpha * A[i][k] * B[k][j]; - tmp[i][j] += S[k]; - } - } - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NL; j++) - { - D[i][j] *= beta; - for (k = 0; k < _PB_NJ; ++k) - D[i][j] += tmp[i][k] * C[k][j]; - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,NK,nk); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split1.pluto.c b/example/polybench/split-and-merge/2mm/2mm.split1.pluto.c deleted file mode 100644 index 07ba46a6..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split1.pluto.c +++ /dev/null @@ -1,265 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NK,nk)) -{ - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9; - register int lbv, ubv; -if (_PB_NI >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - if ((_PB_NJ >= 0) && (_PB_NL >= 0)) { - for (t3=0;t3<=floord(_PB_NJ+_PB_NL-1,32);t3++) { - if ((_PB_NJ >= _PB_NL+1) && (t3 <= floord(_PB_NL-1,32)) && (t3 >= ceild(_PB_NL-31,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=_PB_NL-1;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - for (t5=_PB_NL;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ >= _PB_NL+1) && (t3 <= floord(_PB_NL-32,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=32*t3+31;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ <= _PB_NL-1) && (t3 <= floord(_PB_NJ-1,32)) && (t3 >= ceild(_PB_NJ-31,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=_PB_NJ-1;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - for (t5=_PB_NJ;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - if ((_PB_NJ == _PB_NL) && (t3 <= floord(_PB_NJ-1,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ <= _PB_NL-1) && (t3 <= floord(_PB_NJ-32,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=32*t3+31;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((t3 <= floord(_PB_NJ-1,32)) && (t3 >= ceild(_PB_NL,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((t3 <= floord(_PB_NL-1,32)) && (t3 >= ceild(_PB_NJ,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - if (_PB_NL <= -1) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } - if (_PB_NJ <= -1) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - if (_PB_NJ >= 1) { - for (t2=0;t2<=_PB_NI-1;t2++) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - if (_PB_NK >= 1) { - for (t5=0;t5<=floord(_PB_NK-1,32);t5++) { - for (t7=32*t5;t7<=min(_PB_NK-1,32*t5+31);t7++) { - for (t8=32*t3;t8<=min(_PB_NJ-1,32*t3+31);t8++) { - S[t7] = alpha * A[t2][t7] * B[t7][t8];; - tmp[t2][t8] += S[t7];; - } - } - } - } - if (_PB_NL >= 1) { - for (t5=0;t5<=floord(_PB_NL-1,32);t5++) { - for (t6=32*t3;t6<=min(_PB_NJ-1,32*t3+31);t6++) { - for (t8=32*t5;t8<=min(_PB_NL-1,32*t5+31);t8++) { - D[t2][t8] += tmp[t2][t6] * C[t6][t8];; - } - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,NK,nk); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split1.pluto.cloog b/example/polybench/split-and-merge/2mm/2mm.split1.pluto.cloog deleted file mode 100644 index f95eba85..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split1.pluto.cloog +++ /dev/null @@ -1,162 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 6 - -1 -_PB_NI _PB_NJ _PB_NK _PB_NL - -# Number of statements -5 - -# S1 (tmp[i][j] = SCALAR_VAL(0.0);) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 1 0 0 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S2 (S[k] = alpha * A[i][k] * B[k][j];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 0 -1 0 32 0 0 -1 0 0 0 0 31 -0 0 0 - -# S3 (tmp[i][j] += S[k];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 0 -1 0 32 0 0 -1 0 0 0 0 31 -0 0 0 - -# S4 (D[i][j] *= beta;) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S5 (D[i][j] += tmp[i][k] * C[k][j];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -5 - -# T(S1) -9 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# T(S2) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 - -# T(S3) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -3 - -# T(S4) -9 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# T(S5) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -9 -t1 t2 t3 t4 t5 t6 t7 t8 t9 diff --git a/example/polybench/split-and-merge/2mm/2mm.split1.pluto.log b/example/polybench/split-and-merge/2mm/2mm.split1.pluto.log deleted file mode 100644 index 034699c9..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split1.pluto.log +++ /dev/null @@ -1,2340 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 6 0 0 0 4 - -# Parameters are provided -1 - -_PB_NI _PB_NJ _PB_NK _PB_NL - - -# Number of statements -5 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -tmp[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 2.3 Access -WRITE -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 9 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -READ -1 10 1 3 0 4 -# e/i| Arr| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == alpha - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == A - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 12 ## Arr == B - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -S[k] = alpha * A[i][k] * B[k][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 3.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 9 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -tmp[i][j] += S[k]; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -READ -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -READ -1 9 1 2 0 4 -# e/i| Arr| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 15 ## Arr == beta - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -D[i][j] *= beta; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 5.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 16 ## Arr == C - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -D[i][j] += tmp[i][k] * C[k][j]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -16 -# Mapping array-identifiers/array-names -1 i -2 _PB_NI -3 j -4 _PB_NJ -5 tmp -6 SCALAR_VAL -7 k -8 _PB_NK -9 S -10 alpha -11 A -12 B -13 _PB_NL -14 D -15 beta -16 C - - - -# File name -(null) -# Starting line and column -89 0 -# Ending line and column -106 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 4 -Parameters: _PB_NI _PB_NJ _PB_NK _PB_NL -S1 "tmp[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S2 "S[k] = alpha * A[i][k] * B[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -alpha[0] -A[i][k] -B[k][j] -Write accesses -S[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S3 "tmp[i][j] += S[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (0, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][j] -S[k] -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S4 "D[i][j] *= beta;" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -D[i][j] -beta[0] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "D[i][j] += tmp[i][k] * C[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S5): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -D[i][j] -tmp[i][k] -C[k][j] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 2 from S1 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 3 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 4 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 5 from S5 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 6 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 7 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 8 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 9 from S3 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S3 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 11 from S4 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 12 from S5 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 13 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 14 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 15 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 16 from S3 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 18 from S4 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 19 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 20 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S3): (0, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 5 -[pluto] Total number of loops: 13 -[pluto] Number of deps: 20 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 4 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 2: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[4 dims; 4 constraints] -c_l-1 >= 0 -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied - 6 dep(s) satisfied -h(S1) = 0, h(S2) = 1, h(S3) = 1, h(S4) = 0, h(S5) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 12 constraints - For dep 1; num_constraints: 14 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 2; num_constraints: 14 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 3; num_constraints: 14 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 4; num_constraints: 14 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 5; num_constraints: 7 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 6; num_constraints: 18 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 7; num_constraints: 14 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 8; num_constraints: 12 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 9; num_constraints: 7 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 10; num_constraints: 7 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 11; num_constraints: 14 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 12; num_constraints: 7 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 13; num_constraints: 18 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 14; num_constraints: 14 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 15; num_constraints: 14 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 16; num_constraints: 7 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 17; num_constraints: 7 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 18; num_constraints: 14 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 9 constraints - For dep 19; num_constraints: 11 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 20; num_constraints: 7 - After dep 1; num_constraints: 14 - After dep 5; num_constraints: 21 - After dep 6; num_constraints: 39 - After dep 7; num_constraints: 53 - After dep 8; num_constraints: 65 - After dep 9; num_constraints: 72 - After dep 10; num_constraints: 79 - After dep 12; num_constraints: 86 - After dep 13; num_constraints: 104 - After dep 14; num_constraints: 118 - After dep 16; num_constraints: 125 - After dep 17; num_constraints: 132 - After dep 19; num_constraints: 143 - After dep 20; num_constraints: 150 - After all dependences: num constraints: 56, num variables: 25 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_n >= 0 - -Set #1 -[25 dims; 1 constraints] -c_o >= 0 - -Set #1 -[25 dims; 1 constraints] -c_n+c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[25 dims; 1 constraints] -c_r >= 0 - -Set #1 -[25 dims; 1 constraints] --c_s >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] -c_r-c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 3 disjuncts -Set #1 -[25 dims; 1 constraints] -c_v >= 0 - -Set #1 -[25 dims; 1 constraints] --c_w >= 0 - -Set #1 -[25 dims; 1 constraints] --c_x >= 0 - -Set #1 -[25 dims; 1 constraints] -c_v-c_w-c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_z >= 0 - -Set #1 -[25 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_z+c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 3 disjuncts -Set #1 -[25 dims; 1 constraints] -c_~ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_~+c_+c_€-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 5 constraints] - +c_n +c_o -1 >= 0 - +c_r -c_s -c_t -1 >= 0 - +c_v -c_w -c_x -1 >= 0 - +c_z +c_{ -1 >= 0 - +c_~ +c_ +c_€ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (25 variables, 91 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 91 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = i, h(S2) = i, h(S3) = i, h(S4) = i, h(S5) = i -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_o >= 0 - -Set #1 -[25 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[25 dims; 1 constraints] --c_s >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] --c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[25 dims; 1 constraints] --c_w >= 0 - -Set #1 -[25 dims; 1 constraints] --c_x >= 0 - -Set #1 -[25 dims; 1 constraints] --c_w-c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_+c_€-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 5 constraints] - +c_o -1 >= 0 - -c_s -c_t -1 >= 0 - -c_w -c_x -1 >= 0 - +c_{ -1 >= 0 - +c_ +c_€ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (25 variables, 91 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 91 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (0, i) -loop types (scalar, loop) - -T(S2): (1, i) -loop types (scalar, loop) - -T(S3): (1, i) -loop types (scalar, loop) - -T(S4): (0, i) -loop types (scalar, loop) - -T(S5): (1, i) -loop types (scalar, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 1 - After dep 1; num_constraints: 14 - After dep 5; num_constraints: 21 - After dep 7; num_constraints: 35 - After dep 8; num_constraints: 47 - After dep 9; num_constraints: 54 - After dep 10; num_constraints: 61 - After dep 12; num_constraints: 68 - After dep 14; num_constraints: 82 - After dep 16; num_constraints: 89 - After dep 17; num_constraints: 96 - After dep 20; num_constraints: 103 - After all dependences: num constraints: 43, num variables: 25 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_o >= 0 - -Set #1 -[25 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_s >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] -c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_w >= 0 - -Set #1 -[25 dims; 1 constraints] --c_x >= 0 - -Set #1 -[25 dims; 1 constraints] -c_w-c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_+c_€-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 5 constraints] - +c_o -1 >= 0 - +c_s -c_t -1 >= 0 - +c_w -c_x -1 >= 0 - +c_{ -1 >= 0 - +c_ +c_€ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (25 variables, 78 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 78 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = j, h(S5) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[25 dims; 1 constraints] --c_x >= 0 - -Set #1 -[25 dims; 1 constraints] --c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 3 constraints] - -c_t -1 >= 0 - -c_x -1 >= 0 - +c_ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (25 variables, 74 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 74 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 1 hyperplane(s) found -T(S1): (0, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, i, j) -loop types (scalar, loop, loop) - -T(S3): (1, i, j) -loop types (scalar, loop, loop) - -T(S4): (0, i, j) -loop types (scalar, loop, loop) - -T(S5): (1, i, k) -loop types (scalar, loop, loop) - -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 2 - After dep 1; num_constraints: 14 - After dep 8; num_constraints: 26 - After dep 9; num_constraints: 33 - After dep 10; num_constraints: 40 - After dep 16; num_constraints: 47 - After all dependences: num constraints: 25, num variables: 25 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[25 dims; 1 constraints] --c_x >= 0 - -Set #1 -[25 dims; 1 constraints] --c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 3 constraints] - -c_t -1 >= 0 - -c_x -1 >= 0 - +c_ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (25 variables, 56 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 56 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 0 hyperplane(s) found -T(S1): (0, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, i, j) -loop types (scalar, loop, loop) - -T(S3): (1, i, j) -loop types (scalar, loop, loop) - -T(S4): (0, i, j) -loop types (scalar, loop, loop) - -T(S5): (1, i, k) -loop types (scalar, loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 2 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 2 and id 3 -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 1 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 3 - After dep 8; num_constraints: 12 - After dep 9; num_constraints: 19 - After dep 10; num_constraints: 26 - After dep 16; num_constraints: 33 - After all dependences: num constraints: 15, num variables: 25 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_t >= 0 - -Set #1 -[25 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_x >= 0 - -Set #1 -[25 dims; 1 constraints] -c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 3 constraints] - +c_t -1 >= 0 - +c_x -1 >= 0 - +c_ -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (25 variables, 46 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 46 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = k, h(S3) = k, h(S4) = 0, h(S5) = j -[pluto] pluto_auto_transform: band level 3; 1 hyperplane(s) found -T(S1): (0, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S4): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S5): (1, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 4 -[pluto] pluto_auto_transform: band level 4; 0 hyperplane(s) found -T(S1): (0, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S4): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S5): (1, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 2 -[pluto] Cutting between all SCCs -h(S1) = 4, h(S2) = 2, h(S3) = 3, h(S4) = 1, h(S5) = 0 -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 1 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (0, i, j, 1, 0, 4) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S2): (1, i, j, 0, k, 2) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S3): (1, i, j, 0, k, 3) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S4): (0, i, j, 0, 0, 1) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S5): (1, i, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, scalar) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S1, S4, } -(t3, t4, t5, ) with stmts {S2, S3, S5, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S1, S4, } -(t3, t4, t5, ) with stmts {S2, S3, S5, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_st5 {loop with stmts: S1, S4, } -t4 {loop with stmts: S1, S4, } -t8 {loop with stmts: S2, S3, } -t6 {loop with stmts: S2, S3, } -t6 {loop with stmts: S2, S3, } -t8 {loop with stmts: S5, } -t6 {loop with stmts: S5, } -atisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 1 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -[Pluto] After tiling: -T(S1): (0, i/32, j/32, i, j, 1, 0, 4, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, i, j/32, 0, k/32, j, 0, k, 2) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S3): (1, i, j/32, 0, k/32, j, 0, k, 3) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S4): (0, i/32, j/32, i, j, 0, 0, 1, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (1, i, k/32, 1, j/32, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 36 -[pluto-intra-tile-opt] Score for loop 1: -88 -Stmts in bands 0 and 2 are distributed in tile space -Total number of fused bands 2 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Band 2 to be fused with band 1 -Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: 4 -[pluto-intra-tile-opt] Score for loop 1: 44 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: 18 -[pluto-intra-tile-opt] Score for loop 1: -6 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 1 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (0, i/32, j/32, i, j, 1, 0, 4, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, i, j/32, 0, k/32, 0, k, j, 2) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S3): (1, i, j/32, 0, k/32, 0, k, j, 3) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S4): (0, i/32, j/32, i, j, 0, 0, 1, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (1, i, k/32, 1, j/32, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(4,9), S2(6,9), S3(6,9), S4(4,9), S5(6,9), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to 2mm.split1.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.002482s -[pluto] Auto-transformation time: 0.038115s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.004322s -[pluto] Code generation time: 0.130652s -[pluto] Other/Misc time: 0.208285s -[pluto] Total time: 0.379534s -[pluto] All times: 0.002482 0.038115 0.130652 0.208285 diff --git a/example/polybench/split-and-merge/2mm/2mm.split12-diff.c b/example/polybench/split-and-merge/2mm/2mm.split12-diff.c deleted file mode 100644 index 705ffa30..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split12-diff.c +++ /dev/null @@ -1,172 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S1,NK,nk), - DATA_TYPE POLYBENCH_1D(S2,NJ,nj)) -{ - int i, j, k; - -#pragma scop - /* D := alpha*A*B*C + beta*D */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NJ; j++) - { - tmp[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NK; ++k) { - S1[k] = alpha * A[i][k] * B[k][j]; - tmp[i][j] += S1[k]; - } - } - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NL; j++) - { - D[i][j] *= beta; - for (k = 0; k < _PB_NJ; ++k) { - S2[k] = tmp[i][k] * C[k][j]; - D[i][j] += S2[k]; - } - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S1,DATA_TYPE,NK,nk); - POLYBENCH_1D_ARRAY_DECL(S2,DATA_TYPE,NJ,nj); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S1), - POLYBENCH_ARRAY(S2)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - POLYBENCH_FREE_ARRAY(S1); - POLYBENCH_FREE_ARRAY(S2); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.c b/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.c deleted file mode 100644 index 904a3539..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.c +++ /dev/null @@ -1,271 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S1,NK,nk), - DATA_TYPE POLYBENCH_1D(S2,NJ,nj)) -{ - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9; - register int lbv, ubv; -if (_PB_NI >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - if ((_PB_NJ >= 0) && (_PB_NL >= 0)) { - for (t3=0;t3<=floord(_PB_NJ+_PB_NL-1,32);t3++) { - if ((_PB_NJ >= _PB_NL+1) && (t3 <= floord(_PB_NL-1,32)) && (t3 >= ceild(_PB_NL-31,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=_PB_NL-1;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - for (t5=_PB_NL;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ >= _PB_NL+1) && (t3 <= floord(_PB_NL-32,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=32*t3+31;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ <= _PB_NL-1) && (t3 <= floord(_PB_NJ-1,32)) && (t3 >= ceild(_PB_NJ-31,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=_PB_NJ-1;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - for (t5=_PB_NJ;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - if ((_PB_NJ == _PB_NL) && (t3 <= floord(_PB_NJ-1,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ <= _PB_NL-1) && (t3 <= floord(_PB_NJ-32,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=32*t3+31;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((t3 <= floord(_PB_NJ-1,32)) && (t3 >= ceild(_PB_NL,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((t3 <= floord(_PB_NL-1,32)) && (t3 >= ceild(_PB_NJ,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - if (_PB_NL <= -1) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } - if (_PB_NJ <= -1) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - if (_PB_NJ >= 1) { - for (t2=0;t2<=_PB_NI-1;t2++) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - if (_PB_NK >= 1) { - for (t5=0;t5<=floord(_PB_NK-1,32);t5++) { - for (t7=32*t5;t7<=min(_PB_NK-1,32*t5+31);t7++) { - for (t8=32*t3;t8<=min(_PB_NJ-1,32*t3+31);t8++) { - S1[t7] = alpha * A[t2][t7] * B[t7][t8];; - tmp[t2][t8] += S1[t7];; - } - } - } - } - if (_PB_NL >= 1) { - for (t5=0;t5<=floord(_PB_NL-1,32);t5++) { - for (t6=32*t3;t6<=min(_PB_NJ-1,32*t3+31);t6++) { - for (t8=32*t5;t8<=min(_PB_NL-1,32*t5+31);t8++) { - S2[t6] = tmp[t2][t6] * C[t6][t8];; - D[t2][t8] += S2[t6];; - } - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S1,DATA_TYPE,NK,nk); - POLYBENCH_1D_ARRAY_DECL(S2,DATA_TYPE,NJ,nj); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S1), - POLYBENCH_ARRAY(S2)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - POLYBENCH_FREE_ARRAY(S1); - POLYBENCH_FREE_ARRAY(S2); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.cloog b/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.cloog deleted file mode 100644 index b5089ff7..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.cloog +++ /dev/null @@ -1,191 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 6 - -1 -_PB_NI _PB_NJ _PB_NK _PB_NL - -# Number of statements -6 - -# S1 (tmp[i][j] = SCALAR_VAL(0.0);) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 1 0 0 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S2 (S1[k] = alpha * A[i][k] * B[k][j];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 0 -1 0 32 0 0 -1 0 0 0 0 31 -0 0 0 - -# S3 (tmp[i][j] += S1[k];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 0 -1 0 32 0 0 -1 0 0 0 0 31 -0 0 0 - -# S4 (D[i][j] *= beta;) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S5 (S2[k] = tmp[i][k] * C[k][j];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# S6 (D[i][j] += S2[k];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -6 - -# T(S1) -9 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# T(S2) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -3 - -# T(S3) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -4 - -# T(S4) -9 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 - -# T(S5) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S6) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -# we will set the scattering dimension names -9 -t1 t2 t3 t4 t5 t6 t7 t8 t9 diff --git a/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.log b/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.log deleted file mode 100644 index 8a0cfe6c..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split12-diff.pluto.log +++ /dev/null @@ -1,2935 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 6 0 0 0 4 - -# Parameters are provided -1 - -_PB_NI _PB_NJ _PB_NK _PB_NL - - -# Number of statements -6 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -tmp[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 2.3 Access -WRITE -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 9 ## Arr == S1 - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -READ -1 10 1 3 0 4 -# e/i| Arr| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == alpha - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == A - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 12 ## Arr == B - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -S1[k] = alpha * A[i][k] * B[k][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 3.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 9 ## Arr == S1 - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -tmp[i][j] += S1[k]; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -READ -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -READ -1 9 1 2 0 4 -# e/i| Arr| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 15 ## Arr == beta - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -D[i][j] *= beta; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 16 ## Arr == S2 - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 17 ## Arr == C - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -S2[k] = tmp[i][k] * C[k][j]; - - -# =============================================== Statement 6 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 6.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 16 ## Arr == S2 - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -D[i][j] += S2[k]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -17 -# Mapping array-identifiers/array-names -1 i -2 _PB_NI -3 j -4 _PB_NJ -5 tmp -6 SCALAR_VAL -7 k -8 _PB_NK -9 S1 -10 alpha -11 A -12 B -13 _PB_NL -14 D -15 beta -16 S2 -17 C - - - -# File name -(null) -# Starting line and column -90 0 -# Ending line and column -109 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 4 -Parameters: _PB_NI _PB_NJ _PB_NK _PB_NL -S1 "tmp[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S2 "S1[k] = alpha * A[i][k] * B[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -alpha[0] -A[i][k] -B[k][j] -Write accesses -S1[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S3 "tmp[i][j] += S1[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (0, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][j] -S1[k] -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S4 "D[i][j] *= beta;" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -D[i][j] -beta[0] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "S2[k] = tmp[i][k] * C[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S5): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][k] -C[k][j] -Write accesses -S2[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S6 "D[i][j] += S2[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S6): (1, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -D[i][j] -S2[k] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S3 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 2 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S1 -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 3 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S1 -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 4 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S1 -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 5 from S6 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 6 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 7 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 8 from S1 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 9 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: S2 -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 10 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: S2 -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 11 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: S2 -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 12 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 13 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S1 -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 14 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S1 -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 15 from S6 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: S2 -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 16 from S6 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: S2 -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 17 from S6 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 18 from S4 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 19 from S3 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 20 from S3 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 21 from S4 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 22 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: S2 -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 23 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: S2 -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 24 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 25 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 26 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S1 -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 27 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S1 -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S3): (0, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S6): (1, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 6 -[pluto] Total number of loops: 16 -[pluto] Number of deps: 27 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 4 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 5 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 2: max stmt dim: 3 - SCC 3: size: 2: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[4 dims; 4 constraints] -c_l-1 >= 0 -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied - 6 dep(s) satisfied -h(S1) = 0, h(S2) = 1, h(S3) = 1, h(S4) = 0, h(S5) = 1, h(S6) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 1; num_constraints: 7 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 2; num_constraints: 18 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 3; num_constraints: 14 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 4; num_constraints: 12 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 5; num_constraints: 7 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 12 constraints - For dep 6; num_constraints: 14 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 7; num_constraints: 14 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 8; num_constraints: 14 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 9; num_constraints: 18 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 10; num_constraints: 14 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 11; num_constraints: 12 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 12; num_constraints: 14 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 13; num_constraints: 18 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 14; num_constraints: 14 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 15; num_constraints: 18 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 16; num_constraints: 14 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 17; num_constraints: 7 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 18; num_constraints: 14 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 19; num_constraints: 7 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 20; num_constraints: 7 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 21; num_constraints: 14 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 9 constraints - For dep 22; num_constraints: 11 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 23; num_constraints: 7 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 24; num_constraints: 14 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 25; num_constraints: 7 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 9 constraints - For dep 26; num_constraints: 11 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 27; num_constraints: 7 - After dep 1; num_constraints: 7 - After dep 2; num_constraints: 25 - After dep 3; num_constraints: 39 - After dep 4; num_constraints: 51 - After dep 5; num_constraints: 58 - After dep 6; num_constraints: 72 - After dep 9; num_constraints: 90 - After dep 10; num_constraints: 104 - After dep 11; num_constraints: 116 - After dep 13; num_constraints: 134 - After dep 14; num_constraints: 148 - After dep 15; num_constraints: 166 - After dep 16; num_constraints: 180 - After dep 17; num_constraints: 187 - After dep 19; num_constraints: 194 - After dep 20; num_constraints: 201 - After dep 22; num_constraints: 212 - After dep 23; num_constraints: 219 - After dep 25; num_constraints: 226 - After dep 26; num_constraints: 237 - After dep 27; num_constraints: 244 - After all dependences: num constraints: 90, num variables: 29 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[29 dims; 1 constraints] -c_n >= 0 - -Set #1 -[29 dims; 1 constraints] -c_o >= 0 - -Set #1 -[29 dims; 1 constraints] -c_n+c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[29 dims; 1 constraints] -c_r >= 0 - -Set #1 -[29 dims; 1 constraints] --c_s >= 0 - -Set #1 -[29 dims; 1 constraints] --c_t >= 0 - -Set #1 -[29 dims; 1 constraints] -c_r-c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 3 disjuncts -Set #1 -[29 dims; 1 constraints] -c_v >= 0 - -Set #1 -[29 dims; 1 constraints] --c_w >= 0 - -Set #1 -[29 dims; 1 constraints] --c_x >= 0 - -Set #1 -[29 dims; 1 constraints] -c_v-c_w-c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[29 dims; 1 constraints] -c_z >= 0 - -Set #1 -[29 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_z+c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 3 disjuncts -Set #1 -[29 dims; 1 constraints] -c_~ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_~-c_+c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[29 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_‚-c_ƒ+c_„-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 6 constraints] - +c_n +c_o -1 >= 0 - +c_r -c_s -c_t -1 >= 0 - +c_v -c_w -c_x -1 >= 0 - +c_z +c_{ -1 >= 0 - +c_~ -c_ +c_€ -1 >= 0 - +c_‚ -c_ƒ +c_„ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (29 variables, 131 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 131 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = i, h(S2) = i, h(S3) = i, h(S4) = i, h(S5) = i, h(S6) = i -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_o >= 0 - -Set #1 -[29 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_s >= 0 - -Set #1 -[29 dims; 1 constraints] --c_t >= 0 - -Set #1 -[29 dims; 1 constraints] --c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_w >= 0 - -Set #1 -[29 dims; 1 constraints] --c_x >= 0 - -Set #1 -[29 dims; 1 constraints] --c_w-c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_+c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_ƒ+c_„-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 6 constraints] - +c_o -1 >= 0 - -c_s -c_t -1 >= 0 - -c_w -c_x -1 >= 0 - +c_{ -1 >= 0 - -c_ +c_€ -1 >= 0 - -c_ƒ +c_„ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (29 variables, 131 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 131 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (0, i) -loop types (scalar, loop) - -T(S2): (1, i) -loop types (scalar, loop) - -T(S3): (1, i) -loop types (scalar, loop) - -T(S4): (0, i) -loop types (scalar, loop) - -T(S5): (1, i) -loop types (scalar, loop) - -T(S6): (1, i) -loop types (scalar, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 1 - After dep 1; num_constraints: 7 - After dep 3; num_constraints: 21 - After dep 4; num_constraints: 33 - After dep 5; num_constraints: 40 - After dep 6; num_constraints: 54 - After dep 10; num_constraints: 68 - After dep 11; num_constraints: 80 - After dep 14; num_constraints: 94 - After dep 16; num_constraints: 108 - After dep 17; num_constraints: 115 - After dep 19; num_constraints: 122 - After dep 20; num_constraints: 129 - After dep 23; num_constraints: 136 - After dep 25; num_constraints: 143 - After dep 27; num_constraints: 150 - After all dependences: num constraints: 64, num variables: 29 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_o >= 0 - -Set #1 -[29 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[29 dims; 1 constraints] -c_s >= 0 - -Set #1 -[29 dims; 1 constraints] --c_t >= 0 - -Set #1 -[29 dims; 1 constraints] -c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[29 dims; 1 constraints] -c_w >= 0 - -Set #1 -[29 dims; 1 constraints] --c_x >= 0 - -Set #1 -[29 dims; 1 constraints] -c_w-c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_+c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_ƒ+c_„-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 6 constraints] - +c_o -1 >= 0 - +c_s -c_t -1 >= 0 - +c_w -c_x -1 >= 0 - +c_{ -1 >= 0 - +c_ +c_€ -1 >= 0 - +c_ƒ +c_„ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (29 variables, 105 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 105 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = j, h(S5) = k, h(S6) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[29 dims; 1 constraints] --c_t >= 0 - -Set #1 -[29 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[29 dims; 1 constraints] --c_x >= 0 - -Set #1 -[29 dims; 1 constraints] --c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_ƒ-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 4 constraints] - -c_t -1 >= 0 - -c_x -1 >= 0 - +c_ -1 >= 0 - +c_ƒ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (29 variables, 101 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 101 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 1 hyperplane(s) found -T(S1): (0, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, i, j) -loop types (scalar, loop, loop) - -T(S3): (1, i, j) -loop types (scalar, loop, loop) - -T(S4): (0, i, j) -loop types (scalar, loop, loop) - -T(S5): (1, i, k) -loop types (scalar, loop, loop) - -T(S6): (1, i, k) -loop types (scalar, loop, loop) - -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 2 - After dep 1; num_constraints: 7 - After dep 4; num_constraints: 19 - After dep 6; num_constraints: 33 - After dep 10; num_constraints: 47 - After dep 11; num_constraints: 59 - After dep 16; num_constraints: 73 - After dep 19; num_constraints: 80 - After dep 20; num_constraints: 87 - After dep 23; num_constraints: 94 - After all dependences: num constraints: 46, num variables: 29 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[29 dims; 1 constraints] --c_t >= 0 - -Set #1 -[29 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[29 dims; 1 constraints] --c_x >= 0 - -Set #1 -[29 dims; 1 constraints] --c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_ƒ-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 4 constraints] - -c_t -1 >= 0 - -c_x -1 >= 0 - +c_ -1 >= 0 - +c_ƒ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (29 variables, 83 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 83 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 0 hyperplane(s) found -T(S1): (0, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, i, j) -loop types (scalar, loop, loop) - -T(S3): (1, i, j) -loop types (scalar, loop, loop) - -T(S4): (0, i, j) -loop types (scalar, loop, loop) - -T(S5): (1, i, k) -loop types (scalar, loop, loop) - -T(S6): (1, i, k) -loop types (scalar, loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 5 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 2: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 2 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 2 and id 3 -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 6 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 1, h(S6) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 3 - After dep 1; num_constraints: 7 - After dep 4; num_constraints: 19 - After dep 10; num_constraints: 33 - After dep 11; num_constraints: 45 - After dep 16; num_constraints: 59 - After dep 19; num_constraints: 66 - After dep 20; num_constraints: 73 - After dep 23; num_constraints: 80 - After all dependences: num constraints: 38, num variables: 29 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_t >= 0 - -Set #1 -[29 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_x >= 0 - -Set #1 -[29 dims; 1 constraints] -c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_ƒ-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 4 constraints] - +c_t -1 >= 0 - +c_x -1 >= 0 - +c_ -1 >= 0 - +c_ƒ -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (29 variables, 75 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 75 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = k, h(S3) = k, h(S4) = 0, h(S5) = j, h(S6) = j -[pluto] pluto_auto_transform: band level 3; 1 hyperplane(s) found -T(S1): (0, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S4): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S5): (1, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -T(S6): (1, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 4 -[pluto] pluto_auto_transform: band level 4; 0 hyperplane(s) found -T(S1): (0, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S4): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S5): (1, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -T(S6): (1, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 3 - SCC 5: size: 1: max stmt dim: 2 -[pluto] Cutting between all SCCs -h(S1) = 5, h(S2) = 3, h(S3) = 4, h(S4) = 2, h(S5) = 0, h(S6) = 1 -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied - 2 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 6 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied - 2 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (0, i, j, 1, 0, 5) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S2): (1, i, j, 0, k, 3) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S3): (1, i, j, 0, k, 4) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S4): (0, i, j, 0, 0, 2) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S5): (1, i, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S6): (1, i, k, 1, j, 1) -loop types (scalar, loop, loop, scalar, loop, scalt5 {loop with stmts: S1, S4, } -t4 {loop with stmts: S1, S4, } -t8 {loop with stmts: S2, S3, } -t6 {loop with stmts: S2, S3, } -t6 {loop with stmts: S2, S3, } -t8 {loop with stmts: S5, S6, } -t6 {loop with stmts: S5, S6, } -ar) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S1, S4, } -(t3, t4, t5, ) with stmts {S2, S3, S5, S6, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S1, S4, } -(t3, t4, t5, ) with stmts {S2, S3, S5, S6, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 6 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied - 2 dep(s) satisfied -[Pluto] After tiling: -T(S1): (0, i/32, j/32, i, j, 1, 0, 5, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, i, j/32, 0, k/32, j, 0, k, 3) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S3): (1, i, j/32, 0, k/32, j, 0, k, 4) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S4): (0, i/32, j/32, i, j, 0, 0, 2, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (1, i, k/32, 1, j/32, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S6): (1, i, k/32, 1, j/32, k, 1, j, 1) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 36 -[pluto-intra-tile-opt] Score for loop 1: -88 -Stmts in bands 0 and 2 are distributed in tile space -Stmts in bands 0 and 3 are distributed in tile space -Total number of fused bands 2 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Band 2 to be fused with band 1 -Band 3 to be fused with band 1 -Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: 4 -[pluto-intra-tile-opt] Score for loop 1: 44 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: 36 -[pluto-intra-tile-opt] Score for loop 1: -4 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 6 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied - 2 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (0, i/32, j/32, i, j, 1, 0, 5, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, i, j/32, 0, k/32, 0, k, j, 3) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S3): (1, i, j/32, 0, k/32, 0, k, j, 4) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S4): (0, i/32, j/32, i, j, 0, 0, 2, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (1, i, k/32, 1, j/32, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -T(S6): (1, i, k/32, 1, j/32, k, 1, j, 1) -loop types (scalar, loop, loop, scalar, loop, loop, scalar, loop, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(4,9), S2(6,9), S3(6,9), S4(4,9), S5(6,9), S6(6,9), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to 2mm.split12-diff.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.003824s -[pluto] Auto-transformation time: 0.067210s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.006681s -[pluto] Code generation time: 0.127397s -[pluto] Other/Misc time: 0.291427s -[pluto] Total time: 0.489858s -[pluto] All times: 0.003824 0.067210 0.127397 0.291427 diff --git a/example/polybench/split-and-merge/2mm/2mm.split12.c b/example/polybench/split-and-merge/2mm/2mm.split12.c deleted file mode 100644 index 50468ddf..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split12.c +++ /dev/null @@ -1,168 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NK,nk)) -{ - int i, j, k; - -#pragma scop - /* D := alpha*A*B*C + beta*D */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NJ; j++) - { - tmp[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NK; ++k) { - S[k] = alpha * A[i][k] * B[k][j]; - tmp[i][j] += S[k]; - } - } - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NL; j++) - { - D[i][j] *= beta; - for (k = 0; k < _PB_NJ; ++k) { - S[k] = tmp[i][k] * C[k][j]; - D[i][j] += S[k]; - } - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,NK,nk); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - POLYBENCH_FREE_ARRAY(S); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split12.pluto.c b/example/polybench/split-and-merge/2mm/2mm.split12.pluto.c deleted file mode 100644 index 3680c645..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split12.pluto.c +++ /dev/null @@ -1,207 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NK,nk)) -{ - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8; - register int lbv, ubv; -if (_PB_NI >= 1) { - if (_PB_NL >= 1) { - for (t3=0;t3<=floord(_PB_NI-1,32);t3++) { - for (t4=0;t4<=floord(_PB_NL-1,32);t4++) { - for (t5=32*t3;t5<=min(_PB_NI-1,32*t3+31);t5++) { - for (t6=32*t4;t6<=min(_PB_NL-1,32*t4+31);t6++) { - D[t5][t6] *= beta;; - } - } - } - } - } - if (_PB_NJ >= 1) { - for (t3=0;t3<=floord(_PB_NI-1,32);t3++) { - for (t4=0;t4<=floord(_PB_NJ-1,32);t4++) { - for (t5=32*t3;t5<=min(_PB_NI-1,32*t3+31);t5++) { - for (t6=32*t4;t6<=min(_PB_NJ-1,32*t4+31);t6++) { - tmp[t5][t6] = SCALAR_VAL(0.0);; - } - } - } - } - } - if (_PB_NJ >= 1) { - for (t3=0;t3<=floord(_PB_NK-1,32);t3++) { - for (t4=0;t4<=floord(_PB_NI-1,32);t4++) { - for (t5=32*t3;t5<=min(_PB_NK-1,32*t3+31);t5++) { - for (t6=32*t4;t6<=min(_PB_NI-1,32*t4+31);t6++) { - for (t7=0;t7<=_PB_NJ-1;t7++) { - S[t5] = alpha * A[t6][t5] * B[t5][t7];; - tmp[t6][t7] += S[t5];; - } - } - } - } - } - } - if (_PB_NL >= 1) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - for (t4=0;t4<=floord(_PB_NI-1,32);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - for (t6=32*t4;t6<=min(_PB_NI-1,32*t4+31);t6++) { - for (t7=0;t7<=_PB_NL-1;t7++) { - S[t5] = tmp[t6][t5] * C[t5][t7];; - D[t6][t7] += S[t5];; - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,NK,nk); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - POLYBENCH_FREE_ARRAY(S); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split12.pluto.cloog b/example/polybench/split-and-merge/2mm/2mm.split12.pluto.cloog deleted file mode 100644 index ef561f6d..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split12.pluto.cloog +++ /dev/null @@ -1,185 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 6 - -1 -_PB_NI _PB_NJ _PB_NK _PB_NL - -# Number of statements -6 - -# S1 (tmp[i][j] = SCALAR_VAL(0.0);) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 1 0 0 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S2 (S[k] = alpha * A[i][k] * B[k][j];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 31 -0 0 0 - -# S3 (tmp[i][j] += S[k];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 31 -0 0 0 - -# S4 (D[i][j] *= beta;) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S5 (S[k] = tmp[i][k] * C[k][j];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 31 -0 0 0 - -# S6 (D[i][j] += S[k];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -6 - -# T(S1) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -5 - -# T(S2) -8 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -3 - -# T(S3) -8 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -4 - -# T(S4) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 - -# T(S5) -8 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S6) -8 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -# we will set the scattering dimension names -8 -t1 t2 t3 t4 t5 t6 t7 t8 diff --git a/example/polybench/split-and-merge/2mm/2mm.split12.pluto.log b/example/polybench/split-and-merge/2mm/2mm.split12.pluto.log deleted file mode 100644 index d4f32860..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split12.pluto.log +++ /dev/null @@ -1,2990 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 6 0 0 0 4 - -# Parameters are provided -1 - -_PB_NI _PB_NJ _PB_NK _PB_NL - - -# Number of statements -6 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -tmp[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 2.3 Access -WRITE -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 9 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -READ -1 10 1 3 0 4 -# e/i| Arr| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == alpha - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == A - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 12 ## Arr == B - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -S[k] = alpha * A[i][k] * B[k][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 3.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 9 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -tmp[i][j] += S[k]; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -READ -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -READ -1 9 1 2 0 4 -# e/i| Arr| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 15 ## Arr == beta - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -D[i][j] *= beta; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 9 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 16 ## Arr == C - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -S[k] = tmp[i][k] * C[k][j]; - - -# =============================================== Statement 6 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 6.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 14 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 9 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -D[i][j] += S[k]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -16 -# Mapping array-identifiers/array-names -1 i -2 _PB_NI -3 j -4 _PB_NJ -5 tmp -6 SCALAR_VAL -7 k -8 _PB_NK -9 S -10 alpha -11 A -12 B -13 _PB_NL -14 D -15 beta -16 C - - - -# File name -(null) -# Starting line and column -89 0 -# Ending line and column -108 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 4 -Parameters: _PB_NI _PB_NJ _PB_NK _PB_NL -S1 "tmp[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S2 "S[k] = alpha * A[i][k] * B[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -alpha[0] -A[i][k] -B[k][j] -Write accesses -S[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S3 "tmp[i][j] += S[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (0, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][j] -S[k] -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S4 "D[i][j] *= beta;" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -D[i][j] -beta[0] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "S[k] = tmp[i][k] * C[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S5): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][k] -C[k][j] -Write accesses -S[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S6 "D[i][j] += S[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S6): (1, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -D[i][j] -S[k] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S3 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 2 from S2 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --k+k' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 3 from S6 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 4 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 5 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 6 from S1 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 7 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 8 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 9 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 10 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 11 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 12 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 13 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 14 from S6 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 15 from S3 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --k+k' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 16 from S4 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S3 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 18 from S6 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 19 from S6 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 20 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 21 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 22 from S4 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 23 from S2 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --k+k' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 24 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 25 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 26 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 27 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 28 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 29 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 30 from S3 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S3): (0, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S6): (1, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 6 -[pluto] Total number of loops: 16 -[pluto] Number of deps: 30 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 4 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 5 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 2: max stmt dim: 3 - SCC 3: size: 2: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[4 dims; 4 constraints] -c_l-1 >= 0 -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 6 dep(s) satisfied -h(S1) = 0, h(S2) = 1, h(S3) = 1, h(S4) = 0, h(S5) = 1, h(S6) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 1; num_constraints: 7 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_q) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_v) from 12 constraints - For dep 2; num_constraints: 20 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 3; num_constraints: 7 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 12 constraints - For dep 4; num_constraints: 14 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 5; num_constraints: 14 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 6; num_constraints: 14 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 7; num_constraints: 18 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 8; num_constraints: 14 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 9; num_constraints: 12 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 10; num_constraints: 18 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 11; num_constraints: 14 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 12; num_constraints: 12 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 13; num_constraints: 14 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 14; num_constraints: 7 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_q) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_v) from 12 constraints - For dep 15; num_constraints: 20 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 16; num_constraints: 14 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 17; num_constraints: 7 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 18; num_constraints: 18 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 19; num_constraints: 14 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 20; num_constraints: 18 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 21; num_constraints: 14 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 22; num_constraints: 14 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_q) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_v) from 12 constraints - For dep 23; num_constraints: 20 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 9 constraints - For dep 24; num_constraints: 11 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 25; num_constraints: 7 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 9 constraints - For dep 26; num_constraints: 11 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 27; num_constraints: 7 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 28; num_constraints: 14 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 29; num_constraints: 7 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 30; num_constraints: 7 - After dep 1; num_constraints: 7 - After dep 2; num_constraints: 27 - After dep 3; num_constraints: 34 - After dep 4; num_constraints: 48 - After dep 7; num_constraints: 66 - After dep 8; num_constraints: 80 - After dep 9; num_constraints: 92 - After dep 10; num_constraints: 110 - After dep 11; num_constraints: 124 - After dep 12; num_constraints: 136 - After dep 14; num_constraints: 143 - After dep 15; num_constraints: 163 - After dep 17; num_constraints: 170 - After dep 18; num_constraints: 188 - After dep 19; num_constraints: 202 - After dep 20; num_constraints: 220 - After dep 21; num_constraints: 234 - After dep 23; num_constraints: 254 - After dep 24; num_constraints: 265 - After dep 25; num_constraints: 272 - After dep 26; num_constraints: 283 - After dep 27; num_constraints: 290 - After dep 29; num_constraints: 297 - After dep 30; num_constraints: 304 - After all dependences: num constraints: 114, num variables: 29 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_n >= 0 - -Set #1 -[29 dims; 1 constraints] --c_o >= 0 - -Set #1 -[29 dims; 1 constraints] --c_n-c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[29 dims; 1 constraints] --c_r >= 0 - -Set #1 -[29 dims; 1 constraints] --c_s >= 0 - -Set #1 -[29 dims; 1 constraints] --c_t >= 0 - -Set #1 -[29 dims; 1 constraints] --c_r-c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 3 disjuncts -Set #1 -[29 dims; 1 constraints] --c_v >= 0 - -Set #1 -[29 dims; 1 constraints] --c_w >= 0 - -Set #1 -[29 dims; 1 constraints] --c_x >= 0 - -Set #1 -[29 dims; 1 constraints] --c_v-c_w-c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_z >= 0 - -Set #1 -[29 dims; 1 constraints] --c_{ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_z-c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 3 disjuncts -Set #1 -[29 dims; 1 constraints] --c_~ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_€ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_~-c_-c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[29 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_„ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_‚-c_ƒ-c_„-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 6 constraints] - -c_n -c_o -1 >= 0 - -c_r -c_s -c_t -1 >= 0 - -c_v -c_w -c_x -1 >= 0 - -c_z -c_{ -1 >= 0 - -c_~ -c_ -c_€ -1 >= 0 - -c_‚ -c_ƒ -c_„ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (29 variables, 155 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 155 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 0 hyperplane(s) found -T(S1): (0) -loop types (scalar) - -T(S2): (1) -loop types (scalar) - -T(S3): (1) -loop types (scalar) - -T(S4): (0) -loop types (scalar) - -T(S5): (1) -loop types (scalar) - -T(S6): (1) -loop types (scalar) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 1 2 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 4 5 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 2: max stmt dim: 3 - SCC 2: size: 2: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 1 and id 2 -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 4 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 1, h(S6) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 1 - After dep 1; num_constraints: 7 - After dep 3; num_constraints: 14 - After dep 7; num_constraints: 32 - After dep 8; num_constraints: 46 - After dep 9; num_constraints: 58 - After dep 10; num_constraints: 76 - After dep 11; num_constraints: 90 - After dep 12; num_constraints: 102 - After dep 14; num_constraints: 109 - After dep 17; num_constraints: 116 - After dep 18; num_constraints: 134 - After dep 19; num_constraints: 148 - After dep 20; num_constraints: 166 - After dep 21; num_constraints: 180 - After dep 24; num_constraints: 191 - After dep 25; num_constraints: 198 - After dep 26; num_constraints: 209 - After dep 27; num_constraints: 216 - After dep 29; num_constraints: 223 - After dep 30; num_constraints: 230 - After all dependences: num constraints: 82, num variables: 29 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[29 dims; 1 constraints] -c_n >= 0 - -Set #1 -[29 dims; 1 constraints] -c_o >= 0 - -Set #1 -[29 dims; 1 constraints] -c_n+c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[29 dims; 1 constraints] -c_r >= 0 - -Set #1 -[29 dims; 1 constraints] --c_s >= 0 - -Set #1 -[29 dims; 1 constraints] -c_t >= 0 - -Set #1 -[29 dims; 1 constraints] -c_r-c_s+c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 3 disjuncts -Set #1 -[29 dims; 1 constraints] -c_v >= 0 - -Set #1 -[29 dims; 1 constraints] --c_w >= 0 - -Set #1 -[29 dims; 1 constraints] -c_x >= 0 - -Set #1 -[29 dims; 1 constraints] -c_v-c_w+c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[29 dims; 1 constraints] -c_z >= 0 - -Set #1 -[29 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_z+c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 3 disjuncts -Set #1 -[29 dims; 1 constraints] -c_~ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_~-c_+c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[29 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_‚-c_ƒ+c_„-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 6 constraints] - +c_n +c_o -1 >= 0 - +c_r -c_s +c_t -1 >= 0 - +c_v -c_w +c_x -1 >= 0 - +c_z +c_{ -1 >= 0 - +c_~ -c_ +c_€ -1 >= 0 - +c_‚ -c_ƒ +c_„ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (29 variables, 123 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 123 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = i, h(S2) = k, h(S3) = k, h(S4) = i, h(S5) = k, h(S6) = k -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_o >= 0 - -Set #1 -[29 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_s >= 0 - -Set #1 -[29 dims; 1 constraints] -c_r >= 0 - -Set #1 -[29 dims; 1 constraints] -c_r-c_s-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_w >= 0 - -Set #1 -[29 dims; 1 constraints] -c_v >= 0 - -Set #1 -[29 dims; 1 constraints] -c_v-c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_~ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_~-c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[29 dims; 1 constraints] --c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_‚-c_ƒ-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 6 constraints] - +c_o -1 >= 0 - +c_r -c_s -1 >= 0 - +c_v -c_w -1 >= 0 - +c_{ -1 >= 0 - +c_~ -c_ -1 >= 0 - +c_‚ -c_ƒ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (29 variables, 123 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 123 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = i, h(S3) = i, h(S4) = j, h(S5) = i, h(S6) = i -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[29 dims; 1 constraints] --c_s >= 0 - -Set #1 -[29 dims; 1 constraints] --c_s-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[29 dims; 1 constraints] --c_w >= 0 - -Set #1 -[29 dims; 1 constraints] --c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[29 dims; 1 constraints] --c_ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[29 dims; 1 constraints] --c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] --c_ƒ-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 4 constraints] - -c_s -1 >= 0 - -c_w -1 >= 0 - -c_ -1 >= 0 - -c_ƒ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (29 variables, 119 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 119 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 2 hyperplane(s) found -T(S1): (0, 1, i, j) -loop types (scalar, scalar, loop, loop) - -T(S2): (1, 0, k, i) -loop types (scalar, scalar, loop, loop) - -T(S3): (1, 0, k, i) -loop types (scalar, scalar, loop, loop) - -T(S4): (0, 0, i, j) -loop types (scalar, scalar, loop, loop) - -T(S5): (1, 1, k, i) -loop types (scalar, scalar, loop, loop) - -T(S6): (1, 1, k, i) -loop types (scalar, scalar, loop, loop) - -[pluto] pluto_diamond_tile - After dep 1; num_constraints: 7 - After dep 3; num_constraints: 14 - After dep 7; num_constraints: 32 - After dep 8; num_constraints: 46 - After dep 9; num_constraints: 58 - After dep 10; num_constraints: 76 - After dep 11; num_constraints: 90 - After dep 12; num_constraints: 102 - After dep 14; num_constraints: 109 - After dep 17; num_constraints: 116 - After dep 18; num_constraints: 134 - After dep 19; num_constraints: 148 - After dep 20; num_constraints: 166 - After dep 21; num_constraints: 180 - After dep 24; num_constraints: 191 - After dep 25; num_constraints: 198 - After dep 26; num_constraints: 209 - After dep 27; num_constraints: 216 - After dep 29; num_constraints: 223 - After dep 30; num_constraints: 230 - After all dependences: num constraints: 82, num variables: 29 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 4 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 2 - After dep 8; num_constraints: 14 - After dep 9; num_constraints: 26 - After dep 11; num_constraints: 40 - After dep 12; num_constraints: 52 - After dep 19; num_constraints: 66 - After dep 21; num_constraints: 80 - After dep 25; num_constraints: 87 - After dep 27; num_constraints: 94 - After all dependences: num constraints: 50, num variables: 29 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_s >= 0 - -Set #1 -[29 dims; 1 constraints] -c_s-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_w >= 0 - -Set #1 -[29 dims; 1 constraints] -c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[29 dims; 1 constraints] -c_ƒ >= 0 - -Set #1 -[29 dims; 1 constraints] -c_ƒ-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[29 dims; 4 constraints] - +c_s -1 >= 0 - +c_w -1 >= 0 - +c_ -1 >= 0 - +c_ƒ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (29 variables, 87 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 87 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = j, h(S3) = j, h(S4) = 0, h(S5) = j, h(S6) = j -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (0, 1, i, j, 0) -loop types (scalar, scalar, loop, loop, scalar) - -T(S2): (1, 0, k, i, j) -loop types (scalar, scalar, loop, loop, loop) - -T(S3): (1, 0, k, i, j) -loop types (scalar, scalar, loop, loop, loop) - -T(S4): (0, 0, i, j, 0) -loop types (scalar, scalar, loop, loop, scalar) - -T(S5): (1, 1, k, i, j) -loop types (scalar, scalar, loop, loop, loop) - -T(S6): (1, 1, k, i, j) -loop types (scalar, scalar, loop, loop, loop) - -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 3 -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (0, 1, i, j, 0) -loop types (scalar, scalar, loop, loop, scalar) - -T(S2): (1, 0, k, i, j) -loop types (scalar, scalar, loop, loop, loop) - -T(S3): (1, 0, k, i, j) -loop types (scalar, scalar, loop, loop, loop) - -T(S4): (0, 0, i, j, 0) -loop types (scalar, scalar, loop, loop, scalar) - -T(S5): (1, 1, k, i, j) -loop types (scalar, scalar, loop, loop, loop) - -T(S6): (1, 1, k, i, j) -loop types (scalar, scalar, loop, loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 3 - SCC 5: size: 1: max stmt dim: 2 -[pluto] Cutting between all SCCs -h(S1) = 5, h(S2) = 3, h(S3) = 4, h(S4) = 2, h(S5) = 0, h(S6) = 1 -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied - 2 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 4 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied - 2 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (0, 1, i, j, 0, 5) -loop types (scalar, scalar, loop, loop, scalar, scalar) - -T(S2): (1, 0, k, i, j, 3) -loop types (scalar, scalar, loop, loop, loop, scalar) - -T(S3): (1, 0, k, i, j, 4) -loop types (scalar, scalar, loop, loop, loop, scalar) - -T(S4): (0, 0, i, j, 0, 2) -loop types (scalar, scalar, loop, loop, scalar, scalar) - -T(S5): (1, 1, k, i, j, 0) -loop types (scalar, scalar, loop, loop, loop, scalar) - -T(S6): (1, 1, k, i, j, 1) -loop types (scalar, scalar, loop, loop, loop, scalar) - -[pluto_tile] Outermost tilable bands -(t3, t4, ) with stmts {S1, } -(t3, t4, ) with stmts {S4, } -(t3, t4, ) with stmts {S2, S3, } -(t3, t4, ) with stmts {S5, S6, } -[pluto_tile] Innermost tilable bands -(t3, t4, ) with stmts {S1, } -(t3, t4, ) with stmts {S4, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 4 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: det6 {loop with stmts: S1, } -t5 {loop with stmts: S1, } -t6 {loop with stmts: S4, } -t5 {loop with stmts: S4, } -t7 {loop with stmts: S2, S3, } -t6 {loop with stmts: S2, S3, } -t5 {loop with stmts: S2, S3, } -t7 {loop with stmts: S5, S6, } -t6 {loop with stmts: S5, S6, } -t5 {loop with stmts: S5, S6, } -p 10 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied - 2 dep(s) satisfied -[Pluto] After tiling: -T(S1): (0, 1, i/32, j/32, i, j, 0, 5) -loop types (scalar, scalar, loop, loop, loop, loop, scalar, scalar) - -T(S2): (1, 0, k/32, i/32, k, i, j, 3) -loop types (scalar, scalar, loop, loop, loop, loop, loop, scalar) - -T(S3): (1, 0, k/32, i/32, k, i, j, 4) -loop types (scalar, scalar, loop, loop, loop, loop, loop, scalar) - -T(S4): (0, 0, i/32, j/32, i, j, 0, 2) -loop types (scalar, scalar, loop, loop, loop, loop, scalar, scalar) - -T(S5): (1, 1, k/32, i/32, k, i, j, 0) -loop types (scalar, scalar, loop, loop, loop, loop, loop, scalar) - -T(S6): (1, 1, k/32, i/32, k, i, j, 1) -loop types (scalar, scalar, loop, loop, loop, loop, loop, scalar) - -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 16 -[pluto-intra-tile-opt] Score for loop 1: -28 -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(5,8), S2(5,8), S3(5,8), S4(5,8), S5(5,8), S6(5,8), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to 2mm.split12.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.002511s -[pluto] Auto-transformation time: 0.069755s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.006220s -[pluto] Code generation time: 0.028156s -[pluto] Other/Misc time: 0.192598s -[pluto] Total time: 0.293020s -[pluto] All times: 0.002511 0.069755 0.028156 0.192598 diff --git a/example/polybench/split-and-merge/2mm/2mm.split2.c b/example/polybench/split-and-merge/2mm/2mm.split2.c deleted file mode 100644 index b73b0833..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split2.c +++ /dev/null @@ -1,166 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NJ,nj)) -{ - int i, j, k; - -#pragma scop - /* D := alpha*A*B*C + beta*D */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NJ; j++) - { - tmp[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NK; ++k) { - tmp[i][j] += alpha * A[i][k] * B[k][j]; - } - } - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NL; j++) - { - D[i][j] *= beta; - for (k = 0; k < _PB_NJ; ++k) { - S[k] = tmp[i][k] * C[k][j]; - D[i][j] += S[k]; - } - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,NJ,nj); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split2.pluto.c b/example/polybench/split-and-merge/2mm/2mm.split2.pluto.c deleted file mode 100644 index cdb378c8..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split2.pluto.c +++ /dev/null @@ -1,276 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 2mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "2mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, - DATA_TYPE *alpha, - DATA_TYPE *beta, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - *alpha = 1.5; - *beta = 1.2; - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / ni; - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) (i*(j+1) % nj) / nj; - for (i = 0; i < nj; i++) - for (j = 0; j < nl; j++) - C[i][j] = (DATA_TYPE) ((i*(j+3)+1) % nl) / nl; - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) (i*(j+2) % nk) / nk; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("D"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, D[i][j]); - } - POLYBENCH_DUMP_END("D"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_2mm(int ni, int nj, int nk, int nl, - DATA_TYPE alpha, - DATA_TYPE beta, - DATA_TYPE POLYBENCH_2D(tmp,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(D,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NJ,nj)) -{ - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8; - register int lbv, ubv; -if (_PB_NI >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - if ((_PB_NJ >= 0) && (_PB_NL >= 0)) { - for (t3=0;t3<=floord(_PB_NJ+_PB_NL-1,32);t3++) { - if ((_PB_NJ >= _PB_NL+1) && (t3 <= floord(_PB_NL-1,32)) && (t3 >= ceild(_PB_NL-31,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=_PB_NL-1;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - for (t5=_PB_NL;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ >= _PB_NL+1) && (t3 <= floord(_PB_NL-32,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=32*t3+31;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ <= _PB_NL-1) && (t3 <= floord(_PB_NJ-1,32)) && (t3 >= ceild(_PB_NJ-31,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=_PB_NJ-1;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - for (t5=_PB_NJ;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - if ((_PB_NJ == _PB_NL) && (t3 <= floord(_PB_NJ-1,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((_PB_NJ <= _PB_NL-1) && (t3 <= floord(_PB_NJ-32,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=32*t3+31;t5++) { - D[t4][t5] *= beta;; - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((t3 <= floord(_PB_NJ-1,32)) && (t3 >= ceild(_PB_NL,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - if ((t3 <= floord(_PB_NL-1,32)) && (t3 >= ceild(_PB_NJ,32))) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - if (_PB_NL <= -1) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - tmp[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } - if (_PB_NJ <= -1) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - D[t4][t5] *= beta;; - } - } - } - } - } - for (t2=0;t2<=floord(_PB_NJ-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NI-1,32);t3++) { - if ((_PB_NK >= 1) && (_PB_NL >= 1)) { - for (t4=32*t2;t4<=min(_PB_NJ-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NI-1,32*t3+31);t5++) { - for (t7=0;t7<=_PB_NK-1;t7++) { - tmp[t5][t4] += alpha * A[t5][t7] * B[t7][t4];; - } - for (t7=0;t7<=_PB_NL-1;t7++) { - S[t4] = tmp[t5][t4] * C[t4][t7];; - D[t5][t7] += S[t4];; - } - } - } - } - if ((_PB_NK >= 1) && (_PB_NL <= 0)) { - for (t4=32*t2;t4<=min(_PB_NJ-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NI-1,32*t3+31);t5++) { - for (t7=0;t7<=_PB_NK-1;t7++) { - tmp[t5][t4] += alpha * A[t5][t7] * B[t7][t4];; - } - } - } - } - if ((_PB_NK <= 0) && (_PB_NL >= 1)) { - for (t4=32*t2;t4<=min(_PB_NJ-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NI-1,32*t3+31);t5++) { - for (t7=0;t7<=_PB_NL-1;t7++) { - S[t4] = tmp[t5][t4] * C[t4][t7];; - D[t5][t7] += S[t4];; - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - - /* Variable declaration/allocation. */ - DATA_TYPE alpha; - DATA_TYPE beta; - POLYBENCH_2D_ARRAY_DECL(tmp,DATA_TYPE,NI,NJ,ni,nj); - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,NI,NK,ni,nk); - POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,NK,NJ,nk,nj); - POLYBENCH_2D_ARRAY_DECL(C,DATA_TYPE,NJ,NL,nj,nl); - POLYBENCH_2D_ARRAY_DECL(D,DATA_TYPE,NI,NL,ni,nl); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,NJ,nj); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, &alpha, &beta, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_2mm (ni, nj, nk, nl, - alpha, beta, - POLYBENCH_ARRAY(tmp), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(D))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(tmp); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - - return 0; -} diff --git a/example/polybench/split-and-merge/2mm/2mm.split2.pluto.cloog b/example/polybench/split-and-merge/2mm/2mm.split2.pluto.cloog deleted file mode 100644 index bfccac78..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split2.pluto.cloog +++ /dev/null @@ -1,157 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 6 - -1 -_PB_NI _PB_NJ _PB_NK _PB_NL - -# Number of statements -5 - -# S1 (tmp[i][j] = SCALAR_VAL(0.0);) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 1 0 0 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S2 (tmp[i][j] += alpha * A[i][k] * B[k][j];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 31 -0 0 0 - -# S3 (D[i][j] *= beta;) -11 10 -1 0 0 1 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 31 -0 0 0 - -# S4 (S[k] = tmp[i][k] * C[k][j];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 31 -0 0 0 - -# S5 (D[i][j] += S[k];) -13 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -5 - -# T(S1) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -4 - -# T(S2) -8 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -3 - -# T(S3) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 - -# T(S4) -8 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S5) -8 19 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 - -# we will set the scattering dimension names -8 -t1 t2 t3 t4 t5 t6 t7 t8 diff --git a/example/polybench/split-and-merge/2mm/2mm.split2.pluto.log b/example/polybench/split-and-merge/2mm/2mm.split2.pluto.log deleted file mode 100644 index e3d5db98..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.split2.pluto.log +++ /dev/null @@ -1,2174 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 6 0 0 0 4 - -# Parameters are provided -1 - -_PB_NI _PB_NJ _PB_NK _PB_NL - - -# Number of statements -5 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -tmp[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -7 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 2.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -1 10 1 3 0 4 -# e/i| Arr| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == alpha - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 10 ## Arr == A - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == B - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -tmp[i][j] += alpha * A[i][k] * B[k][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -6 8 2 0 0 4 -# e/i| i j |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -5 13 5 2 0 4 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 3.3 Access -READ -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -WRITE -3 11 3 2 0 4 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 ## [2] == j - -READ -1 9 1 2 0 4 -# e/i| Arr| i j |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 14 ## Arr == beta - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -D[i][j] *= beta; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 15 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == tmp - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == k - -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 16 ## Arr == C - 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -S[k] = tmp[i][k] * C[k][j]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -9 9 3 0 0 4 -# e/i| i j k |_PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -7 16 7 3 0 4 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 5.3 Access -READ -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -WRITE -3 12 3 3 0 4 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 13 ## Arr == D - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -READ -2 11 2 3 0 4 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 15 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == k - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -D[i][j] += S[k]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -16 -# Mapping array-identifiers/array-names -1 i -2 _PB_NI -3 j -4 _PB_NJ -5 tmp -6 SCALAR_VAL -7 k -8 _PB_NK -9 alpha -10 A -11 B -12 _PB_NL -13 D -14 beta -15 S -16 C - - - -# File name -(null) -# Starting line and column -89 0 -# Ending line and column -107 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 4 -Parameters: _PB_NI _PB_NJ _PB_NK _PB_NL -S1 "tmp[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S2 "tmp[i][j] += alpha * A[i][k] * B[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][j] -alpha[0] -A[i][k] -B[k][j] -Write accesses -tmp[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S3 "D[i][j] *= beta;" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[6 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -D[i][j] -beta[0] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S4 "S[k] = tmp[i][k] * C[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -tmp[i][k] -C[k][j] -Write accesses -S[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S5 "D[i][j] += S[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[7 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S5): (1, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -D[i][j] -S[k] -Write accesses -D[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S2 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 2 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 3 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 4 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 5 from S1 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 6 from S5 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 7 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 8 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 9 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 11 from S5 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 12 from S5 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 13 from S3 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 14 from S5 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 15 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 16 from S3 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: D -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S4 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 18 from S4 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 19 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[9 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 20 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: tmp -Dependence polyhedron -Set #1 -[10 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S5): (1, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 5 -[pluto] Total number of loops: 13 -[pluto] Number of deps: 20 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 4 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 3 4 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 2: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[4 dims; 4 constraints] -c_l-1 >= 0 -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 6 dep(s) satisfied -h(S1) = 0, h(S2) = 1, h(S3) = 0, h(S4) = 1, h(S5) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 12 constraints - For dep 1; num_constraints: 14 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 2; num_constraints: 18 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 3; num_constraints: 14 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 4; num_constraints: 12 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 5; num_constraints: 14 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 6; num_constraints: 7 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 7; num_constraints: 7 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 8; num_constraints: 14 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 9; num_constraints: 14 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 10; num_constraints: 7 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_v) from 11 constraints - For dep 11; num_constraints: 18 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_v) from 12 constraints - For dep 12; num_constraints: 14 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 13; num_constraints: 14 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 14; num_constraints: 7 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 15; num_constraints: 7 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 16; num_constraints: 14 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 9 constraints - For dep 17; num_constraints: 11 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 18; num_constraints: 7 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 12 constraints - For dep 19; num_constraints: 14 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 9 constraints - For dep 20; num_constraints: 7 - After dep 1; num_constraints: 14 - After dep 2; num_constraints: 32 - After dep 3; num_constraints: 46 - After dep 4; num_constraints: 58 - After dep 6; num_constraints: 65 - After dep 7; num_constraints: 72 - After dep 10; num_constraints: 79 - After dep 11; num_constraints: 97 - After dep 12; num_constraints: 111 - After dep 14; num_constraints: 118 - After dep 15; num_constraints: 125 - After dep 17; num_constraints: 136 - After dep 18; num_constraints: 143 - After dep 20; num_constraints: 150 - After all dependences: num constraints: 54, num variables: 25 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_n >= 0 - -Set #1 -[25 dims; 1 constraints] -c_o >= 0 - -Set #1 -[25 dims; 1 constraints] -c_n+c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[25 dims; 1 constraints] -c_r >= 0 - -Set #1 -[25 dims; 1 constraints] -c_s >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] -c_r+c_s-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_v >= 0 - -Set #1 -[25 dims; 1 constraints] -c_w >= 0 - -Set #1 -[25 dims; 1 constraints] -c_v+c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 3 disjuncts -Set #1 -[25 dims; 1 constraints] -c_z >= 0 - -Set #1 -[25 dims; 1 constraints] --c_{ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_| >= 0 - -Set #1 -[25 dims; 1 constraints] -c_z-c_{+c_|-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 3 disjuncts -Set #1 -[25 dims; 1 constraints] -c_~ >= 0 - -Set #1 -[25 dims; 1 constraints] --c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_~-c_+c_€-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 5 constraints] - +c_n +c_o -1 >= 0 - +c_r +c_s -c_t -1 >= 0 - +c_v +c_w -1 >= 0 - +c_z -c_{ +c_| -1 >= 0 - +c_~ -c_ +c_€ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (25 variables, 89 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 89 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = i, h(S2) = j, h(S3) = i, h(S4) = k, h(S5) = k -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_o >= 0 - -Set #1 -[25 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[25 dims; 1 constraints] -c_r >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] -c_r-c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_w >= 0 - -Set #1 -[25 dims; 1 constraints] -c_w-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[25 dims; 1 constraints] --c_{ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_z >= 0 - -Set #1 -[25 dims; 1 constraints] -c_z-c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[25 dims; 1 constraints] --c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_~ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_~-c_-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 5 constraints] - +c_o -1 >= 0 - +c_r -c_t -1 >= 0 - +c_w -1 >= 0 - +c_z -c_{ -1 >= 0 - +c_~ -c_ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (25 variables, 89 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 89 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = i, h(S3) = j, h(S4) = i, h(S5) = i -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[25 dims; 1 constraints] --c_{ >= 0 - -Set #1 -[25 dims; 1 constraints] --c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[25 dims; 1 constraints] --c_ >= 0 - -Set #1 -[25 dims; 1 constraints] --c_-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 3 constraints] - -c_t -1 >= 0 - -c_{ -1 >= 0 - -c_ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (25 variables, 85 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 85 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 2 hyperplane(s) found -T(S1): (0, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, j, i) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, k, i) -loop types (scalar, loop, loop) - -T(S5): (1, k, i) -loop types (scalar, loop, loop) - -[pluto] pluto_diamond_tile - After dep 1; num_constraints: 14 - After dep 2; num_constraints: 32 - After dep 3; num_constraints: 46 - After dep 4; num_constraints: 58 - After dep 6; num_constraints: 65 - After dep 7; num_constraints: 72 - After dep 10; num_constraints: 79 - After dep 11; num_constraints: 97 - After dep 12; num_constraints: 111 - After dep 14; num_constraints: 118 - After dep 15; num_constraints: 125 - After dep 17; num_constraints: 136 - After dep 18; num_constraints: 143 - After dep 20; num_constraints: 150 - After all dependences: num constraints: 54, num variables: 25 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 1 - After dep 1; num_constraints: 14 - After dep 3; num_constraints: 28 - After dep 4; num_constraints: 40 - After dep 7; num_constraints: 47 - After dep 10; num_constraints: 54 - After dep 12; num_constraints: 68 - After dep 18; num_constraints: 75 - After dep 20; num_constraints: 82 - After all dependences: num constraints: 38, num variables: 25 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[25 dims; 1 constraints] --c_t >= 0 - -Set #1 -[25 dims; 1 constraints] --c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 3 constraints] - -c_t -1 >= 0 - +c_{ -1 >= 0 - +c_ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (25 variables, 69 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 69 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (0, i, j) -loop types (scalar, loop, loop) - -T(S2): (1, j, i) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, k, i) -loop types (scalar, loop, loop) - -T(S5): (1, k, i) -loop types (scalar, loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 4 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 2: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 1 and id 2 -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 1 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 0, h(S4) = 1, h(S5) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 2 - After dep 3; num_constraints: 14 - After dep 4; num_constraints: 26 - After dep 7; num_constraints: 33 - After dep 10; num_constraints: 40 - After dep 12; num_constraints: 54 - After dep 18; num_constraints: 61 - After dep 20; num_constraints: 68 - After all dependences: num constraints: 30, num variables: 25 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_t >= 0 - -Set #1 -[25 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_{-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[25 dims; 1 constraints] -c_ >= 0 - -Set #1 -[25 dims; 1 constraints] -c_-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -linear independence constraints -[25 dims; 3 constraints] - +c_t -1 >= 0 - +c_{ -1 >= 0 - +c_ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (25 variables, 61 constraints) -[pluto] pluto_constraints_lexmin_isl (23 variables, 61 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = k, h(S3) = 0, h(S4) = j, h(S5) = j -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (0, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (1, j, i, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S4): (1, k, i, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -T(S5): (1, k, i, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 3 -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (0, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (1, j, i, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S4): (1, k, i, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -T(S5): (1, k, i, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 2 -[pluto] Cutting between all SCCs -h(S1) = 4, h(S2) = 3, h(S3) = 2, h(S4) = 0, h(S5) = 1 -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 4 satisfied - 1 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 1 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -t5 {loop with stmts: S1, S3, } -t4 {loop with stmts: S1, S3, } -t7 {loop with stmts: S2, } -t7 {loop with stmts: S4, S5, } -t5 {loop with stmts: S2, S4, S5, } -t4 {loop with stmts: S2, S4, S5, } -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 4 satisfied - 1 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (0, i, j, 1, 0, 4) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S2): (1, j, i, 0, k, 3) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S3): (0, i, j, 0, 0, 2) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S4): (1, k, i, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S5): (1, k, i, 1, j, 1) -loop types (scalar, loop, loop, scalar, loop, scalar) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S1, S3, } -(t2, t3, ) with stmts {S2, S4, S5, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S1, S3, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 1 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 4 satisfied - 1 dep(s) satisfied -[Pluto] After tiling: -T(S1): (0, i/32, j/32, i, j, 1, 0, 4) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S2): (1, j/32, i/32, j, i, 0, k, 3) -loop types (scalar, loop, loop, loop, loop, scalar, loop, scalar) - -T(S3): (0, i/32, j/32, i, j, 0, 0, 2) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S4): (1, k/32, i/32, k, i, 1, j, 0) -loop types (scalar, loop, loop, loop, loop, scalar, loop, scalar) - -T(S5): (1, k/32, i/32, k, i, 1, j, 1) -loop types (scalar, loop, loop, loop, loop, scalar, loop, scalar) - -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 36 -[pluto-intra-tile-opt] Score for loop 1: -88 -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(4,8), S2(4,8), S3(4,8), S4(4,8), S5(4,8), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to 2mm.split2.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.002471s -[pluto] Auto-transformation time: 0.039278s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.004036s -[pluto] Code generation time: 0.113657s -[pluto] Other/Misc time: 0.125020s -[pluto] Total time: 0.280426s -[pluto] All times: 0.002471 0.039278 0.113657 0.125020 diff --git a/example/polybench/split-and-merge/2mm/2mm.splittable.mlir b/example/polybench/split-and-merge/2mm/2mm.splittable.mlir deleted file mode 100644 index 86614902..00000000 --- a/example/polybench/split-and-merge/2mm/2mm.splittable.mlir +++ /dev/null @@ -1,284 +0,0 @@ -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("D\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<1600x1800xf64> - %3 = memref.alloc() : memref<1600x2200xf64> - %4 = memref.alloc() : memref<2200x1800xf64> - %5 = memref.alloc() : memref<1800x2400xf64> - %6 = memref.alloc() : memref<1600x2400xf64> - %7 = memref.cast %0 : memref<1xf64> to memref - %8 = memref.cast %1 : memref<1xf64> to memref - %9 = memref.cast %3 : memref<1600x2200xf64> to memref - %10 = memref.cast %4 : memref<2200x1800xf64> to memref - %11 = memref.cast %5 : memref<1800x2400xf64> to memref - %12 = memref.cast %6 : memref<1600x2400xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %7, %8, %9, %10, %11, %12) : (i32, i32, i32, i32, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %13 = affine.load %0[0] : memref<1xf64> - %14 = affine.load %1[0] : memref<1xf64> - %15 = memref.cast %2 : memref<1600x1800xf64> to memref - call @kernel_2mm(%c1600_i32, %c1800_i32, %c2200_i32, %c2400_i32, %13, %14, %15, %9, %10, %11, %12) : (i32, i32, i32, i32, f64, f64, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %16 = cmpi sgt, %arg0, %c42_i32 : i32 - %17 = scf.if %16 -> (i1) { - %18 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %19 = llvm.load %18 : !llvm.ptr> - %20 = llvm.mlir.addressof @str0 : !llvm.ptr> - %21 = llvm.getelementptr %20[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %22 = llvm.call @strcmp(%19, %21) : (!llvm.ptr, !llvm.ptr) -> i32 - %23 = trunci %22 : i32 to i1 - %24 = xor %23, %true : i1 - scf.yield %24 : i1 - } else { - scf.yield %false : i1 - } - scf.if %17 { - call @print_array(%c1600_i32, %c2400_i32, %12) : (i32, i32, memref) -> () - } - memref.dealloc %2 : memref<1600x1800xf64> - memref.dealloc %3 : memref<1600x2200xf64> - memref.dealloc %4 : memref<2200x1800xf64> - memref.dealloc %5 : memref<1800x2400xf64> - memref.dealloc %6 : memref<1600x2400xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: memref, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref) { - %cst = constant 1.500000e+00 : f64 - %cst_0 = constant 1.200000e+00 : f64 - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - affine.store %cst, %arg4[0] : memref - affine.store %cst_0, %arg5[0] : memref - %0:2 = scf.while (%arg10 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg2 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = muli %arg11, %arg12 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg0 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg6[%4, %7] : memref - %14 = addi %arg12, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg10 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg12 = %c0 to %5 step %c1 iter_args(%arg13 = %c0_i32) -> (i32) { - %8 = index_cast %arg13 : i32 to index - %9 = addi %arg13, %c1_i32 : i32 - %10 = muli %arg11, %9 : i32 - %11 = remi_signed %10, %arg1 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg1 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg7[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg11, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg10 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg10, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg10 : i32, i32 - } do { - ^bb0(%arg10: i32, %arg11: i32): // no predecessors - %4 = index_cast %arg11 : i32 to index - %5 = scf.while (%arg12 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg12, %arg3 : i32 - scf.condition(%7) %arg12 : i32 - } do { - ^bb0(%arg12: i32): // no predecessors - %7 = index_cast %arg12 : i32 to index - %8 = addi %arg12, %c3_i32 : i32 - %9 = muli %arg11, %8 : i32 - %10 = addi %9, %c1_i32 : i32 - %11 = remi_signed %10, %arg3 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = sitofp %arg3 : i32 to f64 - %14 = divf %12, %13 : f64 - memref.store %14, %arg8[%4, %7] : memref - %15 = addi %arg12, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg11, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg10 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg10, %arg0 : i32 - scf.condition(%4) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg3 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c2_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg2 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = sitofp %arg2 : i32 to f64 - %13 = divf %11, %12 : f64 - memref.store %13, %arg9[%4, %7] : memref - %14 = addi %arg11, %c1_i32 : i32 - scf.yield %14 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_2mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: f64, %arg5: f64, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg0 : i32 to index - affine.for %arg11 = 0 to %3 { - affine.for %arg12 = 0 to %0 { - affine.store %cst, %arg6[%arg11, %arg12] : memref - affine.for %arg13 = 0 to %1 { - %4 = affine.load %arg7[%arg11, %arg13] : memref - %5 = mulf %arg4, %4 {scop.splittable = 1 : index} : f64 - %6 = affine.load %arg8[%arg13, %arg12] : memref - %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 - %8 = affine.load %arg6[%arg11, %arg12] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg6[%arg11, %arg12] : memref - } - } - } - affine.for %arg11 = 0 to %3 { - affine.for %arg12 = 0 to %2 { - %4 = affine.load %arg10[%arg11, %arg12] : memref - %5 = mulf %4, %arg5 : f64 - affine.store %5, %arg10[%arg11, %arg12] : memref - affine.for %arg13 = 0 to %0 { - %6 = affine.load %arg6[%arg11, %arg13] : memref - %7 = affine.load %arg9[%arg13, %arg12] : memref - %8 = mulf %6, %7 {scop.splittable = 2 : index} : f64 - %9 = affine.load %arg10[%arg11, %arg12] : memref - %10 = addf %9, %8 : f64 - affine.store %10, %arg10[%arg11, %arg12] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.par.log b/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.par.log new file mode 100644 index 00000000..0a79c320 --- /dev/null +++ b/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.par.log @@ -0,0 +1,820 @@ +t8 {loop with stmts: S2, S3, } +t7 {loop with stmts: S2, S3, } +t6 {loop with stmts: S2, S3, } +t8 {loop with stmts: S5, S6, } +t7 {loop with stmts: S5, S6, } +t6 {loop with stmts: S5, S6, } +t8 {loop with stmts: S8, S9, } +t7 {loop with stmts: S8, S9, } +t6 {loop with stmts: S8, S9, } +Pluto schedule elapsed time: 4.154534e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 7 0 0 0 5 + +# Parameters are provided +1 + +P0 P1 P2 P3 P4 + + +# Number of statements +9 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 8 ## c9 == 8 + +# ---------------------------------------------- 1.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S0(i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 1 0 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0+fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c7 == i0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 6 ## c9 == 6 + +# ---------------------------------------------- 2.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S1(i2, i1, i0) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 1 0 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0+fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c7 == i0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 7 ## c9 == 7 + +# ---------------------------------------------- 3.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S2(i0, i1, i2) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 5 ## c9 == 5 + +# ---------------------------------------------- 4.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S3(i0, i1) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 -1 ## -i2+P4-1 >= 0 + 1 -32 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk1-i2+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0+fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i2 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 3 ## c9 == 3 + +# ---------------------------------------------- 5.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 6 ## Arr == A6 + +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 7 ## Arr == A7 + +WRITE +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S4(i2, i1, i0) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 -1 ## -i2+P4-1 >= 0 + 1 -32 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk1-i2+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0+fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i2 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## c9 == 4 + +# ---------------------------------------------- 6.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +READ +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S5(i0, i1, i2) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 2 ## c9 == 2 + +# ---------------------------------------------- 7.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 8 ## Arr == A8 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S6(i0, i1) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 0 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0+fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c7 == i0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 8.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +WRITE +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S7(i2, i1, i0) + + +# =============================================== Statement 9 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 9.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 0 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 9.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0+fk1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c7 == i0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c9 == 1 + +# ---------------------------------------------- 9.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 8 ## Arr == A8 + +READ +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 8 ## Arr == A8 + +# ---------------------------------------------- 9.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S8(i0, i1, i2) + + +# =============================================== Extensions + +# Number of arrays +8 +# Mapping array-identifiers/array-names +8 A8 +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 +6 A6 +7 A7 + + + +kernel_3mm + + +t1 t2 t3 t4 t5 t6 t7 t8 t9 + + + +# Number of loops +6 +# =========================================== +# Loop number 1 +# Iterator name +t4 +# Number of stmts +1 +# Statement identifiers +1 +# Private variables +t5,t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t4 +# Number of stmts +1 +# Statement identifiers +4 +# Private variables +t5,t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 3 +# Iterator name +t4 +# Number of stmts +1 +# Statement identifiers +7 +# Private variables +t5,t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 4 +# Iterator name +t5 +# Number of stmts +2 +# Statement identifiers +2 +3 +# Private variables +t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 5 +# Iterator name +t5 +# Number of stmts +2 +# Statement identifiers +5 +6 +# Private variables +t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 6 +# Iterator name +t5 +# Number of stmts +2 +# Statement identifiers +8 +9 +# Private variables +t6,t7,t8,t9 +# Directive +1 + + + + +[CLooG] INFO: 3 domains have been blocked. +[CLooG] INFO: 4 dimensions (over 9) are scalar. +if (P3 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t5,t6,t7,t8,t9) + for (t4=lbp;t4<=ubp;t4++) { + for (t5=0;t5<=floord(P3-1,32);t5++) { + for (t6=32*t4;t6<=min(P0-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P3-1,32*t5+31);t7++) { + S6(t6, t7) + } + } + } + } +} +if (P3 >= 1) { + lbp=0; + ubp=floord(P1-1,32); +#pragma omp parallel for private(lbv,ubv,t5,t6,t7,t8,t9) + for (t4=lbp;t4<=ubp;t4++) { + for (t5=0;t5<=floord(P3-1,32);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P3-1,32*t5+31);t7++) { + S3(t6, t7) + } + } + } + } +} +if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t5,t6,t7,t8,t9) + for (t4=lbp;t4<=ubp;t4++) { + for (t5=0;t5<=floord(P1-1,32);t5++) { + for (t6=32*t4;t6<=min(P0-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P1-1,32*t5+31);t7++) { + S0(t6, t7) + } + } + } + } +} +if ((P0 >= 1) && (P1 >= 1) && (P2 >= 1)) { + for (t4=0;t4<=floord(P0+P2-2,32);t4++) { + lbp=max(0,ceild(32*t4-P2+1,32)); + ubp=min(floord(P0-1,32),t4); +#pragma omp parallel for private(lbv,ubv,t6,t7,t8,t9) + for (t5=lbp;t5<=ubp;t5++) { + for (t6=32*t4-32*t5;t6<=min(P2-1,32*t4-32*t5+31);t6++) { + for (t7=32*t5;t7<=min(P0-1,32*t5+31);t7++) { + for (t8=0;t8<=P1-1;t8++) { + S1(t6, t8, t7) + S2(t7, t8, t6) + } + } + } + } + } +} +if ((P1 >= 1) && (P3 >= 1) && (P4 >= 1)) { + for (t4=0;t4<=floord(P1+P4-2,32);t4++) { + lbp=max(0,ceild(32*t4-P1+1,32)); + ubp=min(floord(P4-1,32),t4); +#pragma omp parallel for private(lbv,ubv,t6,t7,t8,t9) + for (t5=lbp;t5<=ubp;t5++) { + for (t6=32*t4-32*t5;t6<=min(P1-1,32*t4-32*t5+31);t6++) { + for (t7=32*t5;t7<=min(P4-1,32*t5+31);t7++) { + for (t8=0;t8<=P3-1;t8++) { + S4(t7, t8, t6) + S5(t6, t8, t7) + } + } + } + } + } +} +if ((P0 >= 1) && (P1 >= 1) && (P3 >= 1)) { + for (t4=0;t4<=floord(P0+P1-2,32);t4++) { + lbp=max(0,ceild(32*t4-P1+1,32)); + ubp=min(floord(P0-1,32),t4); +#pragma omp parallel for private(lbv,ubv,t6,t7,t8,t9) + for (t5=lbp;t5<=ubp;t5++) { + for (t6=32*t4-32*t5;t6<=min(P1-1,32*t4-32*t5+31);t6++) { + for (t7=32*t5;t7<=min(P0-1,32*t5+31);t7++) { + for (t8=0;t8<=P3-1;t8++) { + S7(t6, t8, t7) + S8(t7, t8, t6) + } + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.5161 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0003 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::AnnotateHeuristicPass + 0.0004 ( 0.1%) 0.0004 ( 0.1%) {anonymous}::ScopStmtSplitPass + 0.0002 ( 0.0%) 0.0002 ( 0.0%) {anonymous}::UnifyScratchpadPass + 0.0009 ( 0.2%) 0.0009 ( 0.2%) Canonicalizer + 0.0004 ( 0.1%) 0.0003 ( 0.1%) 'func' Pipeline + 0.0002 ( 0.0%) 0.0002 ( 0.0%) {anonymous}::RegToMemPass + 0.0002 ( 0.0%) 0.0002 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0003 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.5084 ( 98.5%) 0.5084 ( 98.5%) {anonymous}::PlutoTransformPass + 0.0010 ( 0.2%) 0.0010 ( 0.2%) Canonicalizer + 0.0029 ( 0.6%) 0.0029 ( 0.6%) Inliner + 0.0023 ( 0.4%) 0.0023 ( 0.4%) 'func' Pipeline + 0.0023 ( 0.4%) 0.0023 ( 0.4%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0012 ( 0.2%) 0.0012 ( 0.2%) Canonicalizer + 0.5161 (100.0%) 0.5161 (100.0%) Total diff --git a/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.par.mlir b/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.par.mlir index 6572575c..d4b5c05b 100644 --- a/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.par.mlir +++ b/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.par.mlir @@ -10,6 +10,14 @@ #map9 = affine_map<(d0) -> (75, d0 + 1)> #map10 = affine_map<(d0, d1) -> (1800, d0 * 32 - d1 * 32 + 32)> #map11 = affine_map<(d0) -> (2400, d0 * 32 + 32)> +#map12 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map13 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map14 = affine_map<()[s0, s1] -> ((s0 + s1 - 2) floordiv 32 + 1)> +#map15 = affine_map<(d0)[s0] -> (0, (d0 * 32 - s0 + 1) ceildiv 32)> +#map16 = affine_map<(d0)[s0] -> ((s0 - 1) floordiv 32 + 1, d0 + 1)> +#map17 = affine_map<(d0, d1)[s0] -> (s0, d0 * 32 - d1 * 32 + 32)> +#set0 = affine_set<()[s0] : (s0 - 1 >= 0)> +#set1 = affine_set<()[s0, s1, s2] : (s0 - 1 >= 0, s1 - 1 >= 0, s2 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -262,61 +270,106 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { + func @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref, %arg13: memref, %arg14: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = index_cast %arg2 : i32 to index + %3 = index_cast %arg3 : i32 to index + %4 = index_cast %arg4 : i32 to index + affine.if #set0()[%3] { + affine.for %arg15 = 0 to #map12()[%0] { + affine.for %arg16 = 0 to #map12()[%3] { + affine.for %arg17 = #map0(%arg15) to min #map13(%arg15)[%0] { + affine.for %arg18 = #map0(%arg16) to min #map13(%arg16)[%3] { + affine.store %cst, %arg11[%arg17, %arg18] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set0()[%3] { + affine.for %arg15 = 0 to #map12()[%1] { + affine.for %arg16 = 0 to #map12()[%3] { + affine.for %arg17 = #map0(%arg15) to min #map13(%arg15)[%1] { + affine.for %arg18 = #map0(%arg16) to min #map13(%arg16)[%3] { + affine.store %cst, %arg8[%arg17, %arg18] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set0()[%1] { + affine.for %arg15 = 0 to #map12()[%0] { + affine.for %arg16 = 0 to #map12()[%1] { + affine.for %arg17 = #map0(%arg15) to min #map13(%arg15)[%0] { + affine.for %arg18 = #map0(%arg16) to min #map13(%arg16)[%1] { + affine.store %cst, %arg5[%arg17, %arg18] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set1()[%0, %1, %2] { + affine.for %arg15 = 0 to #map14()[%0, %2] { + affine.for %arg16 = max #map15(%arg15)[%2] to min #map16(%arg15)[%0] { + affine.for %arg17 = #map6(%arg15, %arg16) to min #map17(%arg15, %arg16)[%2] { + affine.for %arg18 = #map0(%arg16) to min #map13(%arg16)[%0] { + affine.for %arg19 = 0 to %1 { + %5 = affine.load %arg6[%arg18, %arg17] : memref + %6 = affine.load %arg7[%arg17, %arg19] : memref + %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 + affine.store %7, %arg12[%arg17] : memref + %8 = affine.load %arg5[%arg18, %arg19] : memref + %9 = affine.load %arg12[%arg17] : memref + %10 = addf %8, %9 : f64 + affine.store %10, %arg5[%arg18, %arg19] : memref + } + } + } + } {scop.parallelizable} + } + } + affine.if #set1()[%1, %3, %4] { + affine.for %arg15 = 0 to #map14()[%1, %4] { + affine.for %arg16 = max #map15(%arg15)[%1] to min #map16(%arg15)[%4] { + affine.for %arg17 = #map6(%arg15, %arg16) to min #map17(%arg15, %arg16)[%1] { + affine.for %arg18 = #map0(%arg16) to min #map13(%arg16)[%4] { + affine.for %arg19 = 0 to %3 { + %5 = affine.load %arg9[%arg17, %arg18] : memref + %6 = affine.load %arg10[%arg18, %arg19] : memref + %7 = mulf %5, %6 {scop.splittable = 1 : index} : f64 + affine.store %7, %arg12[%arg18] : memref + %8 = affine.load %arg8[%arg17, %arg19] : memref + %9 = affine.load %arg12[%arg18] : memref + %10 = addf %8, %9 : f64 + affine.store %10, %arg8[%arg17, %arg19] : memref + } + } + } + } {scop.parallelizable} + } + } + affine.if #set1()[%0, %1, %3] { + affine.for %arg15 = 0 to #map14()[%0, %1] { + affine.for %arg16 = max #map15(%arg15)[%1] to min #map16(%arg15)[%0] { + affine.for %arg17 = #map6(%arg15, %arg16) to min #map17(%arg15, %arg16)[%1] { + affine.for %arg18 = #map0(%arg16) to min #map13(%arg16)[%0] { + affine.for %arg19 = 0 to %3 { + %5 = affine.load %arg5[%arg18, %arg17] : memref + %6 = affine.load %arg8[%arg17, %arg19] : memref + %7 = mulf %5, %6 {scop.splittable = 2 : index} : f64 + affine.store %7, %arg12[%arg17] : memref + %8 = affine.load %arg11[%arg18, %arg19] : memref + %9 = affine.load %arg12[%arg17] : memref + %10 = addf %8, %9 : f64 + affine.store %10, %arg11[%arg18, %arg19] : memref + } + } + } + } {scop.parallelizable} + } + } return } func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { diff --git a/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.seq.log b/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.seq.log new file mode 100644 index 00000000..a26fb393 --- /dev/null +++ b/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.seq.log @@ -0,0 +1,722 @@ +t8 {loop with stmts: S2, S3, } +t7 {loop with stmts: S2, S3, } +t6 {loop with stmts: S2, S3, } +t8 {loop with stmts: S5, S6, } +t7 {loop with stmts: S5, S6, } +t6 {loop with stmts: S5, S6, } +t8 {loop with stmts: S8, S9, } +t7 {loop with stmts: S8, S9, } +t6 {loop with stmts: S8, S9, } +Pluto schedule elapsed time: 4.153244e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 7 0 0 0 5 + +# Parameters are provided +1 + +P0 P1 P2 P3 P4 + + +# Number of statements +9 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 8 ## c9 == 8 + +# ---------------------------------------------- 1.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S0(i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 1 0 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c7 == i0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 6 ## c9 == 6 + +# ---------------------------------------------- 2.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S1(i2, i1, i0) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 1 0 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c7 == i0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 7 ## c9 == 7 + +# ---------------------------------------------- 3.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S2(i0, i1, i2) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 5 ## c9 == 5 + +# ---------------------------------------------- 4.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S3(i0, i1) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 -1 ## -i2+P4-1 >= 0 + 1 -32 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk1-i2+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i2 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 3 ## c9 == 3 + +# ---------------------------------------------- 5.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 6 ## Arr == A6 + +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 7 ## Arr == A7 + +WRITE +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S4(i2, i1, i0) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 -1 ## -i2+P4-1 >= 0 + 1 -32 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk1-i2+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i2 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## c9 == 4 + +# ---------------------------------------------- 6.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +READ +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S5(i0, i1, i2) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 2 ## c9 == 2 + +# ---------------------------------------------- 7.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 8 ## Arr == A8 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S6(i0, i1) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 0 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c7 == i0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 8.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +WRITE +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S7(i2, i1, i0) + + +# =============================================== Statement 9 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 9.1 Domain +DOMAIN +10 12 5 0 0 5 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 0 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 9.2 Scattering +SCATTERING +9 21 9 5 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c4 == fk0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c7 == i0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c8 == i1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c9 == 1 + +# ---------------------------------------------- 9.3 Access +READ +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 8 ## Arr == A8 + +READ +2 14 2 5 0 5 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 15 3 5 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 8 ## Arr == A8 + +# ---------------------------------------------- 9.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S8(i0, i1, i2) + + +# =============================================== Extensions + +# Number of arrays +8 +# Mapping array-identifiers/array-names +8 A8 +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 +6 A6 +7 A7 + + + +kernel_3mm + + +t1 t2 t3 t4 t5 t6 t7 t8 t9 + + + + +[CLooG] INFO: 3 domains have been blocked. +[CLooG] INFO: 4 dimensions (over 9) are scalar. +if (P3 >= 1) { + for (t4=0;t4<=floord(P0-1,32);t4++) { + for (t5=0;t5<=floord(P3-1,32);t5++) { + for (t6=32*t4;t6<=min(P0-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P3-1,32*t5+31);t7++) { + S6(t6, t7) + } + } + } + } +} +if (P3 >= 1) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=0;t5<=floord(P3-1,32);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P3-1,32*t5+31);t7++) { + S3(t6, t7) + } + } + } + } +} +if (P1 >= 1) { + for (t4=0;t4<=floord(P0-1,32);t4++) { + for (t5=0;t5<=floord(P1-1,32);t5++) { + for (t6=32*t4;t6<=min(P0-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P1-1,32*t5+31);t7++) { + S0(t6, t7) + } + } + } + } +} +if ((P0 >= 1) && (P1 >= 1)) { + for (t4=0;t4<=floord(P2-1,32);t4++) { + for (t5=0;t5<=floord(P0-1,32);t5++) { + for (t6=32*t4;t6<=min(P2-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P0-1,32*t5+31);t7++) { + for (t8=0;t8<=P1-1;t8++) { + S1(t6, t8, t7) + S2(t7, t8, t6) + } + } + } + } + } +} +if ((P3 >= 1) && (P4 >= 1)) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=0;t5<=floord(P4-1,32);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P4-1,32*t5+31);t7++) { + for (t8=0;t8<=P3-1;t8++) { + S4(t7, t8, t6) + S5(t6, t8, t7) + } + } + } + } + } +} +if ((P0 >= 1) && (P3 >= 1)) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=0;t5<=floord(P0-1,32);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + for (t7=32*t5;t7<=min(P0-1,32*t5+31);t7++) { + for (t8=0;t8<=P3-1;t8++) { + S7(t6, t8, t7) + S8(t7, t8, t6) + } + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.5213 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0009 ( 0.2%) 0.0009 ( 0.2%) {anonymous}::AnnotateHeuristicPass + 0.0012 ( 0.2%) 0.0012 ( 0.2%) {anonymous}::ScopStmtSplitPass + 0.0004 ( 0.1%) 0.0004 ( 0.1%) {anonymous}::UnifyScratchpadPass + 0.0016 ( 0.3%) 0.0016 ( 0.3%) Canonicalizer + 0.0010 ( 0.2%) 0.0004 ( 0.1%) 'func' Pipeline + 0.0006 ( 0.1%) 0.0002 ( 0.0%) {anonymous}::RegToMemPass + 0.0004 ( 0.1%) 0.0002 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0006 ( 0.1%) 0.0006 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.5110 ( 97.9%) 0.5110 ( 98.0%) {anonymous}::PlutoTransformPass + 0.0011 ( 0.2%) 0.0011 ( 0.2%) Canonicalizer + 0.0028 ( 0.5%) 0.0028 ( 0.5%) Inliner + 0.0022 ( 0.4%) 0.0022 ( 0.4%) 'func' Pipeline + 0.0022 ( 0.4%) 0.0022 ( 0.4%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0012 ( 0.2%) 0.0012 ( 0.2%) Canonicalizer + 0.5219 (100.0%) 0.5213 (100.0%) Total diff --git a/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.seq.mlir b/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.seq.mlir index 48fac631..3c8d045a 100644 --- a/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.seq.mlir +++ b/example/polybench/split-and-merge/3mm/3mm.heuristic.polymer.seq.mlir @@ -4,6 +4,10 @@ #map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> #map4 = affine_map<(d0) -> (2000, d0 * 32 + 32)> #map5 = affine_map<(d0) -> (2400, d0 * 32 + 32)> +#map6 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map7 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#set0 = affine_set<()[s0] : (s0 - 1 >= 0)> +#set1 = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -256,61 +260,106 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { + func @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref, %arg13: memref, %arg14: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = index_cast %arg2 : i32 to index + %3 = index_cast %arg3 : i32 to index + %4 = index_cast %arg4 : i32 to index + affine.if #set0()[%3] { + affine.for %arg15 = 0 to #map6()[%0] { + affine.for %arg16 = 0 to #map6()[%3] { + affine.for %arg17 = #map0(%arg15) to min #map7(%arg15)[%0] { + affine.for %arg18 = #map0(%arg16) to min #map7(%arg16)[%3] { + affine.store %cst, %arg11[%arg17, %arg18] : memref + } + } + } + } + } + affine.if #set0()[%3] { + affine.for %arg15 = 0 to #map6()[%1] { + affine.for %arg16 = 0 to #map6()[%3] { + affine.for %arg17 = #map0(%arg15) to min #map7(%arg15)[%1] { + affine.for %arg18 = #map0(%arg16) to min #map7(%arg16)[%3] { + affine.store %cst, %arg8[%arg17, %arg18] : memref + } + } + } + } + } + affine.if #set0()[%1] { + affine.for %arg15 = 0 to #map6()[%0] { + affine.for %arg16 = 0 to #map6()[%1] { + affine.for %arg17 = #map0(%arg15) to min #map7(%arg15)[%0] { + affine.for %arg18 = #map0(%arg16) to min #map7(%arg16)[%1] { + affine.store %cst, %arg5[%arg17, %arg18] : memref + } + } + } + } + } + affine.if #set1()[%0, %1] { + affine.for %arg15 = 0 to #map6()[%2] { + affine.for %arg16 = 0 to #map6()[%0] { + affine.for %arg17 = #map0(%arg15) to min #map7(%arg15)[%2] { + affine.for %arg18 = #map0(%arg16) to min #map7(%arg16)[%0] { + affine.for %arg19 = 0 to %1 { + %5 = affine.load %arg6[%arg18, %arg17] : memref + %6 = affine.load %arg7[%arg17, %arg19] : memref + %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 + affine.store %7, %arg12[%arg17] : memref + %8 = affine.load %arg5[%arg18, %arg19] : memref + %9 = affine.load %arg12[%arg17] : memref + %10 = addf %8, %9 : f64 + affine.store %10, %arg5[%arg18, %arg19] : memref + } + } + } + } + } + } + affine.if #set1()[%3, %4] { + affine.for %arg15 = 0 to #map6()[%1] { + affine.for %arg16 = 0 to #map6()[%4] { + affine.for %arg17 = #map0(%arg15) to min #map7(%arg15)[%1] { + affine.for %arg18 = #map0(%arg16) to min #map7(%arg16)[%4] { + affine.for %arg19 = 0 to %3 { + %5 = affine.load %arg9[%arg17, %arg18] : memref + %6 = affine.load %arg10[%arg18, %arg19] : memref + %7 = mulf %5, %6 {scop.splittable = 1 : index} : f64 + affine.store %7, %arg12[%arg18] : memref + %8 = affine.load %arg8[%arg17, %arg19] : memref + %9 = affine.load %arg12[%arg18] : memref + %10 = addf %8, %9 : f64 + affine.store %10, %arg8[%arg17, %arg19] : memref + } + } + } + } + } + } + affine.if #set1()[%0, %3] { + affine.for %arg15 = 0 to #map6()[%1] { + affine.for %arg16 = 0 to #map6()[%0] { + affine.for %arg17 = #map0(%arg15) to min #map7(%arg15)[%1] { + affine.for %arg18 = #map0(%arg16) to min #map7(%arg16)[%0] { + affine.for %arg19 = 0 to %3 { + %5 = affine.load %arg5[%arg18, %arg17] : memref + %6 = affine.load %arg8[%arg17, %arg19] : memref + %7 = mulf %5, %6 {scop.splittable = 2 : index} : f64 + affine.store %7, %arg12[%arg17] : memref + %8 = affine.load %arg11[%arg18, %arg19] : memref + %9 = affine.load %arg12[%arg17] : memref + %10 = addf %8, %9 : f64 + affine.store %10, %arg11[%arg18, %arg19] : memref + } + } + } + } + } + } return } func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { diff --git a/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.par.log b/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.par.log new file mode 100644 index 00000000..622c2320 --- /dev/null +++ b/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.par.log @@ -0,0 +1,631 @@ +Pluto schedule elapsed time: 2.432798e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 7 0 0 0 5 + +# Parameters are provided +1 + +P0 P1 P2 P3 P4 + + +# Number of statements +6 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c6 == 1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S0(i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +12 13 6 0 0 5 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 0 1 0 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +9 22 9 6 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk2 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c8 == i2 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c9 == i1 + +# ---------------------------------------------- 2.3 Access +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S1(i0, i1, i2) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 3.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S2(i0, i1) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +12 13 6 0 0 5 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 0 0 0 1 -1 ## -i2+P4-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +9 22 9 6 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk2 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c8 == i2 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c9 == i1 + +# ---------------------------------------------- 4.3 Access +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 6 ## Arr == A6 + +WRITE +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S3(i0, i1, i2) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 5.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 7 ## Arr == A7 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +12 13 6 0 0 5 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 1 0 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk1-i2+31 >= 0 + 1 0 0 -32 0 1 0 0 0 0 0 0 0 ## -32*fk2+i1 >= 0 + 1 0 0 32 0 -1 0 0 0 0 0 0 31 ## 32*fk2-i1+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +9 22 9 6 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c4 == 1 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk2 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i2 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c8 == 1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c9 == i1 + +# ---------------------------------------------- 6.3 Access +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 7 ## Arr == A7 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 7 ## Arr == A7 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S5(i0, i1, i2) + + +# =============================================== Extensions + +# Number of arrays +7 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 +6 A6 +7 A7 + + + +kernel_3mm + + +t1 t2 t3 t4 t5 t6 t7 t8 t9 + + + +# Number of loops +4 +# =========================================== +# Loop number 1 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +1 +# Private variables +t3,t4,t5,t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t2 +# Number of stmts +2 +# Statement identifiers +2 +6 +# Private variables +t3,t4,t5,t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 3 +# Iterator name +t2 +# Number of stmts +2 +# Statement identifiers +3 +5 +# Private variables +t3,t4,t5,t6,t7,t8,t9 +# Directive +1 +# =========================================== +# Loop number 4 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +4 +# Private variables +t3,t4,t5,t6,t7,t8,t9 +# Directive +1 + + + + +[CLooG] INFO: 1 dimensions (over 9) are scalar. +if ((P0 >= 0) && (P1 >= 0) && (P3 >= 1)) { + lbp=0; + ubp=floord(P0+P1-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8,t9) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-1,P1-1),32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + S4(t4, t5) + } + } + for (t4=max(P0,32*t2);t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + for (t4=max(P1,32*t2);t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S4(t4, t5) + } + } + } + } +} +if ((P1 <= -1) && (P3 >= 1)) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8,t9) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S4(t4, t5) + } + } + } + } +} +if ((P0 <= -1) && (P3 >= 1)) { + lbp=0; + ubp=floord(P1-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8,t9) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + } + } +} +if ((P3 >= 1) && (P4 >= 1)) { + lbp=0; + ubp=floord(P1-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8,t9) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t5=0;t5<=floord(P4-1,32);t5++) { + for (t6=32*t2;t6<=min(P1-1,32*t2+31);t6++) { + for (t8=32*t5;t8<=min(P4-1,32*t5+31);t8++) { + for (t9=32*t3;t9<=min(P3-1,32*t3+31);t9++) { + S3(t6, t9, t8) + } + } + } + } + } + } +} +if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8,t9) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + S0(t4, t5) + } + } + } + } +} +if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8,t9) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + if (P2 >= 1) { + for (t5=0;t5<=floord(P2-1,32);t5++) { + for (t6=32*t2;t6<=min(P0-1,32*t2+31);t6++) { + for (t8=32*t5;t8<=min(P2-1,32*t5+31);t8++) { + for (t9=32*t3;t9<=min(P1-1,32*t3+31);t9++) { + S1(t6, t9, t8) + } + } + } + } + } + if (P3 >= 1) { + for (t5=0;t5<=floord(P3-1,32);t5++) { + for (t6=32*t2;t6<=min(P0-1,32*t2+31);t6++) { + for (t7=32*t3;t7<=min(P1-1,32*t3+31);t7++) { + for (t9=32*t5;t9<=min(P3-1,32*t5+31);t9++) { + S5(t6, t9, t7) + } + } + } + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.3766 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0010 ( 0.3%) 0.0003 ( 0.1%) 'func' Pipeline + 0.0006 ( 0.2%) 0.0002 ( 0.1%) {anonymous}::RegToMemPass + 0.0004 ( 0.1%) 0.0001 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0003 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.3705 ( 98.2%) 0.3705 ( 98.4%) {anonymous}::PlutoTransformPass + 0.0012 ( 0.3%) 0.0012 ( 0.3%) Canonicalizer + 0.0030 ( 0.8%) 0.0030 ( 0.8%) Inliner + 0.0023 ( 0.6%) 0.0023 ( 0.6%) 'func' Pipeline + 0.0023 ( 0.6%) 0.0023 ( 0.6%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0014 ( 0.4%) 0.0014 ( 0.4%) Canonicalizer + 0.3773 (100.0%) 0.3766 (100.0%) Total diff --git a/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.par.mlir b/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.par.mlir index e2dde282..14fa3241 100644 --- a/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.par.mlir +++ b/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.par.mlir @@ -7,6 +7,15 @@ #map6 = affine_map<(d0) -> (1600, d0 * 32 + 32)> #map7 = affine_map<(d0) -> (2400, d0 * 32 + 32)> #map8 = affine_map<(d0) -> (2000, d0 * 32 + 32)> +#map9 = affine_map<()[s0, s1] -> ((s0 + s1 - 1) floordiv 32 + 1)> +#map10 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map11 = affine_map<(d0)[s0, s1] -> (s0, s1, d0 * 32 + 32)> +#map12 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map13 = affine_map<(d0)[s0] -> (s0, d0 * 32)> +#set0 = affine_set<()[s0, s1, s2] : (s0 >= 0, s1 >= 0, s2 - 1 >= 0)> +#set1 = affine_set<()[s0, s1] : (-s0 - 1 >= 0, s1 - 1 >= 0)> +#set2 = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> +#set3 = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -256,46 +265,126 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { + func @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = index_cast %arg2 : i32 to index + %3 = index_cast %arg3 : i32 to index + %4 = index_cast %arg4 : i32 to index + affine.if #set0()[%0, %1, %3] { + affine.for %arg12 = 0 to #map9()[%0, %1] { + affine.for %arg13 = 0 to #map10()[%3] { + affine.for %arg14 = #map0(%arg12) to min #map11(%arg12)[%0, %1] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg8[%arg14, %arg15] : memref + affine.store %cst, %arg11[%arg14, %arg15] : memref + } + } + affine.for %arg14 = max #map13(%arg12)[%0] to min #map12(%arg12)[%1] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg8[%arg14, %arg15] : memref + } + } + affine.for %arg14 = max #map13(%arg12)[%1] to min #map12(%arg12)[%0] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg11[%arg14, %arg15] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set1()[%1, %3] { + affine.for %arg12 = 0 to #map10()[%0] { + affine.for %arg13 = 0 to #map10()[%3] { + affine.for %arg14 = #map0(%arg12) to min #map12(%arg12)[%0] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg11[%arg14, %arg15] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set1()[%0, %3] { + affine.for %arg12 = 0 to #map10()[%1] { + affine.for %arg13 = 0 to #map10()[%3] { + affine.for %arg14 = #map0(%arg12) to min #map12(%arg12)[%1] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg8[%arg14, %arg15] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set2()[%3, %4] { + affine.for %arg12 = 0 to #map10()[%1] { + affine.for %arg13 = 0 to #map10()[%3] { + affine.for %arg14 = 0 to #map10()[%4] { + affine.for %arg15 = #map0(%arg12) to min #map12(%arg12)[%1] { + affine.for %arg16 = #map0(%arg14) to min #map12(%arg14)[%4] { + affine.for %arg17 = #map0(%arg13) to min #map12(%arg13)[%3] { + %5 = affine.load %arg8[%arg15, %arg17] : memref + %6 = affine.load %arg9[%arg15, %arg16] : memref + %7 = affine.load %arg10[%arg16, %arg17] : memref + %8 = mulf %6, %7 : f64 + %9 = addf %5, %8 : f64 + affine.store %9, %arg8[%arg15, %arg17] : memref + } + } + } + } + } + } {scop.parallelizable} + } + affine.if #set3()[%1] { + affine.for %arg12 = 0 to #map10()[%0] { + affine.for %arg13 = 0 to #map10()[%1] { + affine.for %arg14 = #map0(%arg12) to min #map12(%arg12)[%0] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%1] { + affine.store %cst, %arg5[%arg14, %arg15] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set3()[%1] { + affine.for %arg12 = 0 to #map10()[%0] { + affine.for %arg13 = 0 to #map10()[%1] { + affine.if #set3()[%2] { + affine.for %arg14 = 0 to #map10()[%2] { + affine.for %arg15 = #map0(%arg12) to min #map12(%arg12)[%0] { + affine.for %arg16 = #map0(%arg14) to min #map12(%arg14)[%2] { + affine.for %arg17 = #map0(%arg13) to min #map12(%arg13)[%1] { + %5 = affine.load %arg5[%arg15, %arg17] : memref + %6 = affine.load %arg6[%arg15, %arg16] : memref + %7 = affine.load %arg7[%arg16, %arg17] : memref + %8 = mulf %6, %7 : f64 + %9 = addf %5, %8 : f64 + affine.store %9, %arg5[%arg15, %arg17] : memref + } + } + } + } + } + affine.if #set3()[%3] { + affine.for %arg14 = 0 to #map10()[%3] { + affine.for %arg15 = #map0(%arg12) to min #map12(%arg12)[%0] { + affine.for %arg16 = #map0(%arg13) to min #map12(%arg13)[%1] { + affine.for %arg17 = #map0(%arg14) to min #map12(%arg14)[%3] { + %5 = affine.load %arg11[%arg15, %arg17] : memref + %6 = affine.load %arg5[%arg15, %arg16] : memref + %7 = affine.load %arg8[%arg16, %arg17] : memref + %8 = mulf %6, %7 : f64 + %9 = addf %5, %8 : f64 + affine.store %9, %arg11[%arg15, %arg17] : memref + } + } + } + } + } + } + } {scop.parallelizable} + } return } func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { diff --git a/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.seq.log b/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.seq.log new file mode 100644 index 00000000..2c7c25de --- /dev/null +++ b/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.seq.log @@ -0,0 +1,558 @@ +Pluto schedule elapsed time: 2.424912e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 7 0 0 0 5 + +# Parameters are provided +1 + +P0 P1 P2 P3 P4 + + +# Number of statements +6 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c6 == 1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S0(i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +12 13 6 0 0 5 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 1 0 0 0 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 0 1 0 0 -1 ## -i2+P2-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +9 22 9 6 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk2 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c8 == i2 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c9 == i1 + +# ---------------------------------------------- 2.3 Access +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S1(i0, i1, i2) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 3.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S2(i0, i1) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +12 13 6 0 0 5 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 0 1 0 0 0 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 0 0 0 1 -1 ## -i2+P4-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 0 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +9 22 9 6 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk2 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c8 == i2 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c9 == i1 + +# ---------------------------------------------- 4.3 Access +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 6 ## Arr == A6 + +WRITE +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S3(i0, i1, i2) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 11 4 0 0 5 +# e/i| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 1 0 0 1 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 0 0 0 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 0 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +9 20 9 4 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c8 == 0 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c9 == 0 + +# ---------------------------------------------- 5.3 Access +WRITE +3 14 3 4 0 5 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 7 ## Arr == A7 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +12 13 6 0 0 5 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 1 0 0 0 1 0 0 0 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 0 0 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 0 -1 ## -i1+P3-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 1 0 0 0 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 0 1 0 0 0 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 0 -1 0 0 0 0 0 31 ## 32*fk1-i2+31 >= 0 + 1 0 0 -32 0 1 0 0 0 0 0 0 0 ## -32*fk2+i1 >= 0 + 1 0 0 32 0 -1 0 0 0 0 0 0 31 ## 32*fk2-i1+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +9 22 9 6 0 5 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c4 == 1 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ## c5 == fk2 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c6 == i0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c7 == i2 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c8 == 1 + 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c9 == i1 + +# ---------------------------------------------- 6.3 Access +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 7 ## Arr == A7 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## [2] == i2 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 16 3 6 0 5 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 P2 P3 P4 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 7 ## Arr == A7 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S5(i0, i1, i2) + + +# =============================================== Extensions + +# Number of arrays +7 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 +6 A6 +7 A7 + + + +kernel_3mm + + +t1 t2 t3 t4 t5 t6 t7 t8 t9 + + + + +[CLooG] INFO: 1 dimensions (over 9) are scalar. +if ((P0 >= 0) && (P1 >= 0) && (P3 >= 1)) { + for (t2=0;t2<=floord(P0+P1-1,32);t2++) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-1,P1-1),32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + S4(t4, t5) + } + } + for (t4=max(P0,32*t2);t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + for (t4=max(P1,32*t2);t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S4(t4, t5) + } + } + } + } +} +if ((P1 <= -1) && (P3 >= 1)) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S4(t4, t5) + } + } + } + } +} +if ((P0 <= -1) && (P3 >= 1)) { + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P3-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + } + } +} +if ((P3 >= 1) && (P4 >= 1)) { + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P3-1,32);t3++) { + for (t5=0;t5<=floord(P4-1,32);t5++) { + for (t6=32*t2;t6<=min(P1-1,32*t2+31);t6++) { + for (t8=32*t5;t8<=min(P4-1,32*t5+31);t8++) { + for (t9=32*t3;t9<=min(P3-1,32*t3+31);t9++) { + S3(t6, t9, t8) + } + } + } + } + } + } +} +if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + S0(t4, t5) + } + } + } + } +} +if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + if (P2 >= 1) { + for (t5=0;t5<=floord(P2-1,32);t5++) { + for (t6=32*t2;t6<=min(P0-1,32*t2+31);t6++) { + for (t8=32*t5;t8<=min(P2-1,32*t5+31);t8++) { + for (t9=32*t3;t9<=min(P1-1,32*t3+31);t9++) { + S1(t6, t9, t8) + } + } + } + } + } + if (P3 >= 1) { + for (t5=0;t5<=floord(P3-1,32);t5++) { + for (t6=32*t2;t6<=min(P0-1,32*t2+31);t6++) { + for (t7=32*t3;t7<=min(P1-1,32*t3+31);t7++) { + for (t9=32*t5;t9<=min(P3-1,32*t5+31);t9++) { + S5(t6, t9, t7) + } + } + } + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.3751 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0008 ( 0.2%) 0.0004 ( 0.1%) 'func' Pipeline + 0.0004 ( 0.1%) 0.0002 ( 0.1%) {anonymous}::RegToMemPass + 0.0004 ( 0.1%) 0.0002 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0003 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.3689 ( 98.2%) 0.3689 ( 98.3%) {anonymous}::PlutoTransformPass + 0.0011 ( 0.3%) 0.0011 ( 0.3%) Canonicalizer + 0.0030 ( 0.8%) 0.0030 ( 0.8%) Inliner + 0.0024 ( 0.6%) 0.0024 ( 0.6%) 'func' Pipeline + 0.0024 ( 0.6%) 0.0024 ( 0.6%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0014 ( 0.4%) 0.0014 ( 0.4%) Canonicalizer + 0.3755 (100.0%) 0.3751 (100.0%) Total diff --git a/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.seq.mlir b/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.seq.mlir index 43bf73f9..8a78d1e9 100644 --- a/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.seq.mlir +++ b/example/polybench/split-and-merge/3mm/3mm.nosplit.polymer.seq.mlir @@ -7,6 +7,15 @@ #map6 = affine_map<(d0) -> (1600, d0 * 32 + 32)> #map7 = affine_map<(d0) -> (2400, d0 * 32 + 32)> #map8 = affine_map<(d0) -> (2000, d0 * 32 + 32)> +#map9 = affine_map<()[s0, s1] -> ((s0 + s1 - 1) floordiv 32 + 1)> +#map10 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map11 = affine_map<(d0)[s0, s1] -> (s0, s1, d0 * 32 + 32)> +#map12 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map13 = affine_map<(d0)[s0] -> (s0, d0 * 32)> +#set0 = affine_set<()[s0, s1, s2] : (s0 >= 0, s1 >= 0, s2 - 1 >= 0)> +#set1 = affine_set<()[s0, s1] : (-s0 - 1 >= 0, s1 - 1 >= 0)> +#set2 = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> +#set3 = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -256,46 +265,126 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { + func @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = index_cast %arg2 : i32 to index + %3 = index_cast %arg3 : i32 to index + %4 = index_cast %arg4 : i32 to index + affine.if #set0()[%0, %1, %3] { + affine.for %arg12 = 0 to #map9()[%0, %1] { + affine.for %arg13 = 0 to #map10()[%3] { + affine.for %arg14 = #map0(%arg12) to min #map11(%arg12)[%0, %1] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg8[%arg14, %arg15] : memref + affine.store %cst, %arg11[%arg14, %arg15] : memref + } + } + affine.for %arg14 = max #map13(%arg12)[%0] to min #map12(%arg12)[%1] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg8[%arg14, %arg15] : memref + } + } + affine.for %arg14 = max #map13(%arg12)[%1] to min #map12(%arg12)[%0] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg11[%arg14, %arg15] : memref + } + } + } + } + } + affine.if #set1()[%1, %3] { + affine.for %arg12 = 0 to #map10()[%0] { + affine.for %arg13 = 0 to #map10()[%3] { + affine.for %arg14 = #map0(%arg12) to min #map12(%arg12)[%0] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg11[%arg14, %arg15] : memref + } + } + } + } + } + affine.if #set1()[%0, %3] { + affine.for %arg12 = 0 to #map10()[%1] { + affine.for %arg13 = 0 to #map10()[%3] { + affine.for %arg14 = #map0(%arg12) to min #map12(%arg12)[%1] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%3] { + affine.store %cst, %arg8[%arg14, %arg15] : memref + } + } + } + } + } + affine.if #set2()[%3, %4] { + affine.for %arg12 = 0 to #map10()[%1] { + affine.for %arg13 = 0 to #map10()[%3] { + affine.for %arg14 = 0 to #map10()[%4] { + affine.for %arg15 = #map0(%arg12) to min #map12(%arg12)[%1] { + affine.for %arg16 = #map0(%arg14) to min #map12(%arg14)[%4] { + affine.for %arg17 = #map0(%arg13) to min #map12(%arg13)[%3] { + %5 = affine.load %arg8[%arg15, %arg17] : memref + %6 = affine.load %arg9[%arg15, %arg16] : memref + %7 = affine.load %arg10[%arg16, %arg17] : memref + %8 = mulf %6, %7 : f64 + %9 = addf %5, %8 : f64 + affine.store %9, %arg8[%arg15, %arg17] : memref + } + } + } + } + } + } + } + affine.if #set3()[%1] { + affine.for %arg12 = 0 to #map10()[%0] { + affine.for %arg13 = 0 to #map10()[%1] { + affine.for %arg14 = #map0(%arg12) to min #map12(%arg12)[%0] { + affine.for %arg15 = #map0(%arg13) to min #map12(%arg13)[%1] { + affine.store %cst, %arg5[%arg14, %arg15] : memref + } + } + } + } + } + affine.if #set3()[%1] { + affine.for %arg12 = 0 to #map10()[%0] { + affine.for %arg13 = 0 to #map10()[%1] { + affine.if #set3()[%2] { + affine.for %arg14 = 0 to #map10()[%2] { + affine.for %arg15 = #map0(%arg12) to min #map12(%arg12)[%0] { + affine.for %arg16 = #map0(%arg14) to min #map12(%arg14)[%2] { + affine.for %arg17 = #map0(%arg13) to min #map12(%arg13)[%1] { + %5 = affine.load %arg5[%arg15, %arg17] : memref + %6 = affine.load %arg6[%arg15, %arg16] : memref + %7 = affine.load %arg7[%arg16, %arg17] : memref + %8 = mulf %6, %7 : f64 + %9 = addf %5, %8 : f64 + affine.store %9, %arg5[%arg15, %arg17] : memref + } + } + } + } + } + affine.if #set3()[%3] { + affine.for %arg14 = 0 to #map10()[%3] { + affine.for %arg15 = #map0(%arg12) to min #map12(%arg12)[%0] { + affine.for %arg16 = #map0(%arg13) to min #map12(%arg13)[%1] { + affine.for %arg17 = #map0(%arg14) to min #map12(%arg14)[%3] { + %5 = affine.load %arg11[%arg15, %arg17] : memref + %6 = affine.load %arg5[%arg15, %arg16] : memref + %7 = affine.load %arg8[%arg16, %arg17] : memref + %8 = mulf %6, %7 : f64 + %9 = addf %5, %8 : f64 + affine.store %9, %arg11[%arg15, %arg17] : memref + } + } + } + } + } + } + } + } return } func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.c b/example/polybench/split-and-merge/3mm/3mm.origin.c deleted file mode 100644 index ae713fa2..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.c +++ /dev/null @@ -1,229 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 3mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "3mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, int nm, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm), - DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl)) -{ - int i, j; - - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / (5*ni); - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) ((i*(j+1)+2) % nj) / (5*nj); - for (i = 0; i < nj; i++) - for (j = 0; j < nm; j++) - C[i][j] = (DATA_TYPE) (i*(j+3) % nl) / (5*nl); - for (i = 0; i < nm; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) ((i*(j+2)+2) % nk) / (5*nk); -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("G"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, G[i][j]); - } - POLYBENCH_DUMP_END("G"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_3mm(int ni, int nj, int nk, int nl, int nm, - DATA_TYPE POLYBENCH_2D(E,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(F,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm), - DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl), - DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl)) -{ - int i, j, k; - -#pragma scop - /* E := A*B */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NJ; j++) - { - E[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NK; ++k) - E[i][j] += A[i][k] * B[k][j]; - } - /* F := C*D */ - for (i = 0; i < _PB_NJ; i++) - for (j = 0; j < _PB_NL; j++) - { - F[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NM; ++k) - F[i][j] += C[i][k] * D[k][j]; - } - /* G := E*F */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NL; j++) - { - G[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NJ; ++k) - G[i][j] += E[i][k] * F[k][j]; - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - int nm = NM; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(E, DATA_TYPE, NI, NJ, ni, nj); - POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, NI, NK, ni, nk); - POLYBENCH_2D_ARRAY_DECL(B, DATA_TYPE, NK, NJ, nk, nj); - POLYBENCH_2D_ARRAY_DECL(F, DATA_TYPE, NJ, NL, nj, nl); - POLYBENCH_2D_ARRAY_DECL(C, DATA_TYPE, NJ, NM, nj, nm); - POLYBENCH_2D_ARRAY_DECL(D, DATA_TYPE, NM, NL, nm, nl); - POLYBENCH_2D_ARRAY_DECL(G, DATA_TYPE, NI, NL, ni, nl); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, nm, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_3mm (ni, nj, nk, nl, nm, - POLYBENCH_ARRAY(E), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(F), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(G)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(G))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(E); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(F); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - POLYBENCH_FREE_ARRAY(G); - - return 0; -} - -// CHECK: func @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref<800x900xf64>, %arg6: memref<800x1000xf64>, %arg7: memref<1000x900xf64>, %arg8: memref<900x1100xf64>, %arg9: memref<900x1200xf64>, %arg10: memref<1200x1100xf64>, %arg11: memref<800x1100xf64>) { -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: %2 = index_cast %arg2 : i32 to index -// CHECK-NEXT: affine.for %arg12 = 0 to %0 { -// CHECK-NEXT: affine.for %arg13 = 0 to %1 { -// CHECK-NEXT: affine.store %cst, %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: %5 = affine.load %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %2 { -// CHECK-NEXT: %6 = affine.load %arg6[%arg12, %arg14] : memref<800x1000xf64> -// CHECK-NEXT: %7 = affine.load %arg7[%arg14, %arg13] : memref<1000x900xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: %3 = index_cast %arg3 : i32 to index -// CHECK-NEXT: %4 = index_cast %arg4 : i32 to index -// CHECK-NEXT: affine.for %arg12 = 0 to %1 { -// CHECK-NEXT: affine.for %arg13 = 0 to %3 { -// CHECK-NEXT: affine.store %cst, %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: %5 = affine.load %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %4 { -// CHECK-NEXT: %6 = affine.load %arg9[%arg12, %arg14] : memref<900x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg10[%arg14, %arg13] : memref<1200x1100xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg12 = 0 to %0 { -// CHECK-NEXT: affine.for %arg13 = 0 to %3 { -// CHECK-NEXT: affine.store %cst, %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: %5 = affine.load %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %1 { -// CHECK-NEXT: %6 = affine.load %arg5[%arg12, %arg14] : memref<800x900xf64> -// CHECK-NEXT: %7 = affine.load %arg8[%arg14, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.mlir b/example/polybench/split-and-merge/3mm/3mm.origin.mlir deleted file mode 100644 index 17d4aab6..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.mlir +++ /dev/null @@ -1,297 +0,0 @@ -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("G\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2000_i32 = constant 2000 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloc() : memref<1600x1800xf64> - %1 = memref.alloc() : memref<1600x2000xf64> - %2 = memref.alloc() : memref<2000x1800xf64> - %3 = memref.alloc() : memref<1800x2200xf64> - %4 = memref.alloc() : memref<1800x2400xf64> - %5 = memref.alloc() : memref<2400x2200xf64> - %6 = memref.alloc() : memref<1600x2200xf64> - %7 = memref.cast %1 : memref<1600x2000xf64> to memref - %8 = memref.cast %2 : memref<2000x1800xf64> to memref - %9 = memref.cast %4 : memref<1800x2400xf64> to memref - %10 = memref.cast %5 : memref<2400x2200xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %7, %8, %9, %10) : (i32, i32, i32, i32, i32, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %11 = memref.cast %0 : memref<1600x1800xf64> to memref - %12 = memref.cast %3 : memref<1800x2200xf64> to memref - %13 = memref.cast %6 : memref<1600x2200xf64> to memref - call @kernel_3mm(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %11, %7, %8, %12, %9, %10, %13) : (i32, i32, i32, i32, i32, memref, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %14 = cmpi sgt, %arg0, %c42_i32 : i32 - %15 = scf.if %14 -> (i1) { - %16 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %17 = llvm.load %16 : !llvm.ptr> - %18 = llvm.mlir.addressof @str0 : !llvm.ptr> - %19 = llvm.getelementptr %18[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %20 = llvm.call @strcmp(%17, %19) : (!llvm.ptr, !llvm.ptr) -> i32 - %21 = trunci %20 : i32 to i1 - %22 = xor %21, %true : i1 - scf.yield %22 : i1 - } else { - scf.yield %false : i1 - } - scf.if %15 { - call @print_array(%c1600_i32, %c2200_i32, %13) : (i32, i32, memref) -> () - } - memref.dealloc %0 : memref<1600x1800xf64> - memref.dealloc %1 : memref<1600x2000xf64> - memref.dealloc %2 : memref<2000x1800xf64> - memref.dealloc %3 : memref<1800x2200xf64> - memref.dealloc %4 : memref<1800x2400xf64> - memref.dealloc %5 : memref<2400x2200xf64> - memref.dealloc %6 : memref<1600x2200xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref) { - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c5_i32 = constant 5 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg9 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg2 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = muli %arg10, %arg11 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg0, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg5[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg9 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg11 = %c0 to %5 step %c1 iter_args(%arg12 = %c0_i32) -> (i32) { - %8 = index_cast %arg12 : i32 to index - %9 = addi %arg12, %c1_i32 : i32 - %10 = muli %arg10, %9 : i32 - %11 = addi %10, %c2_i32 : i32 - %12 = remi_signed %11, %arg1 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = muli %arg1, %c5_i32 : i32 - %15 = sitofp %14 : i32 to f64 - %16 = divf %13, %15 : f64 - memref.store %16, %arg6[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg10, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg9 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg4 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c3_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg3 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg3, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg7[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg9 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg9, %arg4 : i32 - scf.condition(%4) %arg9 : i32 - } do { - ^bb0(%arg9: i32): // no predecessors - %4 = index_cast %arg9 : i32 to index - %5 = scf.while (%arg10 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg10, %arg3 : i32 - scf.condition(%7) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %7 = index_cast %arg10 : i32 to index - %8 = addi %arg10, %c2_i32 : i32 - %9 = muli %arg9, %8 : i32 - %10 = addi %9, %c2_i32 : i32 - %11 = remi_signed %10, %arg2 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = muli %arg2, %c5_i32 : i32 - %14 = sitofp %13 : i32 to f64 - %15 = divf %12, %14 : f64 - memref.store %15, %arg8[%4, %7] : memref - %16 = addi %arg10, %c1_i32 : i32 - scf.yield %16 : i32 - } - %6 = addi %arg9, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg4 : i32 to index - %4 = index_cast %arg0 : i32 to index - affine.for %arg12 = 0 to %4 { - affine.for %arg13 = 0 to %0 { - affine.store %cst, %arg5[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %1 { - %5 = affine.load %arg6[%arg12, %arg14] : memref - %6 = affine.load %arg7[%arg14, %arg13] : memref - %7 = mulf %5, %6 : f64 - %8 = affine.load %arg5[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg5[%arg12, %arg13] : memref - } - } - } - affine.for %arg12 = 0 to %0 { - affine.for %arg13 = 0 to %2 { - affine.store %cst, %arg8[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %3 { - %5 = affine.load %arg9[%arg12, %arg14] : memref - %6 = affine.load %arg10[%arg14, %arg13] : memref - %7 = mulf %5, %6 : f64 - %8 = affine.load %arg8[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg8[%arg12, %arg13] : memref - } - } - } - affine.for %arg12 = 0 to %4 { - affine.for %arg13 = 0 to %2 { - affine.store %cst, %arg11[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %0 { - %5 = affine.load %arg5[%arg12, %arg14] : memref - %6 = affine.load %arg8[%arg14, %arg13] : memref - %7 = mulf %5, %6 : f64 - %8 = affine.load %arg11[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg11[%arg12, %arg13] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.pluto.c b/example/polybench/split-and-merge/3mm/3mm.origin.pluto.c deleted file mode 100644 index 6731c218..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.pluto.c +++ /dev/null @@ -1,309 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 3mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "3mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, int nm, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm), - DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl)) -{ - int i, j; - - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / (5*ni); - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) ((i*(j+1)+2) % nj) / (5*nj); - for (i = 0; i < nj; i++) - for (j = 0; j < nm; j++) - C[i][j] = (DATA_TYPE) (i*(j+3) % nl) / (5*nl); - for (i = 0; i < nm; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) ((i*(j+2)+2) % nk) / (5*nk); -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("G"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, G[i][j]); - } - POLYBENCH_DUMP_END("G"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_3mm(int ni, int nj, int nk, int nl, int nm, - DATA_TYPE POLYBENCH_2D(E,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(F,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm), - DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl), - DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl)) -{ - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9; - register int lbv, ubv; -if ((_PB_NI >= 0) && (_PB_NJ >= 0) && (_PB_NL >= 1)) { - for (t2=0;t2<=floord(_PB_NI+_PB_NJ-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_NI-1,_PB_NJ-1),32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - F[t4][t5] = SCALAR_VAL(0.0);; - G[t4][t5] = SCALAR_VAL(0.0);; - } - } - for (t4=max(_PB_NI,32*t2);t4<=min(_PB_NJ-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - F[t4][t5] = SCALAR_VAL(0.0);; - } - } - for (t4=max(_PB_NJ,32*t2);t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - G[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } -} -if ((_PB_NJ <= -1) && (_PB_NL >= 1)) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - G[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } -} -if ((_PB_NI <= -1) && (_PB_NL >= 1)) { - for (t2=0;t2<=floord(_PB_NJ-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NJ-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - F[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } -} -if ((_PB_NL >= 1) && (_PB_NM >= 1)) { - for (t2=0;t2<=floord(_PB_NJ-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t5=0;t5<=floord(_PB_NM-1,32);t5++) { - for (t6=32*t2;t6<=min(_PB_NJ-1,32*t2+31);t6++) { - for (t8=32*t5;t8<=min(_PB_NM-1,32*t5+31);t8++) { - for (t9=32*t3;t9<=min(_PB_NL-1,32*t3+31);t9++) { - F[t6][t9] += C[t6][t8] * D[t8][t9];; - } - } - } - } - } - } -} -if (_PB_NJ >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - E[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } -} -if (_PB_NJ >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - if (_PB_NK >= 1) { - for (t5=0;t5<=floord(_PB_NK-1,32);t5++) { - for (t6=32*t2;t6<=min(_PB_NI-1,32*t2+31);t6++) { - for (t8=32*t5;t8<=min(_PB_NK-1,32*t5+31);t8++) { - for (t9=32*t3;t9<=min(_PB_NJ-1,32*t3+31);t9++) { - E[t6][t9] += A[t6][t8] * B[t8][t9];; - } - } - } - } - } - if (_PB_NL >= 1) { - for (t5=0;t5<=floord(_PB_NL-1,32);t5++) { - for (t6=32*t2;t6<=min(_PB_NI-1,32*t2+31);t6++) { - for (t7=32*t3;t7<=min(_PB_NJ-1,32*t3+31);t7++) { - for (t9=32*t5;t9<=min(_PB_NL-1,32*t5+31);t9++) { - G[t6][t9] += E[t6][t7] * F[t7][t9];; - } - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - int nm = NM; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(E, DATA_TYPE, NI, NJ, ni, nj); - POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, NI, NK, ni, nk); - POLYBENCH_2D_ARRAY_DECL(B, DATA_TYPE, NK, NJ, nk, nj); - POLYBENCH_2D_ARRAY_DECL(F, DATA_TYPE, NJ, NL, nj, nl); - POLYBENCH_2D_ARRAY_DECL(C, DATA_TYPE, NJ, NM, nj, nm); - POLYBENCH_2D_ARRAY_DECL(D, DATA_TYPE, NM, NL, nm, nl); - POLYBENCH_2D_ARRAY_DECL(G, DATA_TYPE, NI, NL, ni, nl); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, nm, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_3mm (ni, nj, nk, nl, nm, - POLYBENCH_ARRAY(E), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(F), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(G)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(G))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(E); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(F); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - POLYBENCH_FREE_ARRAY(G); - - return 0; -} - -// CHECK: func @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref<800x900xf64>, %arg6: memref<800x1000xf64>, %arg7: memref<1000x900xf64>, %arg8: memref<900x1100xf64>, %arg9: memref<900x1200xf64>, %arg10: memref<1200x1100xf64>, %arg11: memref<800x1100xf64>) { -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: %2 = index_cast %arg2 : i32 to index -// CHECK-NEXT: affine.for %arg12 = 0 to %0 { -// CHECK-NEXT: affine.for %arg13 = 0 to %1 { -// CHECK-NEXT: affine.store %cst, %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: %5 = affine.load %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %2 { -// CHECK-NEXT: %6 = affine.load %arg6[%arg12, %arg14] : memref<800x1000xf64> -// CHECK-NEXT: %7 = affine.load %arg7[%arg14, %arg13] : memref<1000x900xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: %3 = index_cast %arg3 : i32 to index -// CHECK-NEXT: %4 = index_cast %arg4 : i32 to index -// CHECK-NEXT: affine.for %arg12 = 0 to %1 { -// CHECK-NEXT: affine.for %arg13 = 0 to %3 { -// CHECK-NEXT: affine.store %cst, %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: %5 = affine.load %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %4 { -// CHECK-NEXT: %6 = affine.load %arg9[%arg12, %arg14] : memref<900x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg10[%arg14, %arg13] : memref<1200x1100xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg12 = 0 to %0 { -// CHECK-NEXT: affine.for %arg13 = 0 to %3 { -// CHECK-NEXT: affine.store %cst, %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: %5 = affine.load %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %1 { -// CHECK-NEXT: %6 = affine.load %arg5[%arg12, %arg14] : memref<800x900xf64> -// CHECK-NEXT: %7 = affine.load %arg8[%arg14, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.pluto.cloog b/example/polybench/split-and-merge/3mm/3mm.origin.pluto.cloog deleted file mode 100644 index e0e56b62..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.pluto.cloog +++ /dev/null @@ -1,195 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 7 - -1 -_PB_NI _PB_NJ _PB_NK _PB_NL _PB_NM - -# Number of statements -6 - -# S1 (E[i][j] = SCALAR_VAL(0.0);) -11 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -0 0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# S2 (E[i][j] += A[i][k] * B[k][j];) -15 13 -1 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 0 0 -1 -1 0 0 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 0 0 0 -1 0 32 0 0 -1 0 0 0 0 0 0 31 -1 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 32 0 0 -1 0 0 0 0 0 31 -0 0 0 - -# S3 (F[i][j] = SCALAR_VAL(0.0);) -11 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# S4 (F[i][j] += C[i][k] * D[k][j];) -15 13 -1 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 0 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 0 0 1 0 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 0 0 0 -1 0 32 0 0 -1 0 0 0 0 0 0 31 -1 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 32 0 0 -1 0 0 0 0 0 31 -0 0 0 - -# S5 (G[i][j] = SCALAR_VAL(0.0);) -11 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# S6 (G[i][j] += E[i][k] * F[k][j];) -15 13 -1 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 0 0 -1 -1 0 0 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 0 0 1 0 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 0 0 31 -1 0 -32 0 0 0 1 0 0 0 0 0 0 -1 0 32 0 0 0 -1 0 0 0 0 0 31 -1 0 0 -32 0 1 0 0 0 0 0 0 0 -1 0 0 32 0 -1 0 0 0 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -6 - -# T(S1) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S2) -9 22 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 - -# T(S3) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S4) -9 22 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 - -# T(S5) -9 20 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S6) -9 22 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -9 -t1 t2 t3 t4 t5 t6 t7 t8 t9 diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.pluto.log b/example/polybench/split-and-merge/3mm/3mm.origin.pluto.log deleted file mode 100644 index 2bd53970..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.pluto.log +++ /dev/null @@ -1,2315 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 7 0 0 0 5 - -# Parameters are provided -1 - -_PB_NI _PB_NJ _PB_NK _PB_NL _PB_NM - - -# Number of statements -6 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -6 9 2 0 0 5 -# e/i| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 1 0 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 14 5 2 0 5 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 12 3 2 0 5 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == E - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -E[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -9 10 3 0 0 5 -# e/i| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 17 7 3 0 5 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 2.3 Access -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == E - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -WRITE -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == E - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 9 ## Arr == A - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## [2] == k - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 10 ## Arr == B - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -E[i][j] += A[i][k] * B[k][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -6 9 2 0 0 5 -# e/i| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -5 14 5 2 0 5 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 3.3 Access -WRITE -3 12 3 2 0 5 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 12 ## Arr == F - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -F[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 4 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -9 10 3 0 0 5 -# e/i| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 0 1 0 0 0 -1 ## -i+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 1 0 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 0 0 1 -1 ## -k+_PB_NM-1 >= 0 - 1 0 0 0 0 0 0 0 1 -1 ## _PB_NM-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -7 17 7 3 0 5 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 4.3 Access -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 12 ## Arr == F - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -WRITE -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 12 ## Arr == F - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 14 ## Arr == C - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## [2] == k - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 15 ## Arr == D - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -F[i][j] += C[i][k] * D[k][j]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -6 9 2 0 0 5 -# e/i| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 14 5 2 0 5 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -3 12 3 2 0 5 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 16 ## Arr == G - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -G[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -9 10 3 0 0 5 -# e/i| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 17 7 3 0 5 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 6.3 Access -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 16 ## Arr == G - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -WRITE -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 16 ## Arr == G - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == E - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## [2] == k - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 12 ## Arr == F - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -G[i][j] += E[i][k] * F[k][j]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -16 -# Mapping array-identifiers/array-names -1 i -2 _PB_NI -3 j -4 _PB_NJ -5 E -6 SCALAR_VAL -7 k -8 _PB_NK -9 A -10 B -11 _PB_NL -12 F -13 _PB_NM -14 C -15 D -16 G - - - -# File name -(null) -# Starting line and column -93 0 -# Ending line and column -117 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 5 -Parameters: _PB_NI _PB_NJ _PB_NK _PB_NL _PB_NM -S1 "E[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[7 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -E[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S2 "E[i][j] += A[i][k] * B[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[8 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -E[i][j] -A[i][k] -B[k][j] -Write accesses -E[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S3 "F[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[7 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -F[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S4 "F[i][j] += C[i][k] * D[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[8 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -F[i][j] -C[i][k] -D[k][j] -Write accesses -F[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S5 "G[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[7 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S5): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -G[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "G[i][j] += E[i][k] * F[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[8 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S6): (2, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -G[i][j] -E[i][k] -F[k][j] -Write accesses -G[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: G -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 2 from S3 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: F -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 3 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: F -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 4 from S6 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: G -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 5 from S1 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: E -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 6 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: E -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 7 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: F -Dependence polyhedron -Set #1 -[11 dims; 10 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 8 from S2 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: E -Dependence polyhedron -Set #1 -[11 dims; 10 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 9 from S4 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: F -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: E -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 11 from S6 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: G -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 12 from S4 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: F -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 13 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: E -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 14 from S4 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: F -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 15 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: G -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 16 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: E -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S5 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: G -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 18 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: E -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 19 from S3 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: F -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S5): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (2, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 6 -[pluto] Total number of loops: 15 -[pluto] Number of deps: 19 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 5 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 5 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 3 - SCC 5: size: 1: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[5 dims; 5 constraints] -c_m-1 >= 0 -c_l-1 >= 0 -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 9 dep(s) satisfied -h(S1) = 2, h(S2) = 3, h(S3) = 0, h(S4) = 1, h(S5) = 0, h(S6) = 3 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 1; num_constraints: 15 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 2; num_constraints: 15 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 3; num_constraints: 15 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 4; num_constraints: 8 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 5; num_constraints: 15 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 6; num_constraints: 15 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 7; num_constraints: 15 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 8; num_constraints: 15 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 9; num_constraints: 8 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 10; num_constraints: 8 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 11; num_constraints: 8 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 12; num_constraints: 8 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 13; num_constraints: 8 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 14; num_constraints: 8 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 15; num_constraints: 8 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 16; num_constraints: 8 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 17; num_constraints: 15 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 18; num_constraints: 15 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 19; num_constraints: 15 - After dep 4; num_constraints: 8 - After dep 8; num_constraints: 23 - After dep 9; num_constraints: 31 - After dep 10; num_constraints: 39 - After dep 11; num_constraints: 47 - After dep 12; num_constraints: 55 - After dep 13; num_constraints: 63 - After dep 14; num_constraints: 71 - After dep 15; num_constraints: 79 - After dep 16; num_constraints: 87 - After all dependences: num constraints: 24, num variables: 30 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[30 dims; 1 constraints] -c_o >= 0 - -Set #1 -[30 dims; 1 constraints] -c_p >= 0 - -Set #1 -[30 dims; 1 constraints] -c_o+c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[30 dims; 1 constraints] -c_s >= 0 - -Set #1 -[30 dims; 1 constraints] -c_t >= 0 - -Set #1 -[30 dims; 1 constraints] --c_u >= 0 - -Set #1 -[30 dims; 1 constraints] -c_s+c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[30 dims; 1 constraints] -c_w >= 0 - -Set #1 -[30 dims; 1 constraints] -c_x >= 0 - -Set #1 -[30 dims; 1 constraints] -c_w+c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 3 disjuncts -Set #1 -[30 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_| >= 0 - -Set #1 -[30 dims; 1 constraints] -c_} >= 0 - -Set #1 -[30 dims; 1 constraints] -c_{+c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[30 dims; 1 constraints] -c_ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_+c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[30 dims; 1 constraints] -c_ƒ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_… >= 0 - -Set #1 -[30 dims; 1 constraints] -c_ƒ+c_„+c_…-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[30 dims; 6 constraints] - +c_o +c_p -1 >= 0 - +c_s +c_t -c_u -1 >= 0 - +c_w +c_x -1 >= 0 - +c_{ +c_| +c_} -1 >= 0 - +c_ +c_€ -1 >= 0 - +c_ƒ +c_„ +c_… -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (30 variables, 66 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 66 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = i, h(S2) = i, h(S3) = i, h(S4) = i, h(S5) = i, h(S6) = i -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_p >= 0 - -Set #1 -[30 dims; 1 constraints] -c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[30 dims; 1 constraints] -c_t >= 0 - -Set #1 -[30 dims; 1 constraints] --c_u >= 0 - -Set #1 -[30 dims; 1 constraints] -c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_x >= 0 - -Set #1 -[30 dims; 1 constraints] -c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[30 dims; 1 constraints] -c_| >= 0 - -Set #1 -[30 dims; 1 constraints] -c_} >= 0 - -Set #1 -[30 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[30 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_… >= 0 - -Set #1 -[30 dims; 1 constraints] -c_„+c_…-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -linear independence constraints -[30 dims; 6 constraints] - +c_p -1 >= 0 - +c_t -c_u -1 >= 0 - +c_x -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ -1 >= 0 - +c_„ +c_… -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (30 variables, 66 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 66 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = j, h(S5) = j, h(S6) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[30 dims; 1 constraints] --c_u >= 0 - -Set #1 -[30 dims; 1 constraints] --c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_} >= 0 - -Set #1 -[30 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_„-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S6 -linear independence constraints -[30 dims; 3 constraints] - -c_u -1 >= 0 - +c_} -1 >= 0 - +c_„ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (30 variables, 60 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 60 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 2 hyperplane(s) found -T(S1): (2, i, j) -loop types (scalar, loop, loop) - -T(S2): (3, i, j) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, i, j) -loop types (scalar, loop, loop) - -T(S5): (0, i, j) -loop types (scalar, loop, loop) - -T(S6): (3, i, k) -loop types (scalar, loop, loop) - -[pluto] pluto_diamond_tile - After dep 4; num_constraints: 8 - After dep 8; num_constraints: 23 - After dep 9; num_constraints: 31 - After dep 10; num_constraints: 39 - After dep 11; num_constraints: 47 - After dep 12; num_constraints: 55 - After dep 13; num_constraints: 63 - After dep 14; num_constraints: 71 - After dep 15; num_constraints: 79 - After dep 16; num_constraints: 87 - After all dependences: num constraints: 24, num variables: 30 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 1 - After dep 8; num_constraints: 15 - After dep 9; num_constraints: 23 - After dep 10; num_constraints: 31 - After dep 12; num_constraints: 39 - After dep 13; num_constraints: 47 - After dep 14; num_constraints: 55 - After dep 16; num_constraints: 63 - After all dependences: num constraints: 21, num variables: 30 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[30 dims; 1 constraints] --c_u >= 0 - -Set #1 -[30 dims; 1 constraints] --c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_} >= 0 - -Set #1 -[30 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_„-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S6 -linear independence constraints -[30 dims; 3 constraints] - -c_u -1 >= 0 - +c_} -1 >= 0 - +c_„ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (30 variables, 57 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 57 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (2, i, j) -loop types (scalar, loop, loop) - -T(S2): (3, i, j) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, i, j) -loop types (scalar, loop, loop) - -T(S5): (0, i, j) -loop types (scalar, loop, loop) - -T(S6): (3, i, k) -loop types (scalar, loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 3 - SCC 5: size: 1: max stmt dim: 2 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 3 and id 4 -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 2 - After dep 9; num_constraints: 8 - After dep 10; num_constraints: 16 - After dep 12; num_constraints: 24 - After dep 13; num_constraints: 32 - After dep 14; num_constraints: 40 - After dep 16; num_constraints: 48 - After all dependences: num constraints: 11, num variables: 30 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_u >= 0 - -Set #1 -[30 dims; 1 constraints] -c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_} >= 0 - -Set #1 -[30 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[30 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[30 dims; 1 constraints] -c_„-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S6 -linear independence constraints -[30 dims; 3 constraints] - +c_u -1 >= 0 - +c_} -1 >= 0 - +c_„ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (30 variables, 47 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 47 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = k, h(S3) = 0, h(S4) = k, h(S5) = 0, h(S6) = j -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (2, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (3, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S4): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S5): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S6): (3, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 6 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (2, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (3, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S4): (1, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S5): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S6): (3, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S1, } -(t2, t3, t4, t5, ) with stmts {S2, S6, } -(t2, t3, ) with stmts {S3, S5, } -(t2, t3, t4, t5, ) with stmts {S4, } -[plutot5 {loop with stmts: S1, } -t4 {loop with stmts: S1, } -t9 {loop with stmts: S2, } -t7 {loop with stmts: S2, } -t6 {loop with stmts: S2, } -t7 {loop with stmts: S2, } -t9 {loop with stmts: S6, } -t7 {loop with stmts: S6, } -t6 {loop with stmts: S6, } -t5 {loop with stmts: S3, S5, } -t4 {loop with stmts: S3, S5, } -t9 {loop with stmts: S4, } -t7 {loop with stmts: S4, } -t6 {loop with stmts: S4, } -t7 {loop with stmts: S4, } -_tile] Innermost tilable bands -(t2, t3, ) with stmts {S1, } -(t2, t3, t4, t5, ) with stmts {S2, S6, } -(t2, t3, ) with stmts {S3, S5, } -(t2, t3, t4, t5, ) with stmts {S4, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 6 dep(s) satisfied -[Pluto] After tiling: -T(S1): (2, i/32, j/32, i, j, 1, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (3, i/32, j/32, 0, k/32, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -T(S3): (0, i/32, j/32, i, j, 0, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, i/32, j/32, 0, k/32, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -T(S5): (0, i/32, j/32, i, j, 0, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S6): (3, i/32, k/32, 1, j/32, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Stmts in bands 0 and 1 are distributed in tile space -Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: -6 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto-intra-tile-opt] Score for loop 2: -44 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: 18 -[pluto-intra-tile-opt] Score for loop 1: -6 -[pluto-intra-tile-opt] Score for loop 2: -44 -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 24 -[pluto-intra-tile-opt] Score for loop 1: -64 -Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: -6 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto-intra-tile-opt] Score for loop 2: -44 -[pluto] intra_tile_opt: loop to be made innermost: [pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (2, i/32, j/32, i, j, 1, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (3, i/32, j/32, 0, k/32, i, 0, k, j) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -T(S3): (0, i/32, j/32, i, j, 0, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, i/32, j/32, 0, k/32, i, 0, k, j) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -T(S5): (0, i/32, j/32, i, j, 0, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S6): (3, i/32, k/32, 1, j/32, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(4,9), S2(6,9), S3(4,9), S4(6,9), S5(4,9), S6(6,9), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to 3mm.origin.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.004811s -[pluto] Auto-transformation time: 0.046425s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.004230s -[pluto] Code generation time: 0.121549s -[pluto] Other/Misc time: 0.279103s -[pluto] Total time: 0.451888s -[pluto] All times: 0.004811 0.046425 0.121549 0.279103 diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.polymer.mlir b/example/polybench/split-and-merge/3mm/3mm.origin.polymer.mlir deleted file mode 100644 index 406f4c59..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.polymer.mlir +++ /dev/null @@ -1,425 +0,0 @@ -#map0 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#set = affine_set<()[s0, s1, s2, s3, s4] : (s0 - 1 >= 0, s1 - 1 >= 0, s2 - 1 >= 0, s3 - 1 >= 0, s4 - 1 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("G\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2000_i32 = constant 2000 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<2000xf64> - %1 = memref.cast %0 : memref<2000xf64> to memref - %2 = memref.alloca() : memref<2400xf64> - %3 = memref.cast %2 : memref<2400xf64> to memref - %4 = memref.alloca() : memref<2400xf64> - %5 = memref.cast %4 : memref<2400xf64> to memref - %6 = memref.alloc() : memref<1600x1800xf64> - %7 = memref.alloc() : memref<1600x2000xf64> - %8 = memref.alloc() : memref<2000x1800xf64> - %9 = memref.alloc() : memref<1800x2200xf64> - %10 = memref.alloc() : memref<1800x2400xf64> - %11 = memref.alloc() : memref<2400x2200xf64> - %12 = memref.alloc() : memref<1600x2200xf64> - %13 = memref.cast %7 : memref<1600x2000xf64> to memref - %14 = memref.cast %8 : memref<2000x1800xf64> to memref - %15 = memref.cast %10 : memref<1800x2400xf64> to memref - %16 = memref.cast %11 : memref<2400x2200xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %13, %14, %15, %16) : (i32, i32, i32, i32, i32, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %17 = memref.cast %6 : memref<1600x1800xf64> to memref - %18 = memref.cast %9 : memref<1800x2200xf64> to memref - %19 = memref.cast %12 : memref<1600x2200xf64> to memref - call @kernel_3mm_opt(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %17, %13, %14, %18, %15, %16, %19, %1, %3, %5) : (i32, i32, i32, i32, i32, memref, memref, memref, memref, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %20 = cmpi sgt, %arg0, %c42_i32 : i32 - %21 = scf.if %20 -> (i1) { - %22 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %23 = llvm.load %22 : !llvm.ptr> - %24 = llvm.mlir.addressof @str0 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @strcmp(%23, %25) : (!llvm.ptr, !llvm.ptr) -> i32 - %27 = trunci %26 : i32 to i1 - %28 = xor %27, %true : i1 - scf.yield %28 : i1 - } else { - scf.yield %false : i1 - } - scf.if %21 { - call @print_array(%c1600_i32, %c2200_i32, %19) : (i32, i32, memref) -> () - } - memref.dealloc %6 : memref<1600x1800xf64> - memref.dealloc %7 : memref<1600x2000xf64> - memref.dealloc %8 : memref<2000x1800xf64> - memref.dealloc %9 : memref<1800x2200xf64> - memref.dealloc %10 : memref<1800x2400xf64> - memref.dealloc %11 : memref<2400x2200xf64> - memref.dealloc %12 : memref<1600x2200xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref) { - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c5_i32 = constant 5 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg9 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg2 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = muli %arg10, %arg11 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg0, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg5[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg9 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg11 = %c0 to %5 step %c1 iter_args(%arg12 = %c0_i32) -> (i32) { - %8 = index_cast %arg12 : i32 to index - %9 = addi %arg12, %c1_i32 : i32 - %10 = muli %arg10, %9 : i32 - %11 = addi %10, %c2_i32 : i32 - %12 = remi_signed %11, %arg1 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = muli %arg1, %c5_i32 : i32 - %15 = sitofp %14 : i32 to f64 - %16 = divf %13, %15 : f64 - memref.store %16, %arg6[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg10, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg9 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg4 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c3_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg3 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg3, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg7[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg9 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg9, %arg4 : i32 - scf.condition(%4) %arg9 : i32 - } do { - ^bb0(%arg9: i32): // no predecessors - %4 = index_cast %arg9 : i32 to index - %5 = scf.while (%arg10 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg10, %arg3 : i32 - scf.condition(%7) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %7 = index_cast %arg10 : i32 to index - %8 = addi %arg10, %c2_i32 : i32 - %9 = muli %arg9, %8 : i32 - %10 = addi %9, %c2_i32 : i32 - %11 = remi_signed %10, %arg2 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = muli %arg2, %c5_i32 : i32 - %14 = sitofp %13 : i32 to f64 - %15 = divf %12, %14 : f64 - memref.store %15, %arg8[%4, %7] : memref - %16 = addi %arg10, %c1_i32 : i32 - scf.yield %16 : i32 - } - %6 = addi %arg9, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref, %arg13: memref, %arg14: memref) { - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg4 : i32 to index - %4 = index_cast %arg0 : i32 to index - affine.for %arg15 = 0 to %4 { - affine.for %arg16 = 0 to %0 { - call @S0(%arg5, %arg15, %arg16) : (memref, index, index) -> () - affine.for %arg17 = 0 to %1 { - call @S1(%arg14, %arg17, %arg7, %arg16, %arg6, %arg15) : (memref, index, memref, index, memref, index) -> () - call @S2(%arg5, %arg15, %arg16, %arg14, %arg17) : (memref, index, index, memref, index) -> () - } - } - } - affine.for %arg15 = 0 to %0 { - affine.for %arg16 = 0 to %2 { - call @S3(%arg8, %arg15, %arg16) : (memref, index, index) -> () - affine.for %arg17 = 0 to %3 { - call @S4(%arg14, %arg17, %arg10, %arg16, %arg9, %arg15) : (memref, index, memref, index, memref, index) -> () - call @S5(%arg8, %arg15, %arg16, %arg14, %arg17) : (memref, index, index, memref, index) -> () - } - } - } - affine.for %arg15 = 0 to %4 { - affine.for %arg16 = 0 to %2 { - call @S6(%arg11, %arg15, %arg16) : (memref, index, index) -> () - affine.for %arg17 = 0 to %0 { - call @S7(%arg14, %arg17, %arg8, %arg16, %arg5, %arg15) : (memref, index, memref, index, memref, index) -> () - call @S8(%arg11, %arg15, %arg16, %arg14, %arg17) : (memref, index, index, memref, index) -> () - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @kernel_3mm_opt(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref, %arg12: memref, %arg13: memref, %arg14: memref) { - %0 = index_cast %arg0 : i32 to index - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %arg2 : i32 to index - %3 = index_cast %arg3 : i32 to index - %4 = index_cast %arg4 : i32 to index - affine.if #set()[%0, %1, %2, %3, %4] { - affine.for %arg15 = 0 to #map0()[%0] { - affine.for %arg16 = 0 to #map0()[%3] { - affine.for %arg17 = #map1(%arg15) to min #map2(%arg15)[%0] { - affine.for %arg18 = #map1(%arg16) to min #map2(%arg16)[%3] { - call @S6(%arg11, %arg17, %arg18) : (memref, index, index) -> () - } - } - } - } - affine.for %arg15 = 0 to #map0()[%1] { - affine.for %arg16 = 0 to #map0()[%3] { - affine.for %arg17 = #map1(%arg15) to min #map2(%arg15)[%1] { - affine.for %arg18 = #map1(%arg16) to min #map2(%arg16)[%3] { - call @S3(%arg8, %arg17, %arg18) : (memref, index, index) -> () - } - } - } - } - affine.for %arg15 = 0 to #map0()[%0] { - affine.for %arg16 = 0 to #map0()[%1] { - affine.for %arg17 = #map1(%arg15) to min #map2(%arg15)[%0] { - affine.for %arg18 = #map1(%arg16) to min #map2(%arg16)[%1] { - call @S0(%arg5, %arg17, %arg18) : (memref, index, index) -> () - } - } - } - } - affine.for %arg15 = 0 to #map0()[%2] { - affine.for %arg16 = 0 to #map0()[%0] { - affine.for %arg17 = #map1(%arg15) to min #map2(%arg15)[%2] { - affine.for %arg18 = #map1(%arg16) to min #map2(%arg16)[%0] { - affine.for %arg19 = 0 to %1 { - call @S1(%arg14, %arg17, %arg7, %arg19, %arg6, %arg18) : (memref, index, memref, index, memref, index) -> () - call @S2(%arg5, %arg18, %arg19, %arg14, %arg17) : (memref, index, index, memref, index) -> () - } - } - } - } - } - affine.for %arg15 = 0 to #map0()[%1] { - affine.for %arg16 = 0 to #map0()[%4] { - affine.for %arg17 = #map1(%arg15) to min #map2(%arg15)[%1] { - affine.for %arg18 = #map1(%arg16) to min #map2(%arg16)[%4] { - affine.for %arg19 = 0 to %3 { - call @S4(%arg14, %arg18, %arg10, %arg19, %arg9, %arg17) : (memref, index, memref, index, memref, index) -> () - call @S5(%arg8, %arg17, %arg19, %arg14, %arg18) : (memref, index, index, memref, index) -> () - } - } - } - } - } - affine.for %arg15 = 0 to #map0()[%1] { - affine.for %arg16 = 0 to #map0()[%0] { - affine.for %arg17 = #map1(%arg15) to min #map2(%arg15)[%1] { - affine.for %arg18 = #map1(%arg16) to min #map2(%arg16)[%0] { - affine.for %arg19 = 0 to %3 { - call @S7(%arg14, %arg17, %arg8, %arg19, %arg5, %arg18) : (memref, index, memref, index, memref, index) -> () - call @S8(%arg11, %arg18, %arg19, %arg14, %arg17) : (memref, index, index, memref, index) -> () - } - } - } - } - } - } - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, array<4 x i8>)>>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr, ptr, ptr, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.polymer.parallel.mlir b/example/polybench/split-and-merge/3mm/3mm.origin.polymer.parallel.mlir deleted file mode 100644 index 51e9eb04..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.polymer.parallel.mlir +++ /dev/null @@ -1,368 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, 1800, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1600, d0 * 32)> -#map4 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (1800, d0 * 32)> -#map6 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map7 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -#map8 = affine_map<(d0) -> (2000, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("G\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2000_i32 = constant 2000 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c8000_i32 = constant 8000 : i32 - %c1800 = constant 1800 : index - %c9000_i32 = constant 9000 : i32 - %c11000_i32 = constant 11000 : i32 - %c10000_i32 = constant 10000 : i32 - %cst = constant 0.000000e+00 : f64 - %0 = memref.alloc() : memref<1600x1800xf64> - %1 = memref.alloc() : memref<1600x2000xf64> - %2 = memref.alloc() : memref<2000x1800xf64> - %3 = memref.alloc() : memref<1800x2200xf64> - %4 = memref.alloc() : memref<1800x2400xf64> - %5 = memref.alloc() : memref<2400x2200xf64> - %6 = memref.alloc() : memref<1600x2200xf64> - %7:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %14 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%14) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %14 = index_cast %arg3 : i32 to index - %15 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %17 = cmpi slt, %arg4, %c2000_i32 : i32 - scf.condition(%17) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %17 = index_cast %arg4 : i32 to index - %18 = muli %arg3, %arg4 : i32 - %19 = addi %18, %c1_i32 : i32 - %20 = remi_signed %19, %c1600_i32 : i32 - %21 = sitofp %20 : i32 to f64 - %22 = sitofp %c8000_i32 : i32 to f64 - %23 = divf %21, %22 : f64 - memref.store %23, %1[%14, %17] : memref<1600x2000xf64> - %24 = addi %arg4, %c1_i32 : i32 - scf.yield %24 : i32 - } - %16 = addi %arg3, %c1_i32 : i32 - scf.yield %16 : i32 - } - %8:2 = scf.while (%arg2 = %7#0) : (i32) -> (i32, i32) { - %14 = cmpi slt, %arg2, %c2000_i32 : i32 - scf.condition(%14) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %14 = index_cast %arg3 : i32 to index - %15 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %17 = index_cast %arg5 : i32 to index - %18 = addi %arg5, %c1_i32 : i32 - %19 = muli %arg3, %18 : i32 - %20 = addi %19, %c2_i32 : i32 - %21 = remi_signed %20, %c1800_i32 : i32 - %22 = sitofp %21 : i32 to f64 - %23 = sitofp %c9000_i32 : i32 to f64 - %24 = divf %22, %23 : f64 - memref.store %24, %2[%14, %17] : memref<2000x1800xf64> - scf.yield %18 : i32 - } - %16 = addi %arg3, %c1_i32 : i32 - scf.yield %16 : i32 - } - %9:2 = scf.while (%arg2 = %8#0) : (i32) -> (i32, i32) { - %14 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%14) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %14 = index_cast %arg3 : i32 to index - %15 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %17 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%17) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %17 = index_cast %arg4 : i32 to index - %18 = addi %arg4, %c3_i32 : i32 - %19 = muli %arg3, %18 : i32 - %20 = remi_signed %19, %c2200_i32 : i32 - %21 = sitofp %20 : i32 to f64 - %22 = sitofp %c11000_i32 : i32 to f64 - %23 = divf %21, %22 : f64 - memref.store %23, %4[%14, %17] : memref<1800x2400xf64> - %24 = addi %arg4, %c1_i32 : i32 - scf.yield %24 : i32 - } - %16 = addi %arg3, %c1_i32 : i32 - scf.yield %16 : i32 - } - %10 = scf.while (%arg2 = %9#0) : (i32) -> i32 { - %14 = cmpi slt, %arg2, %c2400_i32 : i32 - scf.condition(%14) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %14 = index_cast %arg2 : i32 to index - %15 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %17 = cmpi slt, %arg3, %c2200_i32 : i32 - scf.condition(%17) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %17 = index_cast %arg3 : i32 to index - %18 = addi %arg3, %c2_i32 : i32 - %19 = muli %arg2, %18 : i32 - %20 = addi %19, %c2_i32 : i32 - %21 = remi_signed %20, %c2000_i32 : i32 - %22 = sitofp %21 : i32 to f64 - %23 = sitofp %c10000_i32 : i32 to f64 - %24 = divf %22, %23 : f64 - memref.store %24, %5[%14, %17] : memref<2400x2200xf64> - %25 = addi %arg3, %c1_i32 : i32 - scf.yield %25 : i32 - } - %16 = addi %arg2, %c1_i32 : i32 - scf.yield %16 : i32 - } - call @polybench_timer_start() : () -> () - %11 = memref.cast %6 : memref<1600x2200xf64> to memref - affine.for %arg2 = 0 to 107 { - affine.for %arg3 = 0 to 69 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - affine.store %cst, %3[%arg4, %arg5] : memref<1800x2200xf64> - affine.store %cst, %6[%arg4, %arg5] : memref<1600x2200xf64> - } - } - affine.for %arg4 = max #map3(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - affine.store %cst, %3[%arg4, %arg5] : memref<1800x2200xf64> - } - } - affine.for %arg4 = max #map5(%arg2) to min #map6(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - affine.store %cst, %6[%arg4, %arg5] : memref<1600x2200xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 69 { - affine.for %arg4 = 0 to 75 { - affine.for %arg5 = #map0(%arg2) to min #map4(%arg2) { - affine.for %arg6 = #map0(%arg4) to min #map7(%arg4) { - affine.for %arg7 = #map0(%arg3) to min #map2(%arg3) { - %14 = affine.load %3[%arg5, %arg7] : memref<1800x2200xf64> - %15 = affine.load %4[%arg5, %arg6] : memref<1800x2400xf64> - %16 = affine.load %5[%arg6, %arg7] : memref<2400x2200xf64> - %17 = mulf %15, %16 {scop.splittable = 1 : index} : f64 - %18 = addf %14, %17 : f64 - affine.store %18, %3[%arg5, %arg7] : memref<1800x2200xf64> - } - } - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map6(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map4(%arg3) { - affine.store %cst, %0[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map0(%arg2) to min #map6(%arg2) { - affine.for %arg6 = #map0(%arg4) to min #map8(%arg4) { - affine.for %arg7 = #map0(%arg3) to min #map4(%arg3) { - %14 = affine.load %0[%arg5, %arg7] : memref<1600x1800xf64> - %15 = affine.load %1[%arg5, %arg6] : memref<1600x2000xf64> - %16 = affine.load %2[%arg6, %arg7] : memref<2000x1800xf64> - %17 = mulf %15, %16 {scop.splittable = 0 : index} : f64 - %18 = addf %14, %17 : f64 - affine.store %18, %0[%arg5, %arg7] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg4 = 0 to 69 { - affine.for %arg5 = #map0(%arg2) to min #map6(%arg2) { - affine.for %arg6 = #map0(%arg3) to min #map4(%arg3) { - affine.for %arg7 = #map0(%arg4) to min #map2(%arg4) { - %14 = affine.load %6[%arg5, %arg7] : memref<1600x2200xf64> - %15 = affine.load %0[%arg5, %arg6] : memref<1600x1800xf64> - %16 = affine.load %3[%arg6, %arg7] : memref<1800x2200xf64> - %17 = mulf %15, %16 {scop.splittable = 2 : index} : f64 - %18 = addf %14, %17 : f64 - affine.store %18, %6[%arg5, %arg7] : memref<1600x2200xf64> - } - } - } - } - } - } {scop.parallelizable} - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %12 = cmpi sgt, %arg0, %c42_i32 : i32 - %13 = scf.if %12 -> (i1) { - %14 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %15 = llvm.load %14 : !llvm.ptr> - %16 = llvm.mlir.addressof @str0 : !llvm.ptr> - %17 = llvm.getelementptr %16[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %18 = llvm.call @strcmp(%15, %17) : (!llvm.ptr, !llvm.ptr) -> i32 - %19 = trunci %18 : i32 to i1 - %20 = xor %19, %true : i1 - scf.yield %20 : i1 - } else { - scf.yield %false : i1 - } - scf.if %13 { - call @print_array(%c1600_i32, %c2200_i32, %11) : (i32, i32, memref) -> () - } - memref.dealloc %0 : memref<1600x1800xf64> - memref.dealloc %1 : memref<1600x2000xf64> - memref.dealloc %2 : memref<2000x1800xf64> - memref.dealloc %3 : memref<1800x2200xf64> - memref.dealloc %4 : memref<1800x2400xf64> - memref.dealloc %5 : memref<2400x2200xf64> - memref.dealloc %6 : memref<1600x2200xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.polymer.seq.mlir b/example/polybench/split-and-merge/3mm/3mm.origin.polymer.seq.mlir deleted file mode 100644 index b7f182da..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.polymer.seq.mlir +++ /dev/null @@ -1,405 +0,0 @@ -#map0 = affine_map<()[s0, s1] -> ((s0 + s1 - 2) floordiv 32 + 1)> -#map1 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map2 = affine_map<(d0) -> (d0 * 32)> -#map3 = affine_map<(d0)[s0, s1] -> (s0, s1, d0 * 32 + 32)> -#map4 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#map5 = affine_map<(d0)[s0] -> (s0, d0 * 32)> -#set = affine_set<()[s0, s1, s2, s3, s4] : (s0 - 1 >= 0, s1 - 1 >= 0, s2 - 1 >= 0, s3 - 1 >= 0, s4 - 1 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("G\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2000_i32 = constant 2000 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloc() : memref<1600x1800xf64> - %1 = memref.alloc() : memref<1600x2000xf64> - %2 = memref.alloc() : memref<2000x1800xf64> - %3 = memref.alloc() : memref<1800x2200xf64> - %4 = memref.alloc() : memref<1800x2400xf64> - %5 = memref.alloc() : memref<2400x2200xf64> - %6 = memref.alloc() : memref<1600x2200xf64> - %7 = memref.cast %1 : memref<1600x2000xf64> to memref - %8 = memref.cast %2 : memref<2000x1800xf64> to memref - %9 = memref.cast %4 : memref<1800x2400xf64> to memref - %10 = memref.cast %5 : memref<2400x2200xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %7, %8, %9, %10) : (i32, i32, i32, i32, i32, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %11 = memref.cast %0 : memref<1600x1800xf64> to memref - %12 = memref.cast %3 : memref<1800x2200xf64> to memref - %13 = memref.cast %6 : memref<1600x2200xf64> to memref - call @kernel_3mm_opt(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %11, %7, %8, %12, %9, %10, %13) : (i32, i32, i32, i32, i32, memref, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %14 = cmpi sgt, %arg0, %c42_i32 : i32 - %15 = scf.if %14 -> (i1) { - %16 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %17 = llvm.load %16 : !llvm.ptr> - %18 = llvm.mlir.addressof @str0 : !llvm.ptr> - %19 = llvm.getelementptr %18[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %20 = llvm.call @strcmp(%17, %19) : (!llvm.ptr, !llvm.ptr) -> i32 - %21 = trunci %20 : i32 to i1 - %22 = xor %21, %true : i1 - scf.yield %22 : i1 - } else { - scf.yield %false : i1 - } - scf.if %15 { - call @print_array(%c1600_i32, %c2200_i32, %13) : (i32, i32, memref) -> () - } - memref.dealloc %0 : memref<1600x1800xf64> - memref.dealloc %1 : memref<1600x2000xf64> - memref.dealloc %2 : memref<2000x1800xf64> - memref.dealloc %3 : memref<1800x2200xf64> - memref.dealloc %4 : memref<1800x2400xf64> - memref.dealloc %5 : memref<2400x2200xf64> - memref.dealloc %6 : memref<1600x2200xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref) { - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c5_i32 = constant 5 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg9 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg2 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = muli %arg10, %arg11 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg0, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg5[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg9 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg11 = %c0 to %5 step %c1 iter_args(%arg12 = %c0_i32) -> (i32) { - %8 = index_cast %arg12 : i32 to index - %9 = addi %arg12, %c1_i32 : i32 - %10 = muli %arg10, %9 : i32 - %11 = addi %10, %c2_i32 : i32 - %12 = remi_signed %11, %arg1 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = muli %arg1, %c5_i32 : i32 - %15 = sitofp %14 : i32 to f64 - %16 = divf %13, %15 : f64 - memref.store %16, %arg6[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg10, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg9 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg4 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c3_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg3 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg3, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg7[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg9 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg9, %arg4 : i32 - scf.condition(%4) %arg9 : i32 - } do { - ^bb0(%arg9: i32): // no predecessors - %4 = index_cast %arg9 : i32 to index - %5 = scf.while (%arg10 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg10, %arg3 : i32 - scf.condition(%7) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %7 = index_cast %arg10 : i32 to index - %8 = addi %arg10, %c2_i32 : i32 - %9 = muli %arg9, %8 : i32 - %10 = addi %9, %c2_i32 : i32 - %11 = remi_signed %10, %arg2 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = muli %arg2, %c5_i32 : i32 - %14 = sitofp %13 : i32 to f64 - %15 = divf %12, %14 : f64 - memref.store %15, %arg8[%4, %7] : memref - %16 = addi %arg10, %c1_i32 : i32 - scf.yield %16 : i32 - } - %6 = addi %arg9, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref) { - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg4 : i32 to index - %4 = index_cast %arg0 : i32 to index - affine.for %arg12 = 0 to %4 { - affine.for %arg13 = 0 to %0 { - call @S0(%arg5, %arg12, %arg13) : (memref, index, index) -> () - affine.for %arg14 = 0 to %1 { - call @S1(%arg5, %arg12, %arg13, %arg7, %arg14, %arg6) : (memref, index, index, memref, index, memref) -> () - } - } - } - affine.for %arg12 = 0 to %0 { - affine.for %arg13 = 0 to %2 { - call @S2(%arg8, %arg12, %arg13) : (memref, index, index) -> () - affine.for %arg14 = 0 to %3 { - call @S3(%arg8, %arg12, %arg13, %arg10, %arg14, %arg9) : (memref, index, index, memref, index, memref) -> () - } - } - } - affine.for %arg12 = 0 to %4 { - affine.for %arg13 = 0 to %2 { - call @S4(%arg11, %arg12, %arg13) : (memref, index, index) -> () - affine.for %arg14 = 0 to %0 { - call @S5(%arg11, %arg12, %arg13, %arg8, %arg14, %arg5) : (memref, index, index, memref, index, memref) -> () - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @kernel_3mm_opt(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref) { - %0 = index_cast %arg0 : i32 to index - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %arg2 : i32 to index - %3 = index_cast %arg3 : i32 to index - %4 = index_cast %arg4 : i32 to index - affine.if #set()[%0, %1, %2, %3, %4] { - affine.for %arg12 = 0 to #map0()[%0, %1] { - affine.for %arg13 = 0 to #map1()[%3] { - affine.for %arg14 = #map2(%arg12) to min #map3(%arg12)[%0, %1] { - affine.for %arg15 = #map2(%arg13) to min #map4(%arg13)[%3] { - call @S2(%arg8, %arg14, %arg15) : (memref, index, index) -> () - call @S4(%arg11, %arg14, %arg15) : (memref, index, index) -> () - } - } - affine.for %arg14 = max #map5(%arg12)[%0] to min #map4(%arg12)[%1] { - affine.for %arg15 = #map2(%arg13) to min #map4(%arg13)[%3] { - call @S2(%arg8, %arg14, %arg15) : (memref, index, index) -> () - } - } - affine.for %arg14 = max #map5(%arg12)[%1] to min #map4(%arg12)[%0] { - affine.for %arg15 = #map2(%arg13) to min #map4(%arg13)[%3] { - call @S4(%arg11, %arg14, %arg15) : (memref, index, index) -> () - } - } - } - } - affine.for %arg12 = 0 to #map1()[%1] { - affine.for %arg13 = 0 to #map1()[%3] { - affine.for %arg14 = 0 to #map1()[%4] { - affine.for %arg15 = #map2(%arg12) to min #map4(%arg12)[%1] { - affine.for %arg16 = #map2(%arg14) to min #map4(%arg14)[%4] { - affine.for %arg17 = #map2(%arg13) to min #map4(%arg13)[%3] { - call @S3(%arg8, %arg15, %arg17, %arg10, %arg16, %arg9) : (memref, index, index, memref, index, memref) -> () - } - } - } - } - } - } - affine.for %arg12 = 0 to #map1()[%0] { - affine.for %arg13 = 0 to #map1()[%1] { - affine.for %arg14 = #map2(%arg12) to min #map4(%arg12)[%0] { - affine.for %arg15 = #map2(%arg13) to min #map4(%arg13)[%1] { - call @S0(%arg5, %arg14, %arg15) : (memref, index, index) -> () - } - } - } - } - affine.for %arg12 = 0 to #map1()[%0] { - affine.for %arg13 = 0 to #map1()[%1] { - affine.for %arg14 = 0 to #map1()[%2] { - affine.for %arg15 = #map2(%arg12) to min #map4(%arg12)[%0] { - affine.for %arg16 = #map2(%arg14) to min #map4(%arg14)[%2] { - affine.for %arg17 = #map2(%arg13) to min #map4(%arg13)[%1] { - call @S1(%arg5, %arg15, %arg17, %arg7, %arg16, %arg6) : (memref, index, index, memref, index, memref) -> () - } - } - } - } - affine.for %arg14 = 0 to #map1()[%3] { - affine.for %arg15 = #map2(%arg12) to min #map4(%arg12)[%0] { - affine.for %arg16 = #map2(%arg13) to min #map4(%arg13)[%1] { - affine.for %arg17 = #map2(%arg14) to min #map4(%arg14)[%3] { - call @S5(%arg11, %arg15, %arg17, %arg8, %arg16, %arg5) : (memref, index, index, memref, index, memref) -> () - } - } - } - } - } - } - } - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/3mm/3mm.origin.splittable.mlir b/example/polybench/split-and-merge/3mm/3mm.origin.splittable.mlir deleted file mode 100644 index 4a58b05a..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.origin.splittable.mlir +++ /dev/null @@ -1,298 +0,0 @@ -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("G\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2000_i32 = constant 2000 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloc() : memref<1600x1800xf64> - %1 = memref.alloc() : memref<1600x2000xf64> - %2 = memref.alloc() : memref<2000x1800xf64> - %3 = memref.alloc() : memref<1800x2200xf64> - %4 = memref.alloc() : memref<1800x2400xf64> - %5 = memref.alloc() : memref<2400x2200xf64> - %6 = memref.alloc() : memref<1600x2200xf64> - %7 = memref.cast %1 : memref<1600x2000xf64> to memref - %8 = memref.cast %2 : memref<2000x1800xf64> to memref - %9 = memref.cast %4 : memref<1800x2400xf64> to memref - %10 = memref.cast %5 : memref<2400x2200xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %7, %8, %9, %10) : (i32, i32, i32, i32, i32, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %11 = memref.cast %0 : memref<1600x1800xf64> to memref - %12 = memref.cast %3 : memref<1800x2200xf64> to memref - %13 = memref.cast %6 : memref<1600x2200xf64> to memref - call @kernel_3mm(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %11, %7, %8, %12, %9, %10, %13) : (i32, i32, i32, i32, i32, memref, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %14 = cmpi sgt, %arg0, %c42_i32 : i32 - %15 = scf.if %14 -> (i1) { - %16 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %17 = llvm.load %16 : !llvm.ptr> - %18 = llvm.mlir.addressof @str0 : !llvm.ptr> - %19 = llvm.getelementptr %18[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %20 = llvm.call @strcmp(%17, %19) : (!llvm.ptr, !llvm.ptr) -> i32 - %21 = trunci %20 : i32 to i1 - %22 = xor %21, %true : i1 - scf.yield %22 : i1 - } else { - scf.yield %false : i1 - } - scf.if %15 { - call @print_array(%c1600_i32, %c2200_i32, %13) : (i32, i32, memref) -> () - } - memref.dealloc %0 : memref<1600x1800xf64> - memref.dealloc %1 : memref<1600x2000xf64> - memref.dealloc %2 : memref<2000x1800xf64> - memref.dealloc %3 : memref<1800x2200xf64> - memref.dealloc %4 : memref<1800x2400xf64> - memref.dealloc %5 : memref<2400x2200xf64> - memref.dealloc %6 : memref<1600x2200xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref) { - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c5_i32 = constant 5 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg9 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg2 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = muli %arg10, %arg11 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg0, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg5[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg9 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg11 = %c0 to %5 step %c1 iter_args(%arg12 = %c0_i32) -> (i32) { - %8 = index_cast %arg12 : i32 to index - %9 = addi %arg12, %c1_i32 : i32 - %10 = muli %arg10, %9 : i32 - %11 = addi %10, %c2_i32 : i32 - %12 = remi_signed %11, %arg1 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = muli %arg1, %c5_i32 : i32 - %15 = sitofp %14 : i32 to f64 - %16 = divf %13, %15 : f64 - memref.store %16, %arg6[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg10, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg9 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg4 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c3_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg3 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg3, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg7[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg9 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg9, %arg4 : i32 - scf.condition(%4) %arg9 : i32 - } do { - ^bb0(%arg9: i32): // no predecessors - %4 = index_cast %arg9 : i32 to index - %5 = scf.while (%arg10 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg10, %arg3 : i32 - scf.condition(%7) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %7 = index_cast %arg10 : i32 to index - %8 = addi %arg10, %c2_i32 : i32 - %9 = muli %arg9, %8 : i32 - %10 = addi %9, %c2_i32 : i32 - %11 = remi_signed %10, %arg2 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = muli %arg2, %c5_i32 : i32 - %14 = sitofp %13 : i32 to f64 - %15 = divf %12, %14 : f64 - memref.store %15, %arg8[%4, %7] : memref - %16 = addi %arg10, %c1_i32 : i32 - scf.yield %16 : i32 - } - %6 = addi %arg9, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg4 : i32 to index - %4 = index_cast %arg0 : i32 to index - affine.for %arg12 = 0 to %4 { - affine.for %arg13 = 0 to %0 { - affine.store %cst, %arg5[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %1 { - %5 = affine.load %arg6[%arg12, %arg14] : memref - %6 = affine.load %arg7[%arg14, %arg13] : memref - %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 - %8 = affine.load %arg5[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg5[%arg12, %arg13] : memref - } - } - } - affine.for %arg12 = 0 to %0 { - affine.for %arg13 = 0 to %2 { - affine.store %cst, %arg8[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %3 { - %5 = affine.load %arg9[%arg12, %arg14] : memref - %6 = affine.load %arg10[%arg14, %arg13] : memref - %7 = mulf %5, %6 {scop.splittable = 1 : index} : f64 - %8 = affine.load %arg8[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg8[%arg12, %arg13] : memref - } - } - } - affine.for %arg12 = 0 to %4 { - affine.for %arg13 = 0 to %2 { - affine.store %cst, %arg11[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %0 { - %5 = affine.load %arg5[%arg12, %arg14] : memref - %6 = affine.load %arg8[%arg14, %arg13] : memref - %7 = mulf %5, %6 {scop.splittable = 2 : index} : f64 - %8 = affine.load %arg11[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg11[%arg12, %arg13] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/3mm/3mm.split-0-1-2.polymer.par.mlir b/example/polybench/split-and-merge/3mm/3mm.split-0-1-2.polymer.par.mlir deleted file mode 100644 index 6572575c..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.split-0-1-2.polymer.par.mlir +++ /dev/null @@ -1,389 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (0, (d0 * 32 - 1999) ceildiv 32)> -#map5 = affine_map<(d0) -> (50, d0 + 1)> -#map6 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> -#map7 = affine_map<(d0, d1) -> (2000, d0 * 32 - d1 * 32 + 32)> -#map8 = affine_map<(d0) -> (0, (d0 * 32 - 1799) ceildiv 32)> -#map9 = affine_map<(d0) -> (75, d0 + 1)> -#map10 = affine_map<(d0, d1) -> (1800, d0 * 32 - d1 * 32 + 32)> -#map11 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("G\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2000_i32 = constant 2000 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c8000_i32 = constant 8000 : i32 - %c1800 = constant 1800 : index - %c9000_i32 = constant 9000 : i32 - %c11000_i32 = constant 11000 : i32 - %c10000_i32 = constant 10000 : i32 - %cst = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2400xf64> - %1 = memref.alloc() : memref<1600x1800xf64> - %2 = memref.alloc() : memref<1600x2000xf64> - %3 = memref.alloc() : memref<2000x1800xf64> - %4 = memref.alloc() : memref<1800x2200xf64> - %5 = memref.alloc() : memref<1800x2400xf64> - %6 = memref.alloc() : memref<2400x2200xf64> - %7 = memref.alloc() : memref<1600x2200xf64> - %8:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %15 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%15) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %15 = index_cast %arg3 : i32 to index - %16 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %18 = cmpi slt, %arg4, %c2000_i32 : i32 - scf.condition(%18) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %18 = index_cast %arg4 : i32 to index - %19 = muli %arg3, %arg4 : i32 - %20 = addi %19, %c1_i32 : i32 - %21 = remi_signed %20, %c1600_i32 : i32 - %22 = sitofp %21 : i32 to f64 - %23 = sitofp %c8000_i32 : i32 to f64 - %24 = divf %22, %23 : f64 - memref.store %24, %2[%15, %18] : memref<1600x2000xf64> - %25 = addi %arg4, %c1_i32 : i32 - scf.yield %25 : i32 - } - %17 = addi %arg3, %c1_i32 : i32 - scf.yield %17 : i32 - } - %9:2 = scf.while (%arg2 = %8#0) : (i32) -> (i32, i32) { - %15 = cmpi slt, %arg2, %c2000_i32 : i32 - scf.condition(%15) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %15 = index_cast %arg3 : i32 to index - %16 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %18 = index_cast %arg5 : i32 to index - %19 = addi %arg5, %c1_i32 : i32 - %20 = muli %arg3, %19 : i32 - %21 = addi %20, %c2_i32 : i32 - %22 = remi_signed %21, %c1800_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c9000_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %3[%15, %18] : memref<2000x1800xf64> - scf.yield %19 : i32 - } - %17 = addi %arg3, %c1_i32 : i32 - scf.yield %17 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %15 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%15) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %15 = index_cast %arg3 : i32 to index - %16 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %18 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%18) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %18 = index_cast %arg4 : i32 to index - %19 = addi %arg4, %c3_i32 : i32 - %20 = muli %arg3, %19 : i32 - %21 = remi_signed %20, %c2200_i32 : i32 - %22 = sitofp %21 : i32 to f64 - %23 = sitofp %c11000_i32 : i32 to f64 - %24 = divf %22, %23 : f64 - memref.store %24, %5[%15, %18] : memref<1800x2400xf64> - %25 = addi %arg4, %c1_i32 : i32 - scf.yield %25 : i32 - } - %17 = addi %arg3, %c1_i32 : i32 - scf.yield %17 : i32 - } - %11 = scf.while (%arg2 = %10#0) : (i32) -> i32 { - %15 = cmpi slt, %arg2, %c2400_i32 : i32 - scf.condition(%15) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %15 = index_cast %arg2 : i32 to index - %16 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %18 = cmpi slt, %arg3, %c2200_i32 : i32 - scf.condition(%18) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %18 = index_cast %arg3 : i32 to index - %19 = addi %arg3, %c2_i32 : i32 - %20 = muli %arg2, %19 : i32 - %21 = addi %20, %c2_i32 : i32 - %22 = remi_signed %21, %c2000_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c10000_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %6[%15, %18] : memref<2400x2200xf64> - %26 = addi %arg3, %c1_i32 : i32 - scf.yield %26 : i32 - } - %17 = addi %arg2, %c1_i32 : i32 - scf.yield %17 : i32 - } - call @polybench_timer_start() : () -> () - %12 = memref.cast %7 : memref<1600x2200xf64> to memref - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 69 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - affine.store %cst, %7[%arg4, %arg5] : memref<1600x2200xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 69 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - affine.store %cst, %4[%arg4, %arg5] : memref<1800x2200xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst, %1[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 113 { - affine.for %arg3 = max #map4(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map7(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %15 = affine.load %2[%arg5, %arg4] : memref<1600x2000xf64> - %16 = affine.load %3[%arg4, %arg6] : memref<2000x1800xf64> - %17 = mulf %15, %16 {scop.splittable = 0 : index} : f64 - affine.store %17, %0[%arg4] : memref<2400xf64> - %18 = affine.load %1[%arg5, %arg6] : memref<1600x1800xf64> - %19 = affine.load %0[%arg4] : memref<2400xf64> - %20 = addf %18, %19 : f64 - affine.store %20, %1[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } {scop.parallelizable} - } - affine.for %arg2 = 0 to 132 { - affine.for %arg3 = max #map8(%arg2) to min #map9(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map10(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map11(%arg3) { - affine.for %arg6 = 0 to 2200 { - %15 = affine.load %5[%arg4, %arg5] : memref<1800x2400xf64> - %16 = affine.load %6[%arg5, %arg6] : memref<2400x2200xf64> - %17 = mulf %15, %16 {scop.splittable = 1 : index} : f64 - affine.store %17, %0[%arg5] : memref<2400xf64> - %18 = affine.load %4[%arg4, %arg6] : memref<1800x2200xf64> - %19 = affine.load %0[%arg5] : memref<2400xf64> - %20 = addf %18, %19 : f64 - affine.store %20, %4[%arg4, %arg6] : memref<1800x2200xf64> - } - } - } - } {scop.parallelizable} - } - affine.for %arg2 = 0 to 107 { - affine.for %arg3 = max #map8(%arg2) to min #map5(%arg2) { - affine.for %arg4 = #map6(%arg2, %arg3) to min #map10(%arg2, %arg3) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2200 { - %15 = affine.load %1[%arg5, %arg4] : memref<1600x1800xf64> - %16 = affine.load %4[%arg4, %arg6] : memref<1800x2200xf64> - %17 = mulf %15, %16 {scop.splittable = 2 : index} : f64 - affine.store %17, %0[%arg4] : memref<2400xf64> - %18 = affine.load %7[%arg5, %arg6] : memref<1600x2200xf64> - %19 = affine.load %0[%arg4] : memref<2400xf64> - %20 = addf %18, %19 : f64 - affine.store %20, %7[%arg5, %arg6] : memref<1600x2200xf64> - } - } - } - } {scop.parallelizable} - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %13 = cmpi sgt, %arg0, %c42_i32 : i32 - %14 = scf.if %13 -> (i1) { - %15 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %16 = llvm.load %15 : !llvm.ptr> - %17 = llvm.mlir.addressof @str0 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @strcmp(%16, %18) : (!llvm.ptr, !llvm.ptr) -> i32 - %20 = trunci %19 : i32 to i1 - %21 = xor %20, %true : i1 - scf.yield %21 : i1 - } else { - scf.yield %false : i1 - } - scf.if %14 { - call @print_array(%c1600_i32, %c2200_i32, %12) : (i32, i32, memref) -> () - } - memref.dealloc %1 : memref<1600x1800xf64> - memref.dealloc %2 : memref<1600x2000xf64> - memref.dealloc %3 : memref<2000x1800xf64> - memref.dealloc %4 : memref<1800x2200xf64> - memref.dealloc %5 : memref<1800x2400xf64> - memref.dealloc %6 : memref<2400x2200xf64> - memref.dealloc %7 : memref<1600x2200xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/3mm/3mm.split-0-1-2.polymer.seq.mlir b/example/polybench/split-and-merge/3mm/3mm.split-0-1-2.polymer.seq.mlir deleted file mode 100644 index 48fac631..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.split-0-1-2.polymer.seq.mlir +++ /dev/null @@ -1,383 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 * 32)> -#map1 = affine_map<(d0) -> (1600, d0 * 32 + 32)> -#map2 = affine_map<(d0) -> (2200, d0 * 32 + 32)> -#map3 = affine_map<(d0) -> (1800, d0 * 32 + 32)> -#map4 = affine_map<(d0) -> (2000, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2400, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("G\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2000_i32 = constant 2000 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c8000_i32 = constant 8000 : i32 - %c1800 = constant 1800 : index - %c9000_i32 = constant 9000 : i32 - %c11000_i32 = constant 11000 : i32 - %c10000_i32 = constant 10000 : i32 - %cst = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2400xf64> - %1 = memref.alloc() : memref<1600x1800xf64> - %2 = memref.alloc() : memref<1600x2000xf64> - %3 = memref.alloc() : memref<2000x1800xf64> - %4 = memref.alloc() : memref<1800x2200xf64> - %5 = memref.alloc() : memref<1800x2400xf64> - %6 = memref.alloc() : memref<2400x2200xf64> - %7 = memref.alloc() : memref<1600x2200xf64> - %8:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %15 = cmpi slt, %arg2, %c1600_i32 : i32 - scf.condition(%15) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %15 = index_cast %arg3 : i32 to index - %16 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %18 = cmpi slt, %arg4, %c2000_i32 : i32 - scf.condition(%18) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %18 = index_cast %arg4 : i32 to index - %19 = muli %arg3, %arg4 : i32 - %20 = addi %19, %c1_i32 : i32 - %21 = remi_signed %20, %c1600_i32 : i32 - %22 = sitofp %21 : i32 to f64 - %23 = sitofp %c8000_i32 : i32 to f64 - %24 = divf %22, %23 : f64 - memref.store %24, %2[%15, %18] : memref<1600x2000xf64> - %25 = addi %arg4, %c1_i32 : i32 - scf.yield %25 : i32 - } - %17 = addi %arg3, %c1_i32 : i32 - scf.yield %17 : i32 - } - %9:2 = scf.while (%arg2 = %8#0) : (i32) -> (i32, i32) { - %15 = cmpi slt, %arg2, %c2000_i32 : i32 - scf.condition(%15) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %15 = index_cast %arg3 : i32 to index - %16 = scf.for %arg4 = %c0 to %c1800 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %18 = index_cast %arg5 : i32 to index - %19 = addi %arg5, %c1_i32 : i32 - %20 = muli %arg3, %19 : i32 - %21 = addi %20, %c2_i32 : i32 - %22 = remi_signed %21, %c1800_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c9000_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %3[%15, %18] : memref<2000x1800xf64> - scf.yield %19 : i32 - } - %17 = addi %arg3, %c1_i32 : i32 - scf.yield %17 : i32 - } - %10:2 = scf.while (%arg2 = %9#0) : (i32) -> (i32, i32) { - %15 = cmpi slt, %arg2, %c1800_i32 : i32 - scf.condition(%15) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %15 = index_cast %arg3 : i32 to index - %16 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %18 = cmpi slt, %arg4, %c2400_i32 : i32 - scf.condition(%18) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %18 = index_cast %arg4 : i32 to index - %19 = addi %arg4, %c3_i32 : i32 - %20 = muli %arg3, %19 : i32 - %21 = remi_signed %20, %c2200_i32 : i32 - %22 = sitofp %21 : i32 to f64 - %23 = sitofp %c11000_i32 : i32 to f64 - %24 = divf %22, %23 : f64 - memref.store %24, %5[%15, %18] : memref<1800x2400xf64> - %25 = addi %arg4, %c1_i32 : i32 - scf.yield %25 : i32 - } - %17 = addi %arg3, %c1_i32 : i32 - scf.yield %17 : i32 - } - %11 = scf.while (%arg2 = %10#0) : (i32) -> i32 { - %15 = cmpi slt, %arg2, %c2400_i32 : i32 - scf.condition(%15) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %15 = index_cast %arg2 : i32 to index - %16 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %18 = cmpi slt, %arg3, %c2200_i32 : i32 - scf.condition(%18) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %18 = index_cast %arg3 : i32 to index - %19 = addi %arg3, %c2_i32 : i32 - %20 = muli %arg2, %19 : i32 - %21 = addi %20, %c2_i32 : i32 - %22 = remi_signed %21, %c2000_i32 : i32 - %23 = sitofp %22 : i32 to f64 - %24 = sitofp %c10000_i32 : i32 to f64 - %25 = divf %23, %24 : f64 - memref.store %25, %6[%15, %18] : memref<2400x2200xf64> - %26 = addi %arg3, %c1_i32 : i32 - scf.yield %26 : i32 - } - %17 = addi %arg2, %c1_i32 : i32 - scf.yield %17 : i32 - } - call @polybench_timer_start() : () -> () - %12 = memref.cast %7 : memref<1600x2200xf64> to memref - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 69 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - affine.store %cst, %7[%arg4, %arg5] : memref<1600x2200xf64> - } - } - } - } - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 69 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map2(%arg3) { - affine.store %cst, %4[%arg4, %arg5] : memref<1800x2200xf64> - } - } - } - } - affine.for %arg2 = 0 to 50 { - affine.for %arg3 = 0 to 57 { - affine.for %arg4 = #map0(%arg2) to min #map1(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map3(%arg3) { - affine.store %cst, %1[%arg4, %arg5] : memref<1600x1800xf64> - } - } - } - } - affine.for %arg2 = 0 to 63 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 1800 { - %15 = affine.load %2[%arg5, %arg4] : memref<1600x2000xf64> - %16 = affine.load %3[%arg4, %arg6] : memref<2000x1800xf64> - %17 = mulf %15, %16 {scop.splittable = 0 : index} : f64 - affine.store %17, %0[%arg4] : memref<2400xf64> - %18 = affine.load %1[%arg5, %arg6] : memref<1600x1800xf64> - %19 = affine.load %0[%arg4] : memref<2400xf64> - %20 = addf %18, %19 : f64 - affine.store %20, %1[%arg5, %arg6] : memref<1600x1800xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 75 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map5(%arg3) { - affine.for %arg6 = 0 to 2200 { - %15 = affine.load %5[%arg4, %arg5] : memref<1800x2400xf64> - %16 = affine.load %6[%arg5, %arg6] : memref<2400x2200xf64> - %17 = mulf %15, %16 {scop.splittable = 1 : index} : f64 - affine.store %17, %0[%arg5] : memref<2400xf64> - %18 = affine.load %4[%arg4, %arg6] : memref<1800x2200xf64> - %19 = affine.load %0[%arg5] : memref<2400xf64> - %20 = addf %18, %19 : f64 - affine.store %20, %4[%arg4, %arg6] : memref<1800x2200xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 57 { - affine.for %arg3 = 0 to 50 { - affine.for %arg4 = #map0(%arg2) to min #map3(%arg2) { - affine.for %arg5 = #map0(%arg3) to min #map1(%arg3) { - affine.for %arg6 = 0 to 2200 { - %15 = affine.load %1[%arg5, %arg4] : memref<1600x1800xf64> - %16 = affine.load %4[%arg4, %arg6] : memref<1800x2200xf64> - %17 = mulf %15, %16 {scop.splittable = 2 : index} : f64 - affine.store %17, %0[%arg4] : memref<2400xf64> - %18 = affine.load %7[%arg5, %arg6] : memref<1600x2200xf64> - %19 = affine.load %0[%arg4] : memref<2400xf64> - %20 = addf %18, %19 : f64 - affine.store %20, %7[%arg5, %arg6] : memref<1600x2200xf64> - } - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %13 = cmpi sgt, %arg0, %c42_i32 : i32 - %14 = scf.if %13 -> (i1) { - %15 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %16 = llvm.load %15 : !llvm.ptr> - %17 = llvm.mlir.addressof @str0 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @strcmp(%16, %18) : (!llvm.ptr, !llvm.ptr) -> i32 - %20 = trunci %19 : i32 to i1 - %21 = xor %20, %true : i1 - scf.yield %21 : i1 - } else { - scf.yield %false : i1 - } - scf.if %14 { - call @print_array(%c1600_i32, %c2200_i32, %12) : (i32, i32, memref) -> () - } - memref.dealloc %1 : memref<1600x1800xf64> - memref.dealloc %2 : memref<1600x2000xf64> - memref.dealloc %3 : memref<2000x1800xf64> - memref.dealloc %4 : memref<1800x2200xf64> - memref.dealloc %5 : memref<1800x2400xf64> - memref.dealloc %6 : memref<2400x2200xf64> - memref.dealloc %7 : memref<1600x2200xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg5), symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 2 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/3mm/3mm.split.c b/example/polybench/split-and-merge/3mm/3mm.split.c deleted file mode 100644 index 07c421c5..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.split.c +++ /dev/null @@ -1,234 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 3mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "3mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, int nm, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm), - DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl)) -{ - int i, j; - - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / (5*ni); - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) ((i*(j+1)+2) % nj) / (5*nj); - for (i = 0; i < nj; i++) - for (j = 0; j < nm; j++) - C[i][j] = (DATA_TYPE) (i*(j+3) % nl) / (5*nl); - for (i = 0; i < nm; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) ((i*(j+2)+2) % nk) / (5*nk); -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("G"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, G[i][j]); - } - POLYBENCH_DUMP_END("G"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_3mm(int ni, int nj, int nk, int nl, int nm, - DATA_TYPE POLYBENCH_2D(E,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(F,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm), - DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl), - DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NM,nm)) -{ - int i, j, k; - -#pragma scop - /* E := A*B */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NJ; j++) - { - E[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NK; ++k) - E[i][j] += A[i][k] * B[k][j]; - } - /* F := C*D */ - for (i = 0; i < _PB_NJ; i++) - for (j = 0; j < _PB_NL; j++) - { - F[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NM; ++k) { - S[k] = C[i][k] * D[k][j]; - F[i][j] += S[k]; - } - } - /* G := E*F */ - for (i = 0; i < _PB_NI; i++) - for (j = 0; j < _PB_NL; j++) - { - G[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_NJ; ++k) - G[i][j] += E[i][k] * F[k][j]; - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - int nm = NM; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(E, DATA_TYPE, NI, NJ, ni, nj); - POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, NI, NK, ni, nk); - POLYBENCH_2D_ARRAY_DECL(B, DATA_TYPE, NK, NJ, nk, nj); - POLYBENCH_2D_ARRAY_DECL(F, DATA_TYPE, NJ, NL, nj, nl); - POLYBENCH_2D_ARRAY_DECL(C, DATA_TYPE, NJ, NM, nj, nm); - POLYBENCH_2D_ARRAY_DECL(D, DATA_TYPE, NM, NL, nm, nl); - POLYBENCH_2D_ARRAY_DECL(G, DATA_TYPE, NI, NL, ni, nl); - POLYBENCH_1D_ARRAY_DECL(S, DATA_TYPE, NM, nm); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, nm, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_3mm (ni, nj, nk, nl, nm, - POLYBENCH_ARRAY(E), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(F), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(G), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(G))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(E); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(F); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - POLYBENCH_FREE_ARRAY(G); - - return 0; -} - -// CHECK: func @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref<800x900xf64>, %arg6: memref<800x1000xf64>, %arg7: memref<1000x900xf64>, %arg8: memref<900x1100xf64>, %arg9: memref<900x1200xf64>, %arg10: memref<1200x1100xf64>, %arg11: memref<800x1100xf64>) { -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: %2 = index_cast %arg2 : i32 to index -// CHECK-NEXT: affine.for %arg12 = 0 to %0 { -// CHECK-NEXT: affine.for %arg13 = 0 to %1 { -// CHECK-NEXT: affine.store %cst, %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: %5 = affine.load %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %2 { -// CHECK-NEXT: %6 = affine.load %arg6[%arg12, %arg14] : memref<800x1000xf64> -// CHECK-NEXT: %7 = affine.load %arg7[%arg14, %arg13] : memref<1000x900xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: %3 = index_cast %arg3 : i32 to index -// CHECK-NEXT: %4 = index_cast %arg4 : i32 to index -// CHECK-NEXT: affine.for %arg12 = 0 to %1 { -// CHECK-NEXT: affine.for %arg13 = 0 to %3 { -// CHECK-NEXT: affine.store %cst, %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: %5 = affine.load %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %4 { -// CHECK-NEXT: %6 = affine.load %arg9[%arg12, %arg14] : memref<900x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg10[%arg14, %arg13] : memref<1200x1100xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg12 = 0 to %0 { -// CHECK-NEXT: affine.for %arg13 = 0 to %3 { -// CHECK-NEXT: affine.store %cst, %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: %5 = affine.load %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %1 { -// CHECK-NEXT: %6 = affine.load %arg5[%arg12, %arg14] : memref<800x900xf64> -// CHECK-NEXT: %7 = affine.load %arg8[%arg14, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/3mm/3mm.split.pluto.c b/example/polybench/split-and-merge/3mm/3mm.split.pluto.c deleted file mode 100644 index 63d41590..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.split.pluto.c +++ /dev/null @@ -1,311 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* 3mm.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "3mm.h" - - -/* Array initialization. */ -static -void init_array(int ni, int nj, int nk, int nl, int nm, - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm), - DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl)) -{ - int i, j; - - for (i = 0; i < ni; i++) - for (j = 0; j < nk; j++) - A[i][j] = (DATA_TYPE) ((i*j+1) % ni) / (5*ni); - for (i = 0; i < nk; i++) - for (j = 0; j < nj; j++) - B[i][j] = (DATA_TYPE) ((i*(j+1)+2) % nj) / (5*nj); - for (i = 0; i < nj; i++) - for (j = 0; j < nm; j++) - C[i][j] = (DATA_TYPE) (i*(j+3) % nl) / (5*nl); - for (i = 0; i < nm; i++) - for (j = 0; j < nl; j++) - D[i][j] = (DATA_TYPE) ((i*(j+2)+2) % nk) / (5*nk); -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int ni, int nl, - DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("G"); - for (i = 0; i < ni; i++) - for (j = 0; j < nl; j++) { - if ((i * ni + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, G[i][j]); - } - POLYBENCH_DUMP_END("G"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_3mm(int ni, int nj, int nk, int nl, int nm, - DATA_TYPE POLYBENCH_2D(E,NI,NJ,ni,nj), - DATA_TYPE POLYBENCH_2D(A,NI,NK,ni,nk), - DATA_TYPE POLYBENCH_2D(B,NK,NJ,nk,nj), - DATA_TYPE POLYBENCH_2D(F,NJ,NL,nj,nl), - DATA_TYPE POLYBENCH_2D(C,NJ,NM,nj,nm), - DATA_TYPE POLYBENCH_2D(D,NM,NL,nm,nl), - DATA_TYPE POLYBENCH_2D(G,NI,NL,ni,nl), - DATA_TYPE POLYBENCH_1D(S,NM,nm)) -{ - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9, t10; - register int lbv, ubv; -if ((_PB_NI >= 0) && (_PB_NJ >= 0) && (_PB_NL >= 1)) { - for (t2=0;t2<=floord(_PB_NI+_PB_NJ-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_NI-1,_PB_NJ-1),32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - G[t4][t5] = SCALAR_VAL(0.0);; - F[t4][t5] = SCALAR_VAL(0.0);; - } - } - for (t4=max(_PB_NI,32*t2);t4<=min(_PB_NJ-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - F[t4][t5] = SCALAR_VAL(0.0);; - } - } - for (t4=max(_PB_NJ,32*t2);t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - G[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } -} -if ((_PB_NJ <= -1) && (_PB_NL >= 1)) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - G[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } -} -if ((_PB_NI <= -1) && (_PB_NL >= 1)) { - for (t2=0;t2<=floord(_PB_NJ-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NL-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NJ-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NL-1,32*t3+31);t5++) { - F[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } -} -if ((_PB_NJ >= 1) && (_PB_NL >= 1)) { - for (t2=0;t2<=floord(_PB_NM-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NM-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - for (t7=0;t7<=_PB_NL-1;t7++) { - S[t4] = C[t5][t4] * D[t4][t7];; - F[t5][t7] += S[t4];; - } - } - } - } - } -} -if (_PB_NJ >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_NI-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_NJ-1,32*t3+31);t5++) { - E[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } -} -if (_PB_NJ >= 1) { - for (t2=0;t2<=floord(_PB_NI-1,32);t2++) { - for (t3=0;t3<=floord(_PB_NJ-1,32);t3++) { - if (_PB_NK >= 1) { - for (t5=0;t5<=floord(_PB_NK-1,32);t5++) { - for (t6=32*t2;t6<=min(_PB_NI-1,32*t2+31);t6++) { - for (t8=32*t5;t8<=min(_PB_NK-1,32*t5+31);t8++) { - for (t9=32*t3;t9<=min(_PB_NJ-1,32*t3+31);t9++) { - E[t6][t9] += A[t6][t8] * B[t8][t9];; - } - } - } - } - } - if (_PB_NL >= 1) { - for (t5=0;t5<=floord(_PB_NL-1,32);t5++) { - for (t6=32*t2;t6<=min(_PB_NI-1,32*t2+31);t6++) { - for (t7=32*t3;t7<=min(_PB_NJ-1,32*t3+31);t7++) { - for (t9=32*t5;t9<=min(_PB_NL-1,32*t5+31);t9++) { - G[t6][t9] += E[t6][t7] * F[t7][t9];; - } - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int ni = NI; - int nj = NJ; - int nk = NK; - int nl = NL; - int nm = NM; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(E, DATA_TYPE, NI, NJ, ni, nj); - POLYBENCH_2D_ARRAY_DECL(A, DATA_TYPE, NI, NK, ni, nk); - POLYBENCH_2D_ARRAY_DECL(B, DATA_TYPE, NK, NJ, nk, nj); - POLYBENCH_2D_ARRAY_DECL(F, DATA_TYPE, NJ, NL, nj, nl); - POLYBENCH_2D_ARRAY_DECL(C, DATA_TYPE, NJ, NM, nj, nm); - POLYBENCH_2D_ARRAY_DECL(D, DATA_TYPE, NM, NL, nm, nl); - POLYBENCH_2D_ARRAY_DECL(G, DATA_TYPE, NI, NL, ni, nl); - POLYBENCH_1D_ARRAY_DECL(S, DATA_TYPE, NM, nm); - - /* Initialize array(s). */ - init_array (ni, nj, nk, nl, nm, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_3mm (ni, nj, nk, nl, nm, - POLYBENCH_ARRAY(E), - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(B), - POLYBENCH_ARRAY(F), - POLYBENCH_ARRAY(C), - POLYBENCH_ARRAY(D), - POLYBENCH_ARRAY(G), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(ni, nl, POLYBENCH_ARRAY(G))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(E); - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(B); - POLYBENCH_FREE_ARRAY(F); - POLYBENCH_FREE_ARRAY(C); - POLYBENCH_FREE_ARRAY(D); - POLYBENCH_FREE_ARRAY(G); - - return 0; -} - -// CHECK: func @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref<800x900xf64>, %arg6: memref<800x1000xf64>, %arg7: memref<1000x900xf64>, %arg8: memref<900x1100xf64>, %arg9: memref<900x1200xf64>, %arg10: memref<1200x1100xf64>, %arg11: memref<800x1100xf64>) { -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: %2 = index_cast %arg2 : i32 to index -// CHECK-NEXT: affine.for %arg12 = 0 to %0 { -// CHECK-NEXT: affine.for %arg13 = 0 to %1 { -// CHECK-NEXT: affine.store %cst, %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: %5 = affine.load %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %2 { -// CHECK-NEXT: %6 = affine.load %arg6[%arg12, %arg14] : memref<800x1000xf64> -// CHECK-NEXT: %7 = affine.load %arg7[%arg14, %arg13] : memref<1000x900xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg5[%arg12, %arg13] : memref<800x900xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: %3 = index_cast %arg3 : i32 to index -// CHECK-NEXT: %4 = index_cast %arg4 : i32 to index -// CHECK-NEXT: affine.for %arg12 = 0 to %1 { -// CHECK-NEXT: affine.for %arg13 = 0 to %3 { -// CHECK-NEXT: affine.store %cst, %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: %5 = affine.load %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %4 { -// CHECK-NEXT: %6 = affine.load %arg9[%arg12, %arg14] : memref<900x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg10[%arg14, %arg13] : memref<1200x1100xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg8[%arg12, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg12 = 0 to %0 { -// CHECK-NEXT: affine.for %arg13 = 0 to %3 { -// CHECK-NEXT: affine.store %cst, %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: %5 = affine.load %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: affine.for %arg14 = 0 to %1 { -// CHECK-NEXT: %6 = affine.load %arg5[%arg12, %arg14] : memref<800x900xf64> -// CHECK-NEXT: %7 = affine.load %arg8[%arg14, %arg13] : memref<900x1100xf64> -// CHECK-NEXT: %8 = mulf %6, %7 : f64 -// CHECK-NEXT: %9 = addf %5, %8 : f64 -// CHECK-NEXT: affine.store %9, %arg11[%arg12, %arg13] : memref<800x1100xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/3mm/3mm.split.pluto.cloog b/example/polybench/split-and-merge/3mm/3mm.split.pluto.cloog deleted file mode 100644 index 6b29090a..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.split.pluto.cloog +++ /dev/null @@ -1,229 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 7 - -1 -_PB_NI _PB_NJ _PB_NK _PB_NL _PB_NM - -# Number of statements -7 - -# S1 (E[i][j] = SCALAR_VAL(0.0);) -11 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -0 0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# S2 (E[i][j] += A[i][k] * B[k][j];) -15 13 -1 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 0 0 -1 -1 0 0 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 0 0 0 0 1 0 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 0 0 0 -1 0 32 0 0 -1 0 0 0 0 0 0 31 -1 0 0 -32 0 0 1 0 0 0 0 0 0 -1 0 0 32 0 0 -1 0 0 0 0 0 31 -0 0 0 - -# S3 (F[i][j] = SCALAR_VAL(0.0);) -11 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 1 0 0 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# S4 (S[k] = C[i][k] * D[k][j];) -13 12 -1 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 -1 0 0 0 1 0 0 0 -1 -1 0 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 0 1 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 0 31 -0 0 0 - -# S5 (F[i][j] += S[k];) -13 12 -1 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 -1 0 0 0 1 0 0 0 -1 -1 0 0 0 0 0 0 1 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 0 1 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 0 31 -1 0 -32 1 0 0 0 0 0 0 0 0 -1 0 32 -1 0 0 0 0 0 0 0 31 -0 0 0 - -# S6 (G[i][j] = SCALAR_VAL(0.0);) -11 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 0 0 0 -1 32 0 -1 0 0 0 0 0 0 31 -1 0 -32 0 1 0 0 0 0 0 0 -1 0 32 0 -1 0 0 0 0 0 31 -0 0 0 - -# S7 (G[i][j] += E[i][k] * F[k][j];) -15 13 -1 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 0 0 0 -1 -1 0 0 0 0 0 0 1 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 0 0 1 0 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -1 0 1 0 0 0 -1 -1 0 0 0 0 0 0 0 1 0 0 0 -1 -1 -32 0 0 1 0 0 0 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 0 0 0 31 -1 0 -32 0 0 0 1 0 0 0 0 0 0 -1 0 32 0 0 0 -1 0 0 0 0 0 31 -1 0 0 -32 0 1 0 0 0 0 0 0 0 -1 0 0 32 0 -1 0 0 0 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -7 - -# T(S1) -10 21 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -6 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S2) -10 23 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -5 - -# T(S3) -10 21 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S4) -10 22 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - -# T(S5) -10 22 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 - -# T(S6) -10 21 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 - -# T(S7) -10 23 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -10 -t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 diff --git a/example/polybench/split-and-merge/3mm/3mm.split.pluto.log b/example/polybench/split-and-merge/3mm/3mm.split.pluto.log deleted file mode 100644 index bde59b37..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.split.pluto.log +++ /dev/null @@ -1,2929 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 7 0 0 0 5 - -# Parameters are provided -1 - -_PB_NI _PB_NJ _PB_NK _PB_NL _PB_NM - - -# Number of statements -7 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -6 9 2 0 0 5 -# e/i| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 1 0 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -5 14 5 2 0 5 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -3 12 3 2 0 5 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 5 ## Arr == E - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -E[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -9 10 3 0 0 5 -# e/i| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 1 0 0 0 -1 ## -j+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 0 1 0 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 1 0 0 -1 ## -k+_PB_NK-1 >= 0 - 1 0 0 0 0 0 1 0 0 -1 ## _PB_NK-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -7 17 7 3 0 5 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 2.3 Access -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == E - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -WRITE -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == E - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 9 ## Arr == A - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## [2] == k - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 10 ## Arr == B - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -E[i][j] += A[i][k] * B[k][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -6 9 2 0 0 5 -# e/i| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 -1 ## -i+_PB_NJ-1 >= 0 - 1 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -5 14 5 2 0 5 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 3.3 Access -WRITE -3 12 3 2 0 5 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 12 ## Arr == F - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -F[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -9 10 3 0 0 5 -# e/i| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 0 1 0 0 0 -1 ## -i+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 1 0 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 0 0 1 -1 ## -k+_PB_NM-1 >= 0 - 1 0 0 0 0 0 0 0 1 -1 ## _PB_NM-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -7 17 7 3 0 5 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -2 12 2 3 0 5 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 14 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 0 ## [1] == k - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 15 ## Arr == C - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## [2] == k - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 16 ## Arr == D - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -S[k] = C[i][k] * D[k][j]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -9 10 3 0 0 5 -# e/i| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 0 1 0 0 0 -1 ## -i+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - 1 0 1 0 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 0 0 0 1 -1 ## -k+_PB_NM-1 >= 0 - 1 0 0 0 0 0 0 0 1 -1 ## _PB_NM-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -7 17 7 3 0 5 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 5.3 Access -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 12 ## Arr == F - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -WRITE -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 12 ## Arr == F - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -READ -2 12 2 3 0 5 -# e/i| Arr [1]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 14 ## Arr == S - 0 0 -1 0 0 1 0 0 0 0 0 0 ## [1] == k - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -F[i][j] += S[k]; - - -# =============================================== Statement 6 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -6 9 2 0 0 5 -# e/i| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 1 0 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -5 14 5 2 0 5 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 6.3 Access -WRITE -3 12 3 2 0 5 -# e/i| Arr [1] [2]| i j |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 17 ## Arr == G - 0 0 -1 0 1 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -G[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 7 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -9 10 3 0 0 5 -# e/i| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 0 0 0 -1 ## -i+_PB_NI-1 >= 0 - 1 0 0 0 1 0 0 0 0 -1 ## _PB_NI-1 >= 0 - 1 0 1 0 0 0 0 0 0 0 ## j >= 0 - 1 0 -1 0 0 0 0 1 0 -1 ## -j+_PB_NL-1 >= 0 - 1 0 0 0 0 0 0 1 0 -1 ## _PB_NL-1 >= 0 - 1 0 0 1 0 0 0 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 0 0 0 -1 ## -k+_PB_NJ-1 >= 0 - 1 0 0 0 0 1 0 0 0 -1 ## _PB_NJ-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -7 17 7 3 0 5 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 7.3 Access -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 17 ## Arr == G - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -WRITE -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 17 ## Arr == G - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 5 ## Arr == E - 0 0 -1 0 1 0 0 0 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## [2] == k - -READ -3 13 3 3 0 5 -# e/i| Arr [1] [2]| i j k |_PB. _PB. _PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 12 ## Arr == F - 0 0 -1 0 0 0 1 0 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -G[i][j] += E[i][k] * F[k][j]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -17 -# Mapping array-identifiers/array-names -1 i -2 _PB_NI -3 j -4 _PB_NJ -5 E -6 SCALAR_VAL -7 k -8 _PB_NK -9 A -10 B -11 _PB_NL -12 F -13 _PB_NM -14 S -15 C -16 D -17 G - - - -# File name -(null) -# Starting line and column -94 0 -# Ending line and column -120 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 5 -Parameters: _PB_NI _PB_NJ _PB_NK _PB_NL _PB_NM -S1 "E[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[7 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -E[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S2 "E[i][j] += A[i][k] * B[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[8 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -E[i][j] -A[i][k] -B[k][j] -Write accesses -E[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S3 "F[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[7 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -F[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S4 "S[k] = C[i][k] * D[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[8 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -C[i][k] -D[k][j] -Write accesses -S[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S5 "F[i][j] += S[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[8 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S5): (1, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -F[i][j] -S[k] -Write accesses -F[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S6 "G[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[7 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S6): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -G[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S7 "G[i][j] += E[i][k] * F[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[8 dims; 9 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S7): (2, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -G[i][j] -E[i][k] -F[k][j] -Write accesses -G[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 2 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 3 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 4 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: F -Dependence polyhedron -Set #1 -[11 dims; 10 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 5 from S1 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: E -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 6 from S7 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: G -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 7 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: F -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 8 from S2 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: E -Dependence polyhedron -Set #1 -[11 dims; 10 constraints] --j+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 9 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: G -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S5 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: F -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 11 from S3 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: F -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 12 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: E -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 13 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: E -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 14 from S5 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: F -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 15 from S7 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: G -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 16 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: E -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S5 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 18 from S5 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 19 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: F -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 20 from S7 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: G -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 21 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: E -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 22 from S4 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 10 constraints] --k+k' = 0 -i >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 -j' >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 23 from S4 to S4; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 9 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 24 from S6 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: G -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 25 from S3 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: F -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 26 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: E -Dependence polyhedron -Set #1 -[10 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_N-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - -T(S1): (0, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S3): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S4): (1, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S5): (1, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S6): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S7): (2, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 7 -[pluto] Total number of loops: 18 -[pluto] Number of deps: 26 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 5 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 4 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 6 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 2: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 3 - SCC 5: size: 1: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[5 dims; 5 constraints] -c_m-1 >= 0 -c_l-1 >= 0 -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 9 dep(s) satisfied -h(S1) = 2, h(S2) = 3, h(S3) = 0, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 3 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 12 constraints - For dep 1; num_constraints: 19 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 13 constraints - For dep 2; num_constraints: 15 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 13 constraints - For dep 3; num_constraints: 13 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 4; num_constraints: 15 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 5; num_constraints: 15 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 6; num_constraints: 8 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 7; num_constraints: 15 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 8; num_constraints: 15 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 9; num_constraints: 15 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 10; num_constraints: 8 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 11; num_constraints: 15 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 12; num_constraints: 15 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 13; num_constraints: 8 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 14; num_constraints: 8 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 15; num_constraints: 8 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 16; num_constraints: 8 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 12 constraints - For dep 17; num_constraints: 19 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 13 constraints - For dep 18; num_constraints: 15 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 19; num_constraints: 8 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 20; num_constraints: 8 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 21; num_constraints: 8 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_s) from 10 constraints - For dep 22; num_constraints: 12 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 10 constraints - For dep 23; num_constraints: 8 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 24; num_constraints: 15 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 25; num_constraints: 15 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 13 constraints - For dep 26; num_constraints: 15 - After dep 1; num_constraints: 19 - After dep 2; num_constraints: 34 - After dep 3; num_constraints: 47 - After dep 6; num_constraints: 55 - After dep 8; num_constraints: 70 - After dep 10; num_constraints: 78 - After dep 13; num_constraints: 86 - After dep 14; num_constraints: 94 - After dep 15; num_constraints: 102 - After dep 16; num_constraints: 110 - After dep 17; num_constraints: 129 - After dep 18; num_constraints: 144 - After dep 19; num_constraints: 152 - After dep 20; num_constraints: 160 - After dep 21; num_constraints: 168 - After dep 22; num_constraints: 180 - After dep 23; num_constraints: 188 - After all dependences: num constraints: 60, num variables: 34 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[34 dims; 1 constraints] -c_o >= 0 - -Set #1 -[34 dims; 1 constraints] -c_p >= 0 - -Set #1 -[34 dims; 1 constraints] -c_o+c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[34 dims; 1 constraints] -c_s >= 0 - -Set #1 -[34 dims; 1 constraints] -c_t >= 0 - -Set #1 -[34 dims; 1 constraints] --c_u >= 0 - -Set #1 -[34 dims; 1 constraints] -c_s+c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[34 dims; 1 constraints] -c_w >= 0 - -Set #1 -[34 dims; 1 constraints] -c_x >= 0 - -Set #1 -[34 dims; 1 constraints] -c_w+c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 3 disjuncts -Set #1 -[34 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[34 dims; 1 constraints] --c_| >= 0 - -Set #1 -[34 dims; 1 constraints] -c_} >= 0 - -Set #1 -[34 dims; 1 constraints] -c_{-c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 3 disjuncts -Set #1 -[34 dims; 1 constraints] -c_ >= 0 - -Set #1 -[34 dims; 1 constraints] --c_€ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_-c_€+c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[34 dims; 1 constraints] -c_ƒ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_ƒ+c_„-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 3 disjuncts -Set #1 -[34 dims; 1 constraints] -c_‡ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_‡+c_ˆ+c_‰-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[34 dims; 7 constraints] - +c_o +c_p -1 >= 0 - +c_s +c_t -c_u -1 >= 0 - +c_w +c_x -1 >= 0 - +c_{ -c_| +c_} -1 >= 0 - +c_ -c_€ +c_ -1 >= 0 - +c_ƒ +c_„ -1 >= 0 - +c_‡ +c_ˆ +c_‰ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (34 variables, 108 constraints) -[pluto] pluto_constraints_lexmin_isl (31 variables, 108 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = i, h(S2) = i, h(S3) = i, h(S4) = k, h(S5) = k, h(S6) = i, h(S7) = i -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_p >= 0 - -Set #1 -[34 dims; 1 constraints] -c_p-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[34 dims; 1 constraints] -c_t >= 0 - -Set #1 -[34 dims; 1 constraints] --c_u >= 0 - -Set #1 -[34 dims; 1 constraints] -c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_x >= 0 - -Set #1 -[34 dims; 1 constraints] -c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[34 dims; 1 constraints] --c_| >= 0 - -Set #1 -[34 dims; 1 constraints] -c_{ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_{-c_|-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[34 dims; 1 constraints] --c_€ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_-c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_„-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[34 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_ˆ+c_‰-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[34 dims; 7 constraints] - +c_p -1 >= 0 - +c_t -c_u -1 >= 0 - +c_x -1 >= 0 - +c_{ -c_| -1 >= 0 - +c_ -c_€ -1 >= 0 - +c_„ -1 >= 0 - +c_ˆ +c_‰ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (34 variables, 108 constraints) -[pluto] pluto_constraints_lexmin_isl (31 variables, 108 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = i, h(S5) = i, h(S6) = j, h(S7) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 5 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[34 dims; 1 constraints] --c_u >= 0 - -Set #1 -[34 dims; 1 constraints] --c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[34 dims; 1 constraints] --c_| >= 0 - -Set #1 -[34 dims; 1 constraints] --c_|-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[34 dims; 1 constraints] --c_€ >= 0 - -Set #1 -[34 dims; 1 constraints] --c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_ˆ-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S7 -linear independence constraints -[34 dims; 4 constraints] - -c_u -1 >= 0 - -c_| -1 >= 0 - -c_€ -1 >= 0 - +c_ˆ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (34 variables, 102 constraints) -[pluto] pluto_constraints_lexmin_isl (31 variables, 102 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 2 hyperplane(s) found -T(S1): (2, i, j) -loop types (scalar, loop, loop) - -T(S2): (3, i, j) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, k, i) -loop types (scalar, loop, loop) - -T(S5): (1, k, i) -loop types (scalar, loop, loop) - -T(S6): (0, i, j) -loop types (scalar, loop, loop) - -T(S7): (3, i, k) -loop types (scalar, loop, loop) - -[pluto] pluto_diamond_tile - After dep 1; num_constraints: 19 - After dep 2; num_constraints: 34 - After dep 3; num_constraints: 47 - After dep 6; num_constraints: 55 - After dep 8; num_constraints: 70 - After dep 10; num_constraints: 78 - After dep 13; num_constraints: 86 - After dep 14; num_constraints: 94 - After dep 15; num_constraints: 102 - After dep 16; num_constraints: 110 - After dep 17; num_constraints: 129 - After dep 18; num_constraints: 144 - After dep 19; num_constraints: 152 - After dep 20; num_constraints: 160 - After dep 21; num_constraints: 168 - After dep 22; num_constraints: 180 - After dep 23; num_constraints: 188 - After all dependences: num constraints: 60, num variables: 34 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 1 - After dep 2; num_constraints: 15 - After dep 3; num_constraints: 28 - After dep 8; num_constraints: 43 - After dep 13; num_constraints: 51 - After dep 16; num_constraints: 59 - After dep 18; num_constraints: 74 - After dep 21; num_constraints: 82 - After dep 23; num_constraints: 90 - After all dependences: num constraints: 41, num variables: 34 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 5 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[34 dims; 1 constraints] --c_u >= 0 - -Set #1 -[34 dims; 1 constraints] --c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_| >= 0 - -Set #1 -[34 dims; 1 constraints] -c_|-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_ˆ-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S7 -linear independence constraints -[34 dims; 4 constraints] - -c_u -1 >= 0 - +c_| -1 >= 0 - +c_€ -1 >= 0 - +c_ˆ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (34 variables, 83 constraints) -[pluto] pluto_constraints_lexmin_isl (31 variables, 83 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (2, i, j) -loop types (scalar, loop, loop) - -T(S2): (3, i, j) -loop types (scalar, loop, loop) - -T(S3): (0, i, j) -loop types (scalar, loop, loop) - -T(S4): (1, k, i) -loop types (scalar, loop, loop) - -T(S5): (1, k, i) -loop types (scalar, loop, loop) - -T(S6): (0, i, j) -loop types (scalar, loop, loop) - -T(S7): (3, i, k) -loop types (scalar, loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 3 4 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 2: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 3 - SCC 5: size: 1: max stmt dim: 2 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 3 and id 4 -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = 0, h(S7) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 2 - After dep 2; num_constraints: 15 - After dep 3; num_constraints: 28 - After dep 13; num_constraints: 36 - After dep 16; num_constraints: 44 - After dep 18; num_constraints: 59 - After dep 21; num_constraints: 67 - After dep 23; num_constraints: 75 - After all dependences: num constraints: 31, num variables: 34 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 5 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_u >= 0 - -Set #1 -[34 dims; 1 constraints] -c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_| >= 0 - -Set #1 -[34 dims; 1 constraints] -c_|-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[34 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[34 dims; 1 constraints] -c_ˆ-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S7 -linear independence constraints -[34 dims; 4 constraints] - +c_u -1 >= 0 - +c_| -1 >= 0 - +c_€ -1 >= 0 - +c_ˆ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (34 variables, 73 constraints) -[pluto] pluto_constraints_lexmin_isl (31 variables, 73 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = k, h(S3) = 0, h(S4) = j, h(S5) = j, h(S6) = 0, h(S7) = j -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (2, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (3, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S4): (1, k, i, 0, j) -loop types (scalar, loop, loop, scalar, loop) - -T(S5): (1, k, i, 0, j) -loop types (scalar, loop, loop, scalar, loop) - -T(S6): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S7): (3, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 3 -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (2, i, j, 1, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S2): (3, i, j, 0, k) -loop types (scalar, loop, loop, scalar, loop) - -T(S3): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S4): (1, k, i, 0, j) -loop types (scalar, loop, loop, scalar, loop) - -T(S5): (1, k, i, 0, j) -loop types (scalar, loop, loop, scalar, loop) - -T(S6): (0, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S7): (3, i, k, 1, j) -loop types (scalar, loop, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 3 - SCC 6: size: 1: max stmt dim: 2 -[pluto] Cutting between all SCCs -h(S1) = 6, h(S2) = 5, h(S3) = 4, h(S4) = 2, h(S5) = 3, h(S6) = 1, h(S7) = 0 -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 3 satisfied - 1 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 8 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 3 satisfied - 1 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (2, i, j, 1, 0, 6) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S2): (3, i, j, 0, k, 5) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S3): (0, i, j, 0, 0, 4) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S4): (1, k, i, 0, j, 2) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S5): (1, k, i, 0, j, 3) -loop types (scalar, loop, loop, scalar, loop, scalar) - -T(S6): (0, i, j, 0, 0, 1) -loop types (scalar, loop, loop, scalar, scalar, scalar) - -T(S7): (3, i, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, scalar) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S1, } -(t2, t3, t4, t5, ) with stmts {S2, S7, } -(t2, t3, ) with stmts {S3, S6, } -(t2, t3, ) with stmts {S4, S5, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S1, } -(t2, t3, t4, t5, ) with stmts {S2, S7, } -(t2, t3, ) with stmts {S3, S6, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 4 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 3 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 9) - 0 dep(s) satisfied -[Pluto] After tiling: -T(S1): (2, i/32, j/32, i, j, 1, 0, 6, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (3, i/32, j/32, 0, k/32, i, j, 0, k, 5) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop, scalar) - -T(S3): (0, i/32, j/32t5 {loop with stmts: S1, } -t4 {loop with stmts: S1, } -t9 {loop with stmts: S2, } -t7 {loop with stmts: S2, } -t6 {loop with stmts: S2, } -t7 {loop with stmts: S2, } -t9 {loop with stmts: S7, } -t7 {loop with stmts: S7, } -t6 {loop with stmts: S7, } -t5 {loop with stmts: S3, S6, } -t4 {loop with stmts: S3, S6, } -t7 {loop with stmts: S4, S5, } -t5 {loop with stmts: S4, S5, } -t4 {loop with stmts: S4, S5, } -, i, j, 0, 0, 4, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k/32, i/32, k, i, 0, j, 2, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, loop, scalar, scalar, scalar) - -T(S5): (1, k/32, i/32, k, i, 0, j, 3, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (0, i/32, j/32, i, j, 0, 0, 1, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S7): (3, i/32, k/32, 1, j/32, i, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop, scalar) - -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Stmts in bands 0 and 1 are distributed in tile space -Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: -6 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto-intra-tile-opt] Score for loop 2: -44 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: 18 -[pluto-intra-tile-opt] Score for loop 1: -6 -[pluto-intra-tile-opt] Score for loop 2: -44 -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 24 -[pluto-intra-tile-opt] Score for loop 1: -64 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied - 4 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied - 4 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 9) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (2, i/32, j/32, i, j, 1, 0, 6, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (3, i/32, j/32, 0, k/32, i, 0, k, j, 5) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop, scalar) - -T(S3): (0, i/32, j/32, i, j, 0, 0, 4, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k/32, i/32, k, i, 0, j, 2, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, loop, scalar, scalar, scalar) - -T(S5): (1, k/32, i/32, k, i, 0, j, 3, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (0, i/32, j/32, i, j, 0, 0, 1, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S7): (3, i/32, k/32, 1, j/32, i, k, 1, j, 0) -loop types (scalar, loop, loop, scalar, loop, loop, loop, scalar, loop, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(4,10), S2(6,10), S3(4,10), S4(4,10), S5(4,10), S6(4,10), S7(6,10), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to 3mm.split.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.003398s -[pluto] Auto-transformation time: 0.072332s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.006485s -[pluto] Code generation time: 0.133059s -[pluto] Other/Misc time: 0.333565s -[pluto] Total time: 0.542354s -[pluto] All times: 0.003398 0.072332 0.133059 0.333565 diff --git a/example/polybench/split-and-merge/3mm/3mm.splittable.mlir b/example/polybench/split-and-merge/3mm/3mm.splittable.mlir deleted file mode 100644 index 4a58b05a..00000000 --- a/example/polybench/split-and-merge/3mm/3mm.splittable.mlir +++ /dev/null @@ -1,298 +0,0 @@ -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("G\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c1600_i32 = constant 1600 : i32 - %c1800_i32 = constant 1800 : i32 - %c2000_i32 = constant 2000 : i32 - %c2200_i32 = constant 2200 : i32 - %c2400_i32 = constant 2400 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloc() : memref<1600x1800xf64> - %1 = memref.alloc() : memref<1600x2000xf64> - %2 = memref.alloc() : memref<2000x1800xf64> - %3 = memref.alloc() : memref<1800x2200xf64> - %4 = memref.alloc() : memref<1800x2400xf64> - %5 = memref.alloc() : memref<2400x2200xf64> - %6 = memref.alloc() : memref<1600x2200xf64> - %7 = memref.cast %1 : memref<1600x2000xf64> to memref - %8 = memref.cast %2 : memref<2000x1800xf64> to memref - %9 = memref.cast %4 : memref<1800x2400xf64> to memref - %10 = memref.cast %5 : memref<2400x2200xf64> to memref - call @init_array(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %7, %8, %9, %10) : (i32, i32, i32, i32, i32, memref, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - %11 = memref.cast %0 : memref<1600x1800xf64> to memref - %12 = memref.cast %3 : memref<1800x2200xf64> to memref - %13 = memref.cast %6 : memref<1600x2200xf64> to memref - call @kernel_3mm(%c1600_i32, %c1800_i32, %c2000_i32, %c2200_i32, %c2400_i32, %11, %7, %8, %12, %9, %10, %13) : (i32, i32, i32, i32, i32, memref, memref, memref, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %14 = cmpi sgt, %arg0, %c42_i32 : i32 - %15 = scf.if %14 -> (i1) { - %16 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %17 = llvm.load %16 : !llvm.ptr> - %18 = llvm.mlir.addressof @str0 : !llvm.ptr> - %19 = llvm.getelementptr %18[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %20 = llvm.call @strcmp(%17, %19) : (!llvm.ptr, !llvm.ptr) -> i32 - %21 = trunci %20 : i32 to i1 - %22 = xor %21, %true : i1 - scf.yield %22 : i1 - } else { - scf.yield %false : i1 - } - scf.if %15 { - call @print_array(%c1600_i32, %c2200_i32, %13) : (i32, i32, memref) -> () - } - memref.dealloc %0 : memref<1600x1800xf64> - memref.dealloc %1 : memref<1600x2000xf64> - memref.dealloc %2 : memref<2000x1800xf64> - memref.dealloc %3 : memref<1800x2200xf64> - memref.dealloc %4 : memref<1800x2400xf64> - memref.dealloc %5 : memref<2400x2200xf64> - memref.dealloc %6 : memref<1600x2200xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref) { - %c3_i32 = constant 3 : i32 - %c2_i32 = constant 2 : i32 - %c5_i32 = constant 5 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg9 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg2 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = muli %arg10, %arg11 : i32 - %9 = addi %8, %c1_i32 : i32 - %10 = remi_signed %9, %arg0 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg0, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg5[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1:2 = scf.while (%arg9 = %0#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg2 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = index_cast %arg1 : i32 to index - %6 = scf.for %arg11 = %c0 to %5 step %c1 iter_args(%arg12 = %c0_i32) -> (i32) { - %8 = index_cast %arg12 : i32 to index - %9 = addi %arg12, %c1_i32 : i32 - %10 = muli %arg10, %9 : i32 - %11 = addi %10, %c2_i32 : i32 - %12 = remi_signed %11, %arg1 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = muli %arg1, %c5_i32 : i32 - %15 = sitofp %14 : i32 to f64 - %16 = divf %13, %15 : f64 - memref.store %16, %arg6[%4, %8] : memref - scf.yield %9 : i32 - } - %7 = addi %arg10, %c1_i32 : i32 - scf.yield %7 : i32 - } - %2:2 = scf.while (%arg9 = %1#0) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg9, %arg1 : i32 - scf.condition(%4) %c0_i32, %arg9 : i32, i32 - } do { - ^bb0(%arg9: i32, %arg10: i32): // no predecessors - %4 = index_cast %arg10 : i32 to index - %5 = scf.while (%arg11 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg11, %arg4 : i32 - scf.condition(%7) %arg11 : i32 - } do { - ^bb0(%arg11: i32): // no predecessors - %7 = index_cast %arg11 : i32 to index - %8 = addi %arg11, %c3_i32 : i32 - %9 = muli %arg10, %8 : i32 - %10 = remi_signed %9, %arg3 : i32 - %11 = sitofp %10 : i32 to f64 - %12 = muli %arg3, %c5_i32 : i32 - %13 = sitofp %12 : i32 to f64 - %14 = divf %11, %13 : f64 - memref.store %14, %arg7[%4, %7] : memref - %15 = addi %arg11, %c1_i32 : i32 - scf.yield %15 : i32 - } - %6 = addi %arg10, %c1_i32 : i32 - scf.yield %6 : i32 - } - %3 = scf.while (%arg9 = %2#0) : (i32) -> i32 { - %4 = cmpi slt, %arg9, %arg4 : i32 - scf.condition(%4) %arg9 : i32 - } do { - ^bb0(%arg9: i32): // no predecessors - %4 = index_cast %arg9 : i32 to index - %5 = scf.while (%arg10 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg10, %arg3 : i32 - scf.condition(%7) %arg10 : i32 - } do { - ^bb0(%arg10: i32): // no predecessors - %7 = index_cast %arg10 : i32 to index - %8 = addi %arg10, %c2_i32 : i32 - %9 = muli %arg9, %8 : i32 - %10 = addi %9, %c2_i32 : i32 - %11 = remi_signed %10, %arg2 : i32 - %12 = sitofp %11 : i32 to f64 - %13 = muli %arg2, %c5_i32 : i32 - %14 = sitofp %13 : i32 to f64 - %15 = divf %12, %14 : f64 - memref.store %15, %arg8[%4, %7] : memref - %16 = addi %arg10, %c1_i32 : i32 - scf.yield %16 : i32 - } - %6 = addi %arg9, %c1_i32 : i32 - scf.yield %6 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_3mm(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: i32, %arg4: i32, %arg5: memref, %arg6: memref, %arg7: memref, %arg8: memref, %arg9: memref, %arg10: memref, %arg11: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg2 : i32 to index - %2 = index_cast %arg3 : i32 to index - %3 = index_cast %arg4 : i32 to index - %4 = index_cast %arg0 : i32 to index - affine.for %arg12 = 0 to %4 { - affine.for %arg13 = 0 to %0 { - affine.store %cst, %arg5[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %1 { - %5 = affine.load %arg6[%arg12, %arg14] : memref - %6 = affine.load %arg7[%arg14, %arg13] : memref - %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 - %8 = affine.load %arg5[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg5[%arg12, %arg13] : memref - } - } - } - affine.for %arg12 = 0 to %0 { - affine.for %arg13 = 0 to %2 { - affine.store %cst, %arg8[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %3 { - %5 = affine.load %arg9[%arg12, %arg14] : memref - %6 = affine.load %arg10[%arg14, %arg13] : memref - %7 = mulf %5, %6 {scop.splittable = 1 : index} : f64 - %8 = affine.load %arg8[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg8[%arg12, %arg13] : memref - } - } - } - affine.for %arg12 = 0 to %4 { - affine.for %arg13 = 0 to %2 { - affine.store %cst, %arg11[%arg12, %arg13] : memref - affine.for %arg14 = 0 to %0 { - %5 = affine.load %arg5[%arg12, %arg14] : memref - %6 = affine.load %arg8[%arg14, %arg13] : memref - %7 = mulf %5, %6 {scop.splittable = 2 : index} : f64 - %8 = affine.load %arg11[%arg12, %arg13] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg11[%arg12, %arg13] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%25) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %25 = index_cast %arg3 : i32 to index - %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg4, %arg1 : i32 - scf.condition(%28) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %28 = index_cast %arg4 : i32 to index - %29 = muli %arg3, %arg0 : i32 - %30 = addi %29, %arg4 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg2[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg4, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg3, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/README.md b/example/polybench/split-and-merge/README.md index b0de381a..a8504bf4 100644 --- a/example/polybench/split-and-merge/README.md +++ b/example/polybench/split-and-merge/README.md @@ -4,9 +4,15 @@ This directory contains examples that does statement splitting and merging. ## How to run? -```sh -# Usage: ./eval-split +> Due to some recent updates, some of the scripts here may not work properly. We will update them later. + +### Evaluate heuristic splitting -./eval-split correlation -./eval-split covariance +```sh +./eval-split-mlir-heuristic 2mm/2mm.c +./eval-split-mlir-heuristic 3mm/3mm.c +./eval-split-mlir-heuristic correlation/correlation.c +./eval-split-mlir-heuristic covariance/covariance.c +./eval-split-mlir-heuristic trmm/trmm.c ``` + diff --git a/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.par.log b/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.par.log new file mode 100644 index 00000000..9fa183f7 --- /dev/null +++ b/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.par.log @@ -0,0 +1,1030 @@ +t6 {loop with stmts: S10, S11, } +t5 {loop with stmts: S10, S11, } +t4 {loop with stmts: S10, S11, } +Pluto schedule elapsed time: 2.922787e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +13 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 12 ## c6 == 12 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S0(i0) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 11 ## c7 == 11 + +# ---------------------------------------------- 2.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## c1 == 4 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 10 ## c6 == 10 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 3.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S2(i0) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 9 ## c6 == 9 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 4.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S3(i0) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 8 ## c7 == 8 + +# ---------------------------------------------- 5.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 7 ## c6 == 7 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 6.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S5(i0) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 7 ## c1 == 7 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 6 ## c7 == 6 + +# ---------------------------------------------- 7.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S6(i0, i1) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -2 ## -i0+P0-2 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 5 ## c6 == 5 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 8.3 Access +WRITE +3 9 3 2 0 2 +# e/i| Arr [1] [2]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 ## [1] == i0 + 0 0 0 -1 0 1 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S7(i0) + + +# =============================================== Statement 9 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 9.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 9.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 4 ## c7 == 4 + +# ---------------------------------------------- 9.3 Access +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 9.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S8(i0, i1) + + +# =============================================== Statement 10 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 10.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 10.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 8 ## c1 == 8 + 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 ## c2 == fk0+fk1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i2 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c7 == 2 + +# ---------------------------------------------- 10.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 10.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S9(i2, i1, i0) + + +# =============================================== Statement 11 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 11.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 11.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 8 ## c1 == 8 + 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 ## c2 == fk0+fk1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i2 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 3 ## c7 == 3 + +# ---------------------------------------------- 11.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +READ +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +WRITE +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 11.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S10(i0, i1, i2) + + +# =============================================== Statement 12 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 12.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 12.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 9 ## c1 == 9 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 ## c7 == 1 + +# ---------------------------------------------- 12.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 12.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S11(i1, i0) + + +# =============================================== Statement 13 +# Number of relations describing the statement: +2 + +# ---------------------------------------------- 13.1 Domain +DOMAIN +3 4 0 0 0 2 +# e/i| P0 P1 | 1 + 0 0 0 0 ## 0 == 0 + 0 0 0 0 ## 0 == 0 + 0 0 0 0 ## 0 == 0 + +# ---------------------------------------------- 13.2 Scattering +SCATTERING +7 11 7 0 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 13.3 Access +# NULL relation list + +# ---------------------------------------------- 13.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +0 +# Statement body expression +S12() + + +# =============================================== Extensions + +# Number of arrays +5 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 + + + +kernel_correlation + + +t1 t2 t3 t4 t5 t6 t7 + + + +# Number of loops +9 +# =========================================== +# Loop number 1 +# Iterator name +t2 +# Number of stmts +3 +# Statement identifiers +1 +4 +8 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +2 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 3 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +3 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 4 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +5 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 5 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +6 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 6 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +7 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 7 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +9 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 8 +# Iterator name +t3 +# Number of stmts +2 +# Statement identifiers +10 +11 +# Private variables +t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 9 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +12 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 + + + + +[CLooG] INFO: 1 domains have been blocked. +[CLooG] INFO: 2 dimensions (over 7) are scalar. +S12() +lbp=0; +ubp=floord(P0-2,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + S8(t4, t5) + } + } + } +} +lbp=0; +ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-2,32*t2+31);t3++) { + S7(t3) + S3(t3) + S0(t3) + } + if (t2 >= ceild(P0-32,32)) { + S3(P0-1) + S0(P0-1) + } +} +if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S1(t5, t4) + } + } + } + } +} +lbp=0; +ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S2(t3) + } +} +if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S4(t5, t4) + } + } + } + } +} +lbp=0; +ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S5(t3) + } +} +if (P0 >= 1) { + lbp=0; + ubp=floord(P1-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + S6(t4, t5) + } + } + } + } +} +if ((P0 >= 2) && (P1 >= 1)) { + for (t2=0;t2<=floord(P0+P1-3,32);t2++) { + lbp=max(0,ceild(32*t2-P1+1,32)); + ubp=min(floord(P0-2,32),t2); +#pragma omp parallel for private(lbv,ubv,t4,t5,t6,t7) + for (t3=lbp;t3<=ubp;t3++) { + for (t4=32*t2-32*t3;t4<=min(P1-1,32*t2-32*t3+31);t4++) { + for (t5=32*t3;t5<=min(P0-2,32*t3+31);t5++) { + for (t6=t5+1;t6<=P0-1;t6++) { + S9(t4, t6, t5) + S10(t5, t6, t4) + } + } + } + } + } +} +lbp=0; +ubp=floord(P0-2,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + S11(t5, t4) + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.3783 seconds + + ---Wall Time--- --- Name --- + 0.0003 ( 0.1%) {anonymous}::AnnotateHeuristicPass + 0.0003 ( 0.1%) {anonymous}::ScopStmtSplitPass + 0.0002 ( 0.0%) {anonymous}::UnifyScratchpadPass + 0.0007 ( 0.2%) Canonicalizer + 0.0003 ( 0.1%) 'func' Pipeline + 0.0001 ( 0.0%) {anonymous}::RegToMemPass + 0.0001 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0004 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.3710 ( 98.1%) {anonymous}::PlutoTransformPass + 0.0011 ( 0.3%) Canonicalizer + 0.0030 ( 0.8%) Inliner + 0.0023 ( 0.6%) 'func' Pipeline + 0.0023 ( 0.6%) Canonicalizer + 0.0000 ( 0.0%) (A) CallGraph + 0.0013 ( 0.3%) Canonicalizer + 0.3783 (100.0%) Total diff --git a/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.par.mlir b/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.par.mlir index e2243a1a..38dc1703 100644 --- a/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.par.mlir +++ b/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.par.mlir @@ -10,7 +10,19 @@ #map9 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> #map10 = affine_map<(d0, d1) -> (3000, d0 * 32 - d1 * 32 + 32)> #map11 = affine_map<(d0) -> (d0 + 1)> -#set = affine_set<(d0) : (d0 - 81 >= 0)> +#map12 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> +#map13 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map14 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> +#map15 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map16 = affine_map<(d0)[s0] -> (s0 - 1, d0 * 32 + 32)> +#map17 = affine_map<()[s0, s1] -> ((s0 + s1 - 3) floordiv 32 + 1)> +#map18 = affine_map<(d0)[s0] -> (0, (d0 * 32 - s0 + 1) ceildiv 32)> +#map19 = affine_map<(d0)[s0] -> ((s0 - 2) floordiv 32 + 1, d0 + 1)> +#map20 = affine_map<(d0, d1)[s0] -> (s0, d0 * 32 - d1 * 32 + 32)> +#set0 = affine_set<(d0) : (d0 - 81 >= 0)> +#set1 = affine_set<(d0)[s0] : (d0 - (s0 - 32) ceildiv 32 >= 0)> +#set2 = affine_set<()[s0] : (s0 - 1 >= 0)> +#set3 = affine_set<()[s0, s1] : (s0 - 2 >= 0, s1 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -88,7 +100,7 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 affine.store %cst, %5[%arg3] : memref<2600xf64> affine.store %cst, %4[%arg3] : memref<2600xf64> } - affine.if #set(%arg2) { + affine.if #set0(%arg2) { affine.store %cst, %5[2599] : memref<2600xf64> affine.store %cst, %4[2599] : memref<2600xf64> } @@ -208,95 +220,131 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg2[symbol(%arg1)] : memref - %3 = subf %1, %2 : f64 - %4 = mulf %3, %3 : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - %2 = math.sqrt %1 : f64 - %3 = cmpf ule, %2, %cst : f64 - %4 = select %3, %cst_0, %2 : f64 - affine.store %4, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: f64, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - %3 = math.sqrt %arg4 : f64 - %4 = affine.load %arg3[symbol(%arg2)] : memref - %5 = mulf %3, %4 : f64 - %6 = divf %2, %5 : f64 - affine.store %6, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S9(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg4)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S10(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S11(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S12(%arg0: memref, %arg1: index) attributes {scop.stmt} { + func @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref, %arg7: memref) { %c1 = constant 1 : index - %cst = constant 1.000000e+00 : f64 - %0 = subi %arg1, %c1 : index - memref.store %cst, %arg0[%0, %0] : memref + %cst = constant 0.000000e+00 : f64 + %cst_0 = constant 1.000000e-01 : f64 + %cst_1 = constant 1.000000e+00 : f64 + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = subi %0, %c1 : index + memref.store %cst_1, %arg4[%2, %2] : memref + affine.for %arg8 = 0 to #map12()[%0] { + affine.for %arg9 = #map0(%arg8) to #map13()[%0] { + affine.for %arg10 = #map1(%arg8) to min #map14(%arg8, %arg9)[%0] { + affine.for %arg11 = max #map3(%arg9, %arg10) to min #map15(%arg9)[%0] { + affine.store %cst, %arg4[%arg10, %arg11] : memref + } + } + } + } {scop.parallelizable} + affine.for %arg8 = 0 to #map13()[%0] { + affine.for %arg9 = #map1(%arg8) to min #map16(%arg8)[%0] { + affine.store %cst_1, %arg4[%arg9, %arg9] : memref + affine.store %cst, %arg6[%arg9] : memref + affine.store %cst, %arg5[%arg9] : memref + } + affine.if #set1(%arg8)[%0] { + affine.store %cst, %arg6[symbol(%0) - 1] : memref + affine.store %cst, %arg5[symbol(%0) - 1] : memref + } + } {scop.parallelizable} + affine.if #set2()[%1] { + affine.for %arg8 = 0 to #map13()[%0] { + affine.for %arg9 = 0 to #map13()[%1] { + affine.for %arg10 = #map1(%arg9) to min #map15(%arg9)[%1] { + affine.for %arg11 = #map1(%arg8) to min #map15(%arg8)[%0] { + %3 = affine.load %arg5[%arg11] : memref + %4 = affine.load %arg3[%arg10, %arg11] : memref + %5 = addf %3, %4 : f64 + affine.store %5, %arg5[%arg11] : memref + } + } + } + } {scop.parallelizable} + } + affine.for %arg8 = 0 to #map13()[%0] { + affine.for %arg9 = #map1(%arg8) to min #map15(%arg8)[%0] { + %3 = affine.load %arg5[%arg9] : memref + %4 = divf %3, %arg2 : f64 + affine.store %4, %arg5[%arg9] : memref + } + } {scop.parallelizable} + affine.if #set2()[%1] { + affine.for %arg8 = 0 to #map13()[%0] { + affine.for %arg9 = 0 to #map13()[%1] { + affine.for %arg10 = #map1(%arg9) to min #map15(%arg9)[%1] { + affine.for %arg11 = #map1(%arg8) to min #map15(%arg8)[%0] { + %3 = affine.load %arg6[%arg11] : memref + %4 = affine.load %arg3[%arg10, %arg11] : memref + %5 = affine.load %arg5[%arg11] : memref + %6 = subf %4, %5 : f64 + %7 = mulf %6, %6 : f64 + %8 = addf %3, %7 : f64 + affine.store %8, %arg6[%arg11] : memref + } + } + } + } {scop.parallelizable} + } + affine.for %arg8 = 0 to #map13()[%0] { + affine.for %arg9 = #map1(%arg8) to min #map15(%arg8)[%0] { + %3 = affine.load %arg6[%arg9] : memref + %4 = divf %3, %arg2 : f64 + %5 = math.sqrt %4 : f64 + %6 = cmpf ule, %5, %cst_0 : f64 + %7 = select %6, %cst_1, %5 : f64 + affine.store %7, %arg6[%arg9] : memref + } + } {scop.parallelizable} + affine.if #set2()[%0] { + affine.for %arg8 = 0 to #map13()[%1] { + affine.for %arg9 = 0 to #map13()[%0] { + affine.for %arg10 = #map1(%arg8) to min #map15(%arg8)[%1] { + affine.for %arg11 = #map1(%arg9) to min #map15(%arg9)[%0] { + %3 = affine.load %arg3[%arg10, %arg11] : memref + %4 = affine.load %arg5[%arg11] : memref + %5 = subf %3, %4 : f64 + %6 = math.sqrt %arg2 : f64 + %7 = affine.load %arg6[%arg11] : memref + %8 = mulf %6, %7 : f64 + %9 = divf %5, %8 : f64 + affine.store %9, %arg3[%arg10, %arg11] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set3()[%0, %1] { + affine.for %arg8 = 0 to #map17()[%0, %1] { + affine.for %arg9 = max #map18(%arg8)[%1] to min #map19(%arg8)[%0] { + affine.for %arg10 = #map9(%arg8, %arg9) to min #map20(%arg8, %arg9)[%1] { + affine.for %arg11 = #map1(%arg9) to min #map16(%arg9)[%0] { + affine.for %arg12 = #map11(%arg11) to %0 { + %3 = affine.load %arg3[%arg10, %arg11] : memref + %4 = affine.load %arg3[%arg10, %arg12] : memref + %5 = mulf %3, %4 {scop.splittable = 0 : index} : f64 + affine.store %5, %arg7[%arg10] : memref + %6 = affine.load %arg4[%arg11, %arg12] : memref + %7 = affine.load %arg7[%arg10] : memref + %8 = addf %6, %7 : f64 + affine.store %8, %arg4[%arg11, %arg12] : memref + } + } + } + } {scop.parallelizable} + } + } + affine.for %arg8 = 0 to #map12()[%0] { + affine.for %arg9 = #map0(%arg8) to #map13()[%0] { + affine.for %arg10 = #map1(%arg8) to min #map14(%arg8, %arg9)[%0] { + affine.for %arg11 = max #map3(%arg9, %arg10) to min #map15(%arg9)[%0] { + %3 = affine.load %arg4[%arg10, %arg11] : memref + affine.store %3, %arg4[%arg11, %arg10] : memref + } + } + } + } {scop.parallelizable} return } func private @print_array(%arg0: i32, %arg1: memref) { diff --git a/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.seq.log b/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.seq.log new file mode 100644 index 00000000..c1926221 --- /dev/null +++ b/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.seq.log @@ -0,0 +1,887 @@ +t6 {loop with stmts: S10, S11, } +t5 {loop with stmts: S10, S11, } +t4 {loop with stmts: S10, S11, } +Pluto schedule elapsed time: 2.895294e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +13 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 12 ## c6 == 12 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S0(i0) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 11 ## c7 == 11 + +# ---------------------------------------------- 2.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## c1 == 4 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 10 ## c6 == 10 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 3.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S2(i0) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 9 ## c6 == 9 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 4.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S3(i0) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 8 ## c7 == 8 + +# ---------------------------------------------- 5.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 7 ## c6 == 7 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 6.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S5(i0) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 7 ## c1 == 7 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 6 ## c7 == 6 + +# ---------------------------------------------- 7.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S6(i0, i1) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -2 ## -i0+P0-2 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 5 ## c6 == 5 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 8.3 Access +WRITE +3 9 3 2 0 2 +# e/i| Arr [1] [2]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 ## [1] == i0 + 0 0 0 -1 0 1 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S7(i0) + + +# =============================================== Statement 9 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 9.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 9.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 4 ## c7 == 4 + +# ---------------------------------------------- 9.3 Access +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 9.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S8(i0, i1) + + +# =============================================== Statement 10 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 10.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 10.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 8 ## c1 == 8 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i2 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c7 == 2 + +# ---------------------------------------------- 10.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +# ---------------------------------------------- 10.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S9(i2, i1, i0) + + +# =============================================== Statement 11 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 11.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 11.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 8 ## c1 == 8 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i2 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 3 ## c7 == 3 + +# ---------------------------------------------- 11.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +READ +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 5 ## Arr == A5 + +WRITE +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 11.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S10(i0, i1, i2) + + +# =============================================== Statement 12 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 12.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 12.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 9 ## c1 == 9 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 ## c7 == 1 + +# ---------------------------------------------- 12.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 12.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S11(i1, i0) + + +# =============================================== Statement 13 +# Number of relations describing the statement: +2 + +# ---------------------------------------------- 13.1 Domain +DOMAIN +3 4 0 0 0 2 +# e/i| P0 P1 | 1 + 0 0 0 0 ## 0 == 0 + 0 0 0 0 ## 0 == 0 + 0 0 0 0 ## 0 == 0 + +# ---------------------------------------------- 13.2 Scattering +SCATTERING +7 11 7 0 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 13.3 Access +# NULL relation list + +# ---------------------------------------------- 13.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +0 +# Statement body expression +S12() + + +# =============================================== Extensions + +# Number of arrays +5 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 +5 A5 + + + +kernel_correlation + + +t1 t2 t3 t4 t5 t6 t7 + + + + +[CLooG] INFO: 1 domains have been blocked. +[CLooG] INFO: 2 dimensions (over 7) are scalar. +S12() +for (t2=0;t2<=floord(P0-2,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + S8(t4, t5) + } + } + } +} +for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-2,32*t2+31);t3++) { + S7(t3) + S3(t3) + S0(t3) + } + if (t2 >= ceild(P0-32,32)) { + S3(P0-1) + S0(P0-1) + } +} +if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S1(t5, t4) + } + } + } + } +} +for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S2(t3) + } +} +if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S4(t5, t4) + } + } + } + } +} +for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S5(t3) + } +} +if (P0 >= 1) { + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + S6(t4, t5) + } + } + } + } +} +if (P0 >= 2) { + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P0-2,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-2,32*t3+31);t5++) { + for (t6=t5+1;t6<=P0-1;t6++) { + S9(t4, t6, t5) + S10(t5, t6, t4) + } + } + } + } + } +} +for (t2=0;t2<=floord(P0-2,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + S11(t5, t4) + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.3814 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0007 ( 0.2%) 0.0007 ( 0.2%) {anonymous}::AnnotateHeuristicPass + 0.0007 ( 0.2%) 0.0007 ( 0.2%) {anonymous}::ScopStmtSplitPass + 0.0005 ( 0.1%) 0.0005 ( 0.1%) {anonymous}::UnifyScratchpadPass + 0.0018 ( 0.5%) 0.0018 ( 0.5%) Canonicalizer + 0.0009 ( 0.2%) 0.0004 ( 0.1%) 'func' Pipeline + 0.0005 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::RegToMemPass + 0.0004 ( 0.1%) 0.0002 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0007 ( 0.2%) 0.0007 ( 0.2%) {anonymous}::ExtractScopStmtPass + 0.3714 ( 97.3%) 0.3714 ( 97.4%) {anonymous}::PlutoTransformPass + 0.0010 ( 0.3%) 0.0010 ( 0.3%) Canonicalizer + 0.0028 ( 0.7%) 0.0028 ( 0.7%) Inliner + 0.0022 ( 0.6%) 0.0022 ( 0.6%) 'func' Pipeline + 0.0022 ( 0.6%) 0.0022 ( 0.6%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0014 ( 0.4%) 0.0014 ( 0.4%) Canonicalizer + 0.3818 (100.0%) 0.3814 (100.0%) Total diff --git a/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.seq.mlir b/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.seq.mlir index bca82708..b8e790d1 100644 --- a/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.seq.mlir +++ b/example/polybench/split-and-merge/correlation/correlation.heuristic.polymer.seq.mlir @@ -6,7 +6,15 @@ #map5 = affine_map<(d0) -> (2599, d0 * 32 + 32)> #map6 = affine_map<(d0) -> (3000, d0 * 32 + 32)> #map7 = affine_map<(d0) -> (d0 + 1)> -#set = affine_set<(d0) : (d0 - 81 >= 0)> +#map8 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> +#map9 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map10 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> +#map11 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map12 = affine_map<(d0)[s0] -> (s0 - 1, d0 * 32 + 32)> +#set0 = affine_set<(d0) : (d0 - 81 >= 0)> +#set1 = affine_set<(d0)[s0] : (d0 - (s0 - 32) ceildiv 32 >= 0)> +#set2 = affine_set<()[s0] : (s0 - 1 >= 0)> +#set3 = affine_set<()[s0] : (s0 - 2 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -84,7 +92,7 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 affine.store %cst, %5[%arg3] : memref<2600xf64> affine.store %cst, %4[%arg3] : memref<2600xf64> } - affine.if #set(%arg2) { + affine.if #set0(%arg2) { affine.store %cst, %5[2599] : memref<2600xf64> affine.store %cst, %4[2599] : memref<2600xf64> } @@ -204,95 +212,131 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg2[symbol(%arg1)] : memref - %3 = subf %1, %2 : f64 - %4 = mulf %3, %3 : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - %2 = math.sqrt %1 : f64 - %3 = cmpf ule, %2, %cst : f64 - %4 = select %3, %cst_0, %2 : f64 - affine.store %4, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: f64, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - %3 = math.sqrt %arg4 : f64 - %4 = affine.load %arg3[symbol(%arg2)] : memref - %5 = mulf %3, %4 : f64 - %6 = divf %2, %5 : f64 - affine.store %6, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S9(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg4)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S10(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S11(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S12(%arg0: memref, %arg1: index) attributes {scop.stmt} { + func @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref, %arg7: memref) { %c1 = constant 1 : index - %cst = constant 1.000000e+00 : f64 - %0 = subi %arg1, %c1 : index - memref.store %cst, %arg0[%0, %0] : memref + %cst = constant 0.000000e+00 : f64 + %cst_0 = constant 1.000000e-01 : f64 + %cst_1 = constant 1.000000e+00 : f64 + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = subi %0, %c1 : index + memref.store %cst_1, %arg4[%2, %2] : memref + affine.for %arg8 = 0 to #map8()[%0] { + affine.for %arg9 = #map0(%arg8) to #map9()[%0] { + affine.for %arg10 = #map1(%arg8) to min #map10(%arg8, %arg9)[%0] { + affine.for %arg11 = max #map3(%arg9, %arg10) to min #map11(%arg9)[%0] { + affine.store %cst, %arg4[%arg10, %arg11] : memref + } + } + } + } + affine.for %arg8 = 0 to #map9()[%0] { + affine.for %arg9 = #map1(%arg8) to min #map12(%arg8)[%0] { + affine.store %cst_1, %arg4[%arg9, %arg9] : memref + affine.store %cst, %arg6[%arg9] : memref + affine.store %cst, %arg5[%arg9] : memref + } + affine.if #set1(%arg8)[%0] { + affine.store %cst, %arg6[symbol(%0) - 1] : memref + affine.store %cst, %arg5[symbol(%0) - 1] : memref + } + } + affine.if #set2()[%1] { + affine.for %arg8 = 0 to #map9()[%0] { + affine.for %arg9 = 0 to #map9()[%1] { + affine.for %arg10 = #map1(%arg9) to min #map11(%arg9)[%1] { + affine.for %arg11 = #map1(%arg8) to min #map11(%arg8)[%0] { + %3 = affine.load %arg5[%arg11] : memref + %4 = affine.load %arg3[%arg10, %arg11] : memref + %5 = addf %3, %4 : f64 + affine.store %5, %arg5[%arg11] : memref + } + } + } + } + } + affine.for %arg8 = 0 to #map9()[%0] { + affine.for %arg9 = #map1(%arg8) to min #map11(%arg8)[%0] { + %3 = affine.load %arg5[%arg9] : memref + %4 = divf %3, %arg2 : f64 + affine.store %4, %arg5[%arg9] : memref + } + } + affine.if #set2()[%1] { + affine.for %arg8 = 0 to #map9()[%0] { + affine.for %arg9 = 0 to #map9()[%1] { + affine.for %arg10 = #map1(%arg9) to min #map11(%arg9)[%1] { + affine.for %arg11 = #map1(%arg8) to min #map11(%arg8)[%0] { + %3 = affine.load %arg6[%arg11] : memref + %4 = affine.load %arg3[%arg10, %arg11] : memref + %5 = affine.load %arg5[%arg11] : memref + %6 = subf %4, %5 : f64 + %7 = mulf %6, %6 : f64 + %8 = addf %3, %7 : f64 + affine.store %8, %arg6[%arg11] : memref + } + } + } + } + } + affine.for %arg8 = 0 to #map9()[%0] { + affine.for %arg9 = #map1(%arg8) to min #map11(%arg8)[%0] { + %3 = affine.load %arg6[%arg9] : memref + %4 = divf %3, %arg2 : f64 + %5 = math.sqrt %4 : f64 + %6 = cmpf ule, %5, %cst_0 : f64 + %7 = select %6, %cst_1, %5 : f64 + affine.store %7, %arg6[%arg9] : memref + } + } + affine.if #set2()[%0] { + affine.for %arg8 = 0 to #map9()[%1] { + affine.for %arg9 = 0 to #map9()[%0] { + affine.for %arg10 = #map1(%arg8) to min #map11(%arg8)[%1] { + affine.for %arg11 = #map1(%arg9) to min #map11(%arg9)[%0] { + %3 = affine.load %arg3[%arg10, %arg11] : memref + %4 = affine.load %arg5[%arg11] : memref + %5 = subf %3, %4 : f64 + %6 = math.sqrt %arg2 : f64 + %7 = affine.load %arg6[%arg11] : memref + %8 = mulf %6, %7 : f64 + %9 = divf %5, %8 : f64 + affine.store %9, %arg3[%arg10, %arg11] : memref + } + } + } + } + } + affine.if #set3()[%0] { + affine.for %arg8 = 0 to #map9()[%1] { + affine.for %arg9 = 0 to #map8()[%0] { + affine.for %arg10 = #map1(%arg8) to min #map11(%arg8)[%1] { + affine.for %arg11 = #map1(%arg9) to min #map12(%arg9)[%0] { + affine.for %arg12 = #map7(%arg11) to %0 { + %3 = affine.load %arg3[%arg10, %arg11] : memref + %4 = affine.load %arg3[%arg10, %arg12] : memref + %5 = mulf %3, %4 {scop.splittable = 0 : index} : f64 + affine.store %5, %arg7[%arg10] : memref + %6 = affine.load %arg4[%arg11, %arg12] : memref + %7 = affine.load %arg7[%arg10] : memref + %8 = addf %6, %7 : f64 + affine.store %8, %arg4[%arg11, %arg12] : memref + } + } + } + } + } + } + affine.for %arg8 = 0 to #map8()[%0] { + affine.for %arg9 = #map0(%arg8) to #map9()[%0] { + affine.for %arg10 = #map1(%arg8) to min #map10(%arg8, %arg9)[%0] { + affine.for %arg11 = max #map3(%arg9, %arg10) to min #map11(%arg9)[%0] { + %3 = affine.load %arg4[%arg10, %arg11] : memref + affine.store %3, %arg4[%arg11, %arg10] : memref + } + } + } + } return } func private @print_array(%arg0: i32, %arg1: memref) { diff --git a/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.par.log b/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.par.log new file mode 100644 index 00000000..bbafccbe --- /dev/null +++ b/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.par.log @@ -0,0 +1,963 @@ +Pluto schedule elapsed time: 1.954085e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +12 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S0(i0) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 2.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## c1 == 4 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 3.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S2(i0) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 4.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S3(i0) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 5.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 6.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S5(i0) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 7 ## c1 == 7 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 7.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S6(i0, i1) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -2 ## -i0+P0-2 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 8.3 Access +WRITE +3 9 3 2 0 2 +# e/i| Arr [1] [2]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 ## [1] == i0 + 0 0 0 -1 0 1 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S7(i0) + + +# =============================================== Statement 9 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 9.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 9.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 9.3 Access +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 9.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S8(i0, i1) + + +# =============================================== Statement 10 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 10.1 Domain +DOMAIN +12 10 6 0 0 2 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 1 0 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 0 -1 1 0 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 10.2 Scattering +SCATTERING +7 17 7 6 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 ## c1 == 8 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == fk2 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c7 == i1 + +# ---------------------------------------------- 10.3 Access +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 10.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S9(i0, i1, i2) + + +# =============================================== Statement 11 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 11.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 11.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 9 ## c1 == 9 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 11.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 11.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S10(i1, i0) + + +# =============================================== Statement 12 +# Number of relations describing the statement: +2 + +# ---------------------------------------------- 12.1 Domain +DOMAIN +3 4 0 0 0 2 +# e/i| P0 P1 | 1 + 0 0 0 0 ## 0 == 0 + 0 0 0 0 ## 0 == 0 + 0 0 0 0 ## 0 == 0 + +# ---------------------------------------------- 12.2 Scattering +SCATTERING +7 11 7 0 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 12.3 Access +# NULL relation list + +# ---------------------------------------------- 12.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +0 +# Statement body expression +S11() + + +# =============================================== Extensions + +# Number of arrays +4 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 + + + +kernel_correlation + + +t1 t2 t3 t4 t5 t6 t7 + + + +# Number of loops +9 +# =========================================== +# Loop number 1 +# Iterator name +t2 +# Number of stmts +3 +# Statement identifiers +1 +4 +8 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +2 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 3 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +3 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 4 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +5 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 5 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +6 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 6 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +7 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 7 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +9 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 8 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +10 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 9 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +11 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 + + + + +[CLooG] INFO: 1 dimensions (over 7) are scalar. +S11() +lbp=0; +ubp=floord(P0-2,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + S8(t4, t5) + } + } + } +} +lbp=0; +ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-2,32*t2+31);t3++) { + S0(t3) + S3(t3) + S7(t3) + } + if (t2 >= ceild(P0-32,32)) { + S0(P0-1) + S3(P0-1) + } +} +if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S1(t5, t4) + } + } + } + } +} +lbp=0; +ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S2(t3) + } +} +if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S4(t5, t4) + } + } + } + } +} +lbp=0; +ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S5(t3) + } +} +if (P0 >= 1) { + lbp=0; + ubp=floord(P1-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + S6(t4, t5) + } + } + } + } +} +if (P1 >= 1) { + lbp=0; + ubp=floord(P0-2,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=32*t2;t5<=min(min(P0-2,32*t2+31),32*t3+30);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + for (t7=max(32*t3,t5+1);t7<=min(P0-1,32*t3+31);t7++) { + S9(t5, t7, t6) + } + } + } + } + } + } +} +lbp=0; +ubp=floord(P0-2,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) +for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + S10(t5, t4) + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.2879 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0010 ( 0.4%) 0.0005 ( 0.2%) 'func' Pipeline + 0.0006 ( 0.2%) 0.0003 ( 0.1%) {anonymous}::RegToMemPass + 0.0004 ( 0.1%) 0.0002 ( 0.1%) {anonymous}::InsertRedundantLoadPass + 0.0010 ( 0.3%) 0.0010 ( 0.3%) {anonymous}::ExtractScopStmtPass + 0.2811 ( 97.5%) 0.2811 ( 97.6%) {anonymous}::PlutoTransformPass + 0.0010 ( 0.4%) 0.0010 ( 0.4%) Canonicalizer + 0.0029 ( 1.0%) 0.0029 ( 1.0%) Inliner + 0.0023 ( 0.8%) 0.0023 ( 0.8%) 'func' Pipeline + 0.0023 ( 0.8%) 0.0023 ( 0.8%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0014 ( 0.5%) 0.0014 ( 0.5%) Canonicalizer + 0.2884 (100.0%) 0.2879 (100.0%) Total diff --git a/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.par.mlir b/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.par.mlir index 81caf748..deab5144 100644 --- a/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.par.mlir +++ b/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.par.mlir @@ -5,7 +5,14 @@ #map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> #map5 = affine_map<(d0) -> (2599, d0 * 32 + 32)> #map6 = affine_map<(d0) -> (3000, d0 * 32 + 32)> -#set = affine_set<(d0) : (d0 - 81 >= 0)> +#map7 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> +#map8 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map9 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> +#map10 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map11 = affine_map<(d0)[s0] -> (s0 - 1, d0 * 32 + 32)> +#set0 = affine_set<(d0) : (d0 - 81 >= 0)> +#set1 = affine_set<(d0)[s0] : (d0 - (s0 - 32) ceildiv 32 >= 0)> +#set2 = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -82,7 +89,7 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 affine.store %cst, %4[%arg3] : memref<2600xf64> affine.store %cst_1, %2[%arg3, %arg3] : memref<2600x2600xf64> } - affine.if #set(%arg2) { + affine.if #set0(%arg2) { affine.store %cst, %3[2599] : memref<2600xf64> affine.store %cst, %4[2599] : memref<2600xf64> } @@ -202,90 +209,131 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg2[symbol(%arg1)] : memref - %3 = subf %1, %2 : f64 - %4 = mulf %3, %3 : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - %2 = math.sqrt %1 : f64 - %3 = cmpf ule, %2, %cst : f64 - %4 = select %3, %cst_0, %2 : f64 - affine.store %4, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: f64, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - %3 = math.sqrt %arg4 : f64 - %4 = affine.load %arg3[symbol(%arg2)] : memref - %5 = mulf %3, %4 : f64 - %6 = divf %2, %5 : f64 - affine.store %6, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S9(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S10(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S11(%arg0: memref, %arg1: index) attributes {scop.stmt} { + func @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { %c1 = constant 1 : index - %cst = constant 1.000000e+00 : f64 - %0 = subi %arg1, %c1 : index - memref.store %cst, %arg0[%0, %0] : memref + %cst = constant 0.000000e+00 : f64 + %cst_0 = constant 1.000000e-01 : f64 + %cst_1 = constant 1.000000e+00 : f64 + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = subi %0, %c1 : index + memref.store %cst_1, %arg4[%2, %2] : memref + affine.for %arg7 = 0 to #map7()[%0] { + affine.for %arg8 = #map0(%arg7) to #map8()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map9(%arg7, %arg8)[%0] { + affine.for %arg10 = max #map3(%arg8, %arg9) to min #map10(%arg8)[%0] { + affine.store %cst, %arg4[%arg9, %arg10] : memref + } + } + } + } {scop.parallelizable} + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map11(%arg7)[%0] { + affine.store %cst, %arg5[%arg8] : memref + affine.store %cst, %arg6[%arg8] : memref + affine.store %cst_1, %arg4[%arg8, %arg8] : memref + } + affine.if #set1(%arg7)[%0] { + affine.store %cst, %arg5[symbol(%0) - 1] : memref + affine.store %cst, %arg6[symbol(%0) - 1] : memref + } + } {scop.parallelizable} + affine.if #set2()[%1] { + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = 0 to #map8()[%1] { + affine.for %arg9 = #map1(%arg8) to min #map10(%arg8)[%1] { + affine.for %arg10 = #map1(%arg7) to min #map10(%arg7)[%0] { + %3 = affine.load %arg5[%arg10] : memref + %4 = affine.load %arg3[%arg9, %arg10] : memref + %5 = addf %3, %4 : f64 + affine.store %5, %arg5[%arg10] : memref + } + } + } + } {scop.parallelizable} + } + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map10(%arg7)[%0] { + %3 = affine.load %arg5[%arg8] : memref + %4 = divf %3, %arg2 : f64 + affine.store %4, %arg5[%arg8] : memref + } + } {scop.parallelizable} + affine.if #set2()[%1] { + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = 0 to #map8()[%1] { + affine.for %arg9 = #map1(%arg8) to min #map10(%arg8)[%1] { + affine.for %arg10 = #map1(%arg7) to min #map10(%arg7)[%0] { + %3 = affine.load %arg6[%arg10] : memref + %4 = affine.load %arg3[%arg9, %arg10] : memref + %5 = affine.load %arg5[%arg10] : memref + %6 = subf %4, %5 : f64 + %7 = mulf %6, %6 : f64 + %8 = addf %3, %7 : f64 + affine.store %8, %arg6[%arg10] : memref + } + } + } + } {scop.parallelizable} + } + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map10(%arg7)[%0] { + %3 = affine.load %arg6[%arg8] : memref + %4 = divf %3, %arg2 : f64 + %5 = math.sqrt %4 : f64 + %6 = cmpf ule, %5, %cst_0 : f64 + %7 = select %6, %cst_1, %5 : f64 + affine.store %7, %arg6[%arg8] : memref + } + } {scop.parallelizable} + affine.if #set2()[%0] { + affine.for %arg7 = 0 to #map8()[%1] { + affine.for %arg8 = 0 to #map8()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map10(%arg7)[%1] { + affine.for %arg10 = #map1(%arg8) to min #map10(%arg8)[%0] { + %3 = affine.load %arg3[%arg9, %arg10] : memref + %4 = affine.load %arg5[%arg10] : memref + %5 = subf %3, %4 : f64 + %6 = math.sqrt %arg2 : f64 + %7 = affine.load %arg6[%arg10] : memref + %8 = mulf %6, %7 : f64 + %9 = divf %5, %8 : f64 + affine.store %9, %arg3[%arg9, %arg10] : memref + } + } + } + } {scop.parallelizable} + } + affine.if #set2()[%1] { + affine.for %arg7 = 0 to #map7()[%0] { + affine.for %arg8 = #map0(%arg7) to #map8()[%0] { + affine.for %arg9 = 0 to #map8()[%1] { + affine.for %arg10 = #map1(%arg7) to min #map9(%arg7, %arg8)[%0] { + affine.for %arg11 = #map1(%arg9) to min #map10(%arg9)[%1] { + affine.for %arg12 = max #map3(%arg8, %arg10) to min #map10(%arg8)[%0] { + %3 = affine.load %arg4[%arg10, %arg12] : memref + %4 = affine.load %arg3[%arg11, %arg10] : memref + %5 = affine.load %arg3[%arg11, %arg12] : memref + %6 = mulf %4, %5 : f64 + %7 = addf %3, %6 : f64 + affine.store %7, %arg4[%arg10, %arg12] : memref + } + } + } + } + } + } {scop.parallelizable} + } + affine.for %arg7 = 0 to #map7()[%0] { + affine.for %arg8 = #map0(%arg7) to #map8()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map9(%arg7, %arg8)[%0] { + affine.for %arg10 = max #map3(%arg8, %arg9) to min #map10(%arg8)[%0] { + %3 = affine.load %arg4[%arg9, %arg10] : memref + affine.store %3, %arg4[%arg10, %arg9] : memref + } + } + } + } {scop.parallelizable} return } func private @print_array(%arg0: i32, %arg1: memref) { diff --git a/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.seq.log b/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.seq.log new file mode 100644 index 00000000..f4e31f85 --- /dev/null +++ b/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.seq.log @@ -0,0 +1,821 @@ +Pluto schedule elapsed time: 1.956027e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +12 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S0(i0) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 2.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## c1 == 4 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 3.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S2(i0) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 4.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S3(i0) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 5.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 6.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S5(i0) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 7 ## c1 == 7 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 7.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S6(i0, i1) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -2 ## -i0+P0-2 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 8.3 Access +WRITE +3 9 3 2 0 2 +# e/i| Arr [1] [2]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 ## [1] == i0 + 0 0 0 -1 0 1 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S7(i0) + + +# =============================================== Statement 9 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 9.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 9.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 9.3 Access +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 9.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S8(i0, i1) + + +# =============================================== Statement 10 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 10.1 Domain +DOMAIN +12 10 6 0 0 2 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 1 0 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 0 -1 1 0 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 10.2 Scattering +SCATTERING +7 17 7 6 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 ## c1 == 8 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == fk2 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c7 == i1 + +# ---------------------------------------------- 10.3 Access +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 10.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S9(i0, i1, i2) + + +# =============================================== Statement 11 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 11.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -2 ## -i0+P0-2 >= 0 + 1 0 0 -1 1 0 0 -1 ## -i0+i1-1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 11.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 9 ## c1 == 9 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 11.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 11.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S10(i1, i0) + + +# =============================================== Statement 12 +# Number of relations describing the statement: +2 + +# ---------------------------------------------- 12.1 Domain +DOMAIN +3 4 0 0 0 2 +# e/i| P0 P1 | 1 + 0 0 0 0 ## 0 == 0 + 0 0 0 0 ## 0 == 0 + 0 0 0 0 ## 0 == 0 + +# ---------------------------------------------- 12.2 Scattering +SCATTERING +7 11 7 0 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 0 0 ## c2 == 0 + 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 + 0 0 0 0 -1 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 12.3 Access +# NULL relation list + +# ---------------------------------------------- 12.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +0 +# Statement body expression +S11() + + +# =============================================== Extensions + +# Number of arrays +4 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 + + + +kernel_correlation + + +t1 t2 t3 t4 t5 t6 t7 + + + + +[CLooG] INFO: 1 dimensions (over 7) are scalar. +S11() +for (t2=0;t2<=floord(P0-2,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + S8(t4, t5) + } + } + } +} +for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-2,32*t2+31);t3++) { + S0(t3) + S3(t3) + S7(t3) + } + if (t2 >= ceild(P0-32,32)) { + S0(P0-1) + S3(P0-1) + } +} +if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S1(t5, t4) + } + } + } + } +} +for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S2(t3) + } +} +if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S4(t5, t4) + } + } + } + } +} +for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S5(t3) + } +} +if (P0 >= 1) { + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + S6(t4, t5) + } + } + } + } +} +if (P1 >= 1) { + for (t2=0;t2<=floord(P0-2,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=32*t2;t5<=min(min(P0-2,32*t2+31),32*t3+30);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + for (t7=max(32*t3,t5+1);t7<=min(P0-1,32*t3+31);t7++) { + S9(t5, t7, t6) + } + } + } + } + } + } +} +for (t2=0;t2<=floord(P0-2,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + S10(t5, t4) + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.2781 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0006 ( 0.2%) 0.0003 ( 0.1%) 'func' Pipeline + 0.0003 ( 0.1%) 0.0002 ( 0.1%) {anonymous}::RegToMemPass + 0.0002 ( 0.1%) 0.0001 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0003 ( 0.1%) 0.0003 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.2722 ( 97.8%) 0.2722 ( 97.9%) {anonymous}::PlutoTransformPass + 0.0010 ( 0.3%) 0.0010 ( 0.3%) Canonicalizer + 0.0029 ( 1.0%) 0.0029 ( 1.0%) Inliner + 0.0022 ( 0.8%) 0.0022 ( 0.8%) 'func' Pipeline + 0.0022 ( 0.8%) 0.0022 ( 0.8%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0014 ( 0.5%) 0.0014 ( 0.5%) Canonicalizer + 0.2783 (100.0%) 0.2781 (100.0%) Total diff --git a/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.seq.mlir b/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.seq.mlir index 415b2350..7508917e 100644 --- a/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.seq.mlir +++ b/example/polybench/split-and-merge/correlation/correlation.nosplit.polymer.seq.mlir @@ -5,7 +5,14 @@ #map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> #map5 = affine_map<(d0) -> (2599, d0 * 32 + 32)> #map6 = affine_map<(d0) -> (3000, d0 * 32 + 32)> -#set = affine_set<(d0) : (d0 - 81 >= 0)> +#map7 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> +#map8 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map9 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> +#map10 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map11 = affine_map<(d0)[s0] -> (s0 - 1, d0 * 32 + 32)> +#set0 = affine_set<(d0) : (d0 - 81 >= 0)> +#set1 = affine_set<(d0)[s0] : (d0 - (s0 - 32) ceildiv 32 >= 0)> +#set2 = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -82,7 +89,7 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 affine.store %cst, %4[%arg3] : memref<2600xf64> affine.store %cst_1, %2[%arg3, %arg3] : memref<2600x2600xf64> } - affine.if #set(%arg2) { + affine.if #set0(%arg2) { affine.store %cst, %3[2599] : memref<2600xf64> affine.store %cst, %4[2599] : memref<2600xf64> } @@ -202,90 +209,131 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg2[symbol(%arg1)] : memref - %3 = subf %1, %2 : f64 - %4 = mulf %3, %3 : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - %2 = math.sqrt %1 : f64 - %3 = cmpf ule, %2, %cst : f64 - %4 = select %3, %cst_0, %2 : f64 - affine.store %4, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: f64, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - %3 = math.sqrt %arg4 : f64 - %4 = affine.load %arg3[symbol(%arg2)] : memref - %5 = mulf %3, %4 : f64 - %6 = divf %2, %5 : f64 - affine.store %6, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S9(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S10(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S11(%arg0: memref, %arg1: index) attributes {scop.stmt} { + func @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { %c1 = constant 1 : index - %cst = constant 1.000000e+00 : f64 - %0 = subi %arg1, %c1 : index - memref.store %cst, %arg0[%0, %0] : memref + %cst = constant 0.000000e+00 : f64 + %cst_0 = constant 1.000000e-01 : f64 + %cst_1 = constant 1.000000e+00 : f64 + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + %2 = subi %0, %c1 : index + memref.store %cst_1, %arg4[%2, %2] : memref + affine.for %arg7 = 0 to #map7()[%0] { + affine.for %arg8 = #map0(%arg7) to #map8()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map9(%arg7, %arg8)[%0] { + affine.for %arg10 = max #map3(%arg8, %arg9) to min #map10(%arg8)[%0] { + affine.store %cst, %arg4[%arg9, %arg10] : memref + } + } + } + } + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map11(%arg7)[%0] { + affine.store %cst, %arg5[%arg8] : memref + affine.store %cst, %arg6[%arg8] : memref + affine.store %cst_1, %arg4[%arg8, %arg8] : memref + } + affine.if #set1(%arg7)[%0] { + affine.store %cst, %arg5[symbol(%0) - 1] : memref + affine.store %cst, %arg6[symbol(%0) - 1] : memref + } + } + affine.if #set2()[%1] { + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = 0 to #map8()[%1] { + affine.for %arg9 = #map1(%arg8) to min #map10(%arg8)[%1] { + affine.for %arg10 = #map1(%arg7) to min #map10(%arg7)[%0] { + %3 = affine.load %arg5[%arg10] : memref + %4 = affine.load %arg3[%arg9, %arg10] : memref + %5 = addf %3, %4 : f64 + affine.store %5, %arg5[%arg10] : memref + } + } + } + } + } + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map10(%arg7)[%0] { + %3 = affine.load %arg5[%arg8] : memref + %4 = divf %3, %arg2 : f64 + affine.store %4, %arg5[%arg8] : memref + } + } + affine.if #set2()[%1] { + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = 0 to #map8()[%1] { + affine.for %arg9 = #map1(%arg8) to min #map10(%arg8)[%1] { + affine.for %arg10 = #map1(%arg7) to min #map10(%arg7)[%0] { + %3 = affine.load %arg6[%arg10] : memref + %4 = affine.load %arg3[%arg9, %arg10] : memref + %5 = affine.load %arg5[%arg10] : memref + %6 = subf %4, %5 : f64 + %7 = mulf %6, %6 : f64 + %8 = addf %3, %7 : f64 + affine.store %8, %arg6[%arg10] : memref + } + } + } + } + } + affine.for %arg7 = 0 to #map8()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map10(%arg7)[%0] { + %3 = affine.load %arg6[%arg8] : memref + %4 = divf %3, %arg2 : f64 + %5 = math.sqrt %4 : f64 + %6 = cmpf ule, %5, %cst_0 : f64 + %7 = select %6, %cst_1, %5 : f64 + affine.store %7, %arg6[%arg8] : memref + } + } + affine.if #set2()[%0] { + affine.for %arg7 = 0 to #map8()[%1] { + affine.for %arg8 = 0 to #map8()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map10(%arg7)[%1] { + affine.for %arg10 = #map1(%arg8) to min #map10(%arg8)[%0] { + %3 = affine.load %arg3[%arg9, %arg10] : memref + %4 = affine.load %arg5[%arg10] : memref + %5 = subf %3, %4 : f64 + %6 = math.sqrt %arg2 : f64 + %7 = affine.load %arg6[%arg10] : memref + %8 = mulf %6, %7 : f64 + %9 = divf %5, %8 : f64 + affine.store %9, %arg3[%arg9, %arg10] : memref + } + } + } + } + } + affine.if #set2()[%1] { + affine.for %arg7 = 0 to #map7()[%0] { + affine.for %arg8 = #map0(%arg7) to #map8()[%0] { + affine.for %arg9 = 0 to #map8()[%1] { + affine.for %arg10 = #map1(%arg7) to min #map9(%arg7, %arg8)[%0] { + affine.for %arg11 = #map1(%arg9) to min #map10(%arg9)[%1] { + affine.for %arg12 = max #map3(%arg8, %arg10) to min #map10(%arg8)[%0] { + %3 = affine.load %arg4[%arg10, %arg12] : memref + %4 = affine.load %arg3[%arg11, %arg10] : memref + %5 = affine.load %arg3[%arg11, %arg12] : memref + %6 = mulf %4, %5 : f64 + %7 = addf %3, %6 : f64 + affine.store %7, %arg4[%arg10, %arg12] : memref + } + } + } + } + } + } + } + affine.for %arg7 = 0 to #map7()[%0] { + affine.for %arg8 = #map0(%arg7) to #map8()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map9(%arg7, %arg8)[%0] { + affine.for %arg10 = max #map3(%arg8, %arg9) to min #map10(%arg8)[%0] { + %3 = affine.load %arg4[%arg9, %arg10] : memref + affine.store %3, %arg4[%arg10, %arg9] : memref + } + } + } + } return } func private @print_array(%arg0: i32, %arg1: memref) { diff --git a/example/polybench/split-and-merge/correlation/correlation.origin.c b/example/polybench/split-and-merge/correlation/correlation.origin.c deleted file mode 100644 index 61d1d842..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.origin.c +++ /dev/null @@ -1,144 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* correlation.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "correlation.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)N; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = (DATA_TYPE)(i * j) / M + i; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(corr, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("corr"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, corr[i][j]); - } - POLYBENCH_DUMP_END("corr"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_correlation(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(corr, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(stddev, M, m)) { - int i, j, k; - - DATA_TYPE eps = SCALAR_VAL(0.1); - -#pragma scop - for (j = 0; j < _PB_M; j++) { - mean[j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_N; i++) - mean[j] += data[i][j]; - mean[j] /= float_n; - } - - for (j = 0; j < _PB_M; j++) { - stddev[j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_N; i++) - stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]); - stddev[j] /= float_n; - stddev[j] = SQRT_FUN(stddev[j]); - /* The following in an inelegant but usual way to handle - near-zero std. dev. values, which below would cause a zero- - divide. */ - stddev[j] = stddev[j] <= eps ? SCALAR_VAL(1.0) : stddev[j]; - } - - /* Center and reduce the column vectors. */ - for (i = 0; i < _PB_N; i++) - for (j = 0; j < _PB_M; j++) { - data[i][j] -= mean[j]; - data[i][j] /= SQRT_FUN(float_n) * stddev[j]; - } - - /* Calculate the m * m correlation matrix. */ - for (i = 0; i < _PB_M - 1; i++) { - corr[i][i] = SCALAR_VAL(1.0); - for (j = i + 1; j < _PB_M; j++) { - corr[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_N; k++) - corr[i][j] += (data[k][i] * data[k][j]); - corr[j][i] = corr[i][j]; - } - } - corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0); -#pragma endscop -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(corr, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(stddev, DATA_TYPE, M, m); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_correlation(m, n, float_n, POLYBENCH_ARRAY(data), - POLYBENCH_ARRAY(corr), POLYBENCH_ARRAY(mean), - POLYBENCH_ARRAY(stddev)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(corr))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(corr); - POLYBENCH_FREE_ARRAY(mean); - POLYBENCH_FREE_ARRAY(stddev); - - return 0; -} diff --git a/example/polybench/split-and-merge/correlation/correlation.origin.mlir b/example/polybench/split-and-merge/correlation/correlation.origin.mlir deleted file mode 100644 index 652ca604..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.origin.mlir +++ /dev/null @@ -1,233 +0,0 @@ -#map0 = affine_map<()[s0] -> (s0 - 1)> -#map1 = affine_map<(d0) -> (d0 + 1)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("corr\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = memref.cast %0 : memref<1xf64> to memref - %6 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %5, %6) : (i32, i32, memref, memref) -> () - call @polybench_timer_start() : () -> () - %7 = affine.load %0[0] : memref<1xf64> - %8 = memref.cast %2 : memref<2600x2600xf64> to memref - %9 = memref.cast %3 : memref<2600xf64> to memref - %10 = memref.cast %4 : memref<2600xf64> to memref - call @kernel_correlation(%c2600_i32, %c3000_i32, %7, %6, %8, %9, %10) : (i32, i32, f64, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %11 = cmpi sgt, %arg0, %c42_i32 : i32 - %12 = scf.if %11 -> (i1) { - %13 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %14 = llvm.load %13 : !llvm.ptr> - %15 = llvm.mlir.addressof @str0 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.call @strcmp(%14, %16) : (!llvm.ptr, !llvm.ptr) -> i32 - %18 = trunci %17 : i32 to i1 - %19 = xor %18, %true : i1 - scf.yield %19 : i1 - } else { - scf.yield %false : i1 - } - scf.if %12 { - call @print_array(%c2600_i32, %8) : (i32, memref) -> () - } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> - memref.dealloc %4 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { - %c3000_i32 = constant 3000 : i32 - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %0 = sitofp %c3000_i32 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %2 = cmpi slt, %arg4, %c3000_i32 : i32 - scf.condition(%2) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %2 = index_cast %arg4 : i32 to index - %3 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %5 = cmpi slt, %arg5, %c2600_i32 : i32 - scf.condition(%5) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %5 = index_cast %arg5 : i32 to index - %6 = muli %arg4, %arg5 : i32 - %7 = sitofp %6 : i32 to f64 - %8 = sitofp %c2600_i32 : i32 to f64 - %9 = divf %7, %8 : f64 - %10 = sitofp %arg4 : i32 to f64 - %11 = addf %9, %10 : f64 - memref.store %11, %arg3[%2, %5] : memref - %12 = addi %arg5, %c1_i32 : i32 - scf.yield %12 : i32 - } - %4 = addi %arg4, %c1_i32 : i32 - scf.yield %4 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 0.000000e+00 : f64 - %c1 = constant 1 : index - %cst_1 = constant 1.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg7 = 0 to %1 { - affine.store %cst_0, %arg5[%arg7] : memref - affine.for %arg8 = 0 to %0 { - %5 = affine.load %arg3[%arg8, %arg7] : memref - %6 = affine.load %arg5[%arg7] : memref - %7 = addf %6, %5 : f64 - affine.store %7, %arg5[%arg7] : memref - } - %3 = affine.load %arg5[%arg7] : memref - %4 = divf %3, %arg2 : f64 - affine.store %4, %arg5[%arg7] : memref - } - affine.for %arg7 = 0 to %1 { - affine.store %cst_0, %arg6[%arg7] : memref - affine.for %arg8 = 0 to %0 { - %8 = affine.load %arg3[%arg8, %arg7] : memref - %9 = affine.load %arg5[%arg7] : memref - %10 = subf %8, %9 : f64 - %11 = mulf %10, %10 : f64 - %12 = affine.load %arg6[%arg7] : memref - %13 = addf %12, %11 : f64 - affine.store %13, %arg6[%arg7] : memref - } - %3 = affine.load %arg6[%arg7] : memref - %4 = divf %3, %arg2 : f64 - %5 = math.sqrt %4 : f64 - %6 = cmpf ule, %5, %cst : f64 - %7 = select %6, %cst_1, %5 : f64 - affine.store %7, %arg6[%arg7] : memref - } - affine.for %arg7 = 0 to %0 { - affine.for %arg8 = 0 to %1 { - %3 = affine.load %arg5[%arg8] : memref - %4 = affine.load %arg3[%arg7, %arg8] : memref - %5 = subf %4, %3 : f64 - %6 = math.sqrt %arg2 : f64 - %7 = affine.load %arg6[%arg8] : memref - %8 = mulf %6, %7 : f64 - %9 = divf %5, %8 : f64 - affine.store %9, %arg3[%arg7, %arg8] : memref - } - } - affine.for %arg7 = 0 to #map0()[%1] { - affine.store %cst_1, %arg4[%arg7, %arg7] : memref - affine.for %arg8 = #map1(%arg7) to %1 { - affine.store %cst_0, %arg4[%arg7, %arg8] : memref - affine.for %arg9 = 0 to %0 { - %4 = affine.load %arg3[%arg9, %arg7] : memref - %5 = affine.load %arg3[%arg9, %arg8] : memref - %6 = mulf %4, %5 : f64 - %7 = affine.load %arg4[%arg7, %arg8] : memref - %8 = addf %7, %6 : f64 - affine.store %8, %arg4[%arg7, %arg8] : memref - } - %3 = affine.load %arg4[%arg7, %arg8] : memref - affine.store %3, %arg4[%arg8, %arg7] : memref - } - } - %2 = subi %1, %c1 : index - memref.store %cst_1, %arg4[%2, %2] : memref - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} diff --git a/example/polybench/split-and-merge/correlation/correlation.origin.pluto.c b/example/polybench/split-and-merge/correlation/correlation.origin.pluto.c deleted file mode 100644 index 2ce7f4b4..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.origin.pluto.c +++ /dev/null @@ -1,204 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* correlation.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "correlation.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)N; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = (DATA_TYPE)(i * j) / M + i; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(corr, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("corr"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, corr[i][j]); - } - POLYBENCH_DUMP_END("corr"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_correlation(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(corr, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(stddev, M, m)) { - int i, j, k; - - DATA_TYPE eps = SCALAR_VAL(0.1); - - int t1, t2, t3, t4, t5, t6, t7, t8; - register int lbv, ubv; -corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0);; -for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_M-2,32*t2+31),32*t3+30);t4++) { - for (t5=max(32*t3,t4+1);t5<=min(_PB_M-1,32*t3+31);t5++) { - corr[t4][t5] = SCALAR_VAL(0.0);; - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-2,32*t2+31);t3++) { - corr[t3][t3] = SCALAR_VAL(1.0);; - stddev[t3] = SCALAR_VAL(0.0);; - mean[t3] = SCALAR_VAL(0.0);; - } - if (t2 >= ceild(_PB_M-32,32)) { - stddev[(_PB_M-1)] = SCALAR_VAL(0.0);; - mean[(_PB_M-1)] = SCALAR_VAL(0.0);; - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - mean[t5] += data[t4][t5];; - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] /= float_n;; - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - stddev[t5] += (data[t4][t5] - mean[t5]) * (data[t4][t5] - mean[t5]);; - data[t4][t5] -= mean[t5];; - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - stddev[t3] /= float_n;; - stddev[t3] = SQRT_FUN(stddev[t3]);; - stddev[t3] = stddev[t3] <= eps ? SCALAR_VAL(1.0) : stddev[t3];; - } -} -if (_PB_M >= 1) { - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - data[t4][t5] /= SQRT_FUN(float_n) * stddev[t5];; - } - } - } - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=0;t4<=floord(_PB_N-1,32);t4++) { - for (t5=32*t2;t5<=min(min(_PB_M-2,32*t2+31),32*t3+30);t5++) { - for (t6=32*t4;t6<=min(_PB_N-1,32*t4+31);t6++) { - for (t7=max(32*t3,t5+1);t7<=min(_PB_M-1,32*t3+31);t7++) { - corr[t5][t7] += (data[t6][t5] * data[t6][t7]);; - } - } - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_M-2,32*t2+31),32*t3+30);t4++) { - for (t5=max(32*t3,t4+1);t5<=min(_PB_M-1,32*t3+31);t5++) { - corr[t5][t4] = corr[t4][t5];; - } - } - } -} -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(corr, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(stddev, DATA_TYPE, M, m); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_correlation(m, n, float_n, POLYBENCH_ARRAY(data), - POLYBENCH_ARRAY(corr), POLYBENCH_ARRAY(mean), - POLYBENCH_ARRAY(stddev)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(corr))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(corr); - POLYBENCH_FREE_ARRAY(mean); - POLYBENCH_FREE_ARRAY(stddev); - - return 0; -} diff --git a/example/polybench/split-and-merge/correlation/correlation.origin.pluto.cloog b/example/polybench/split-and-merge/correlation/correlation.origin.pluto.cloog deleted file mode 100644 index dd8602f6..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.origin.pluto.cloog +++ /dev/null @@ -1,376 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_M _PB_N - -# Number of statements -15 - -# S1 (mean[j] = SCALAR_VAL(0.0);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S2 (mean[j] += data[i][j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S3 (mean[j] /= float_n;) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S4 (stddev[j] = SCALAR_VAL(0.0);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S5 (stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]);) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S6 (stddev[j] /= float_n;) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S7 (stddev[j] = SQRT_FUN(stddev[j]);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S8 (stddev[j] = stddev[j] <= eps ? SCALAR_VAL(1.0) : stddev[j];) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S9 (data[i][j] -= mean[j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 1 0 -1 -1 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 0 1 0 0 0 -1 32 0 0 -1 0 0 31 -1 0 -32 1 0 0 0 0 -1 0 32 -1 0 0 0 31 -0 0 0 - -# S10 (data[i][j] /= SQRT_FUN(float_n) * stddev[j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 1 0 -1 -1 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S11 (corr[i][i] = SCALAR_VAL(1.0);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -2 -1 0 0 1 0 -2 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S12 (corr[i][j] = SCALAR_VAL(0.0);) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -2 -1 0 0 0 0 1 0 -2 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S13 (corr[i][j] += (data[k][i] * data[k][j]);) -14 10 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 -2 -1 0 0 0 0 0 0 1 0 -2 -1 0 0 0 -1 1 0 0 0 -1 -1 0 0 0 0 -1 0 1 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 -1 0 32 0 0 -1 0 0 0 31 -1 0 0 -32 0 0 1 0 0 0 -1 0 0 32 0 0 -1 0 0 31 -0 0 0 - -# S14 (corr[j][i] = corr[i][j];) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -2 -1 0 0 0 0 1 0 -2 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S15 (corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0);) -3 4 -0 0 0 0 -0 0 0 0 -0 0 0 0 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -15 - -# T(S1) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -14 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S2) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -13 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S3) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -12 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S4) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -11 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S5) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -9 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S6) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -6 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S7) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -7 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S8) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -8 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S9) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -10 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S10) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -7 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -5 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S11) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -4 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S12) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -3 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S13) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 - -# T(S14) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -9 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S15) -8 12 -0 1 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 - -# we will set the scattering dimension names -8 -t1 t2 t3 t4 t5 t6 t7 t8 diff --git a/example/polybench/split-and-merge/correlation/correlation.origin.pluto.log b/example/polybench/split-and-merge/correlation/correlation.origin.pluto.log deleted file mode 100644 index 09299bf5..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.origin.pluto.log +++ /dev/null @@ -1,5054 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_M _PB_N - - -# Number of statements -15 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -mean[j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| j i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## j >= 0 - 1 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -WRITE -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -j i -# Statement body expression -mean[j] += data[i][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 3.3 Access -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -READ -1 6 1 1 0 2 -# e/i| Arr| j |_PB. _PB.| 1 - 0 -1 0 0 0 8 ## Arr == float_n - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -mean[j] /= float_n; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -stddev[j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 5 -# Number of relations describing the statement: -8 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| j i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## j >= 0 - 1 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 0 ## [1] == j - -WRITE -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 0 ## [1] == j - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == j - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == j - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -j i -# Statement body expression -stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 6.3 Access -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -READ -1 6 1 1 0 2 -# e/i| Arr| j |_PB. _PB.| 1 - 0 -1 0 0 0 8 ## Arr == float_n - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -stddev[j] /= float_n; - - -# =============================================== Statement 7 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 3 ## c3 == 3 - -# ---------------------------------------------- 7.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -stddev[j] = SQRT_FUN(stddev[j]); - - -# =============================================== Statement 8 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 8.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 8.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 4 ## c3 == 4 - -# ---------------------------------------------- 8.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -READ -1 6 1 1 0 2 -# e/i| Arr| j |_PB. _PB.| 1 - 0 -1 0 0 0 11 ## Arr == eps - -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 8.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -stddev[j] = stddev[j] <= eps ? SCALAR_VAL(1.0) : stddev[j]; - - -# =============================================== Statement 9 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 9.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 9.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 9.3 Access -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 0 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 9.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -data[i][j] -= mean[j]; - - -# =============================================== Statement 10 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 10.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 10.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 1 ## c5 == 1 - -# ---------------------------------------------- 10.3 Access -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -1 7 1 2 0 2 -# e/i| Arr| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 8 ## Arr == float_n - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 9 ## Arr == stddev - 0 0 -1 0 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 10.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -data[i][j] /= SQRT_FUN(float_n) * stddev[j]; - - -# =============================================== Statement 11 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 11.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| i |_PB. _PB.| 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 1 0 -2 ## _PB_M-2 >= 0 - -# ---------------------------------------------- 11.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 1 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 11.3 Access -WRITE -3 8 3 1 0 2 -# e/i| Arr [1] [2]| i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 ## [2] == i - -# ---------------------------------------------- 11.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -i -# Statement body expression -corr[i][i] = SCALAR_VAL(1.0); - - -# =============================================== Statement 12 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 12.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 0 1 0 -2 ## _PB_M-2 >= 0 - 1 -1 1 0 0 -1 ## -i+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 12.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 12.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 12.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -corr[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 13 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 13.1 Domain -DOMAIN -8 7 3 0 0 2 -# e/i| i j k |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 0 0 1 0 -2 ## _PB_M-2 >= 0 - 1 -1 1 0 0 0 -1 ## -i+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 13.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 13.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 0 ## [2] == i - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 0 1 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 13.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -corr[i][j] += (data[k][i] * data[k][j]); - - -# =============================================== Statement 14 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 14.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 0 1 0 -2 ## _PB_M-2 >= 0 - 1 -1 1 0 0 -1 ## -i+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 14.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 2 ## c5 == 2 - -# ---------------------------------------------- 14.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 0 1 0 0 0 ## [1] == j - 0 0 0 -1 1 0 0 0 0 ## [2] == i - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 14.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -corr[j][i] = corr[i][j]; - - -# =============================================== Statement 15 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 15.1 Domain -DOMAIN -0 4 0 0 0 2 - -# ---------------------------------------------- 15.2 Scattering -SCATTERING -1 5 1 0 0 2 -# e/i| c1 |_PB. _PB.| 1 - 0 -1 0 0 4 ## c1 == 4 - -# ---------------------------------------------- 15.3 Access -WRITE -3 7 3 0 0 2 -# e/i| Arr [1] [2]|_PB. _PB.| 1 - 0 -1 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 -1 ## [1] == _PB_M-1 - 0 0 0 -1 1 0 -1 ## [2] == _PB_M-1 - -# ---------------------------------------------- 15.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -0 -# Statement body expression -corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0); - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -13 -# Mapping array-identifiers/array-names -1 j -2 _PB_M -3 mean -4 SCALAR_VAL -5 i -6 _PB_N -7 data -8 float_n -9 stddev -10 SQRT_FUN -11 eps -12 corr -13 k - - - -# File name -(null) -# Starting line and column -66 0 -# Ending line and column -103 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_M _PB_N -S1 "mean[j] = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S1): (0, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -mean[j] -Original loop: 0 -> yes - -S2 "mean[j] += data[i][j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -mean[j] -data[i][j] -Write accesses -mean[j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "mean[j] /= float_n;" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S3): (0, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -mean[j] -float_n[0] -Write accesses -mean[j] -Original loop: 0 -> yes - -S4 "stddev[j] = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S4): (1, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -stddev[j] -Original loop: 0 -> yes - -S5 "stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S5): (1, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -stddev[j] -data[i][j] -mean[j] -data[i][j] -mean[j] -Write accesses -stddev[j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "stddev[j] /= float_n;" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S6): (1, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -stddev[j] -float_n[0] -Write accesses -stddev[j] -Original loop: 0 -> yes - -S7 "stddev[j] = SQRT_FUN(stddev[j]);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S7): (1, j, 3, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -stddev[j] -Write accesses -stddev[j] -Original loop: 0 -> yes - -S8 "stddev[j] = stddev[j] <= eps ? SCALAR_VAL(1.0) : stddev[j];" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S8): (1, j, 4, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -stddev[j] -eps[0] -stddev[j] -Write accesses -stddev[j] -Original loop: 0 -> yes - -S9 "data[i][j] -= mean[j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S9): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -data[i][j] -mean[j] -Write accesses -data[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S10 "data[i][j] /= SQRT_FUN(float_n) * stddev[j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S10): (2, i, 0, j, 1, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -data[i][j] -float_n[0] -stddev[j] -Write accesses -data[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S11 "corr[i][i] = SCALAR_VAL(1.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 - -T(S11): (3, i, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -corr[i][i] -Original loop: 0 -> yes - -S12 "corr[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 - -T(S12): (3, i, 1, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -corr[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S13 "corr[i][j] += (data[k][i] * data[k][j]);" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 8 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S13): (3, i, 1, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -corr[i][j] -data[k][i] -data[k][j] -Write accesses -corr[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S14 "corr[j][i] = corr[i][j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 - -T(S14): (3, i, 1, j, 2, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -corr[i][j] -Write accesses -corr[j][i] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S15 "corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0);" -ndims: 0; orig_depth: 0 -Index set -Set #1 -Universal polyhedron -- No constraints (2 dims)! -T(S15): (4, 0, 0, 0, 0, 0, 0) -loop types (loop, scalar, scalar, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -corr[_PB_M-1][_PB_M-1] - ---- Dep 1 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 2 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 3 from S4 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 4 from S1 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 5 from S10 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 6 from S1 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 7 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 8 from S9 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 --j+_PB_M-1 >= 0 -i' >= 0 -j-i'-1 >= 0 - - ---- Dep 9 from S2 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 10 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 11 from S2 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 12 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 13 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 14 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 15 from S5 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 16 from S12 to S14; satisfied: 0, sat level: -1; Type: RAW -on variable: corr -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 17 from S4 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 18 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 19 from S4 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 20 from S9 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 21 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 22 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 23 from S7 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 24 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 25 from S1 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 26 from S13 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: corr -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 27 from S5 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 28 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 29 from S8 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 30 from S12 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: corr -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 31 from S6 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 32 from S6 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 33 from S10 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 --j+_PB_M-1 >= 0 -i' >= 0 -j-i'-1 >= 0 - - ---- Dep 34 from S9 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 35 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 36 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 37 from S4 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 38 from S6 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 39 from S2 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 40 from S3 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 41 from S13 to S14; satisfied: 0, sat level: -1; Type: RAW -on variable: corr -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 42 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 43 from S5 to S10; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 44 from S2 to S9; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 45 from S9 to S10; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 46 from S6 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 47 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 48 from S5 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 49 from S5 to S9; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 50 from S5 to S10; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 51 from S5 to S9; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 52 from S5 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 53 from S5 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 54 from S2 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 55 from S2 to S10; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 56 from S13 to S13; satisfied: 0, sat level: -1; Type: WAR -on variable: corr -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 57 from S7 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 58 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 59 from S5 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 60 from S5 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 61 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 62 from S9 to S10; satisfied: 0, sat level: -1; Type: WAW -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 63 from S5 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 64 from S6 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 65 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 66 from S4 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 67 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 68 from S4 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 69 from S5 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 70 from S2 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 71 from S4 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 72 from S6 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 73 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 74 from S13 to S13; satisfied: 0, sat level: -1; Type: WAW -on variable: corr -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 75 from S12 to S13; satisfied: 0, sat level: -1; Type: WAW -on variable: corr -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 76 from S4 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 77 from S7 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - -T(S1): (0, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (1, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (1, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S7): (1, j, 3, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S8): (1, j, 4, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S9): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S10): (2, i, 0, j, 1, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S11): (3, i, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S12): (3, i, 1, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S13): (3, i, 1, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S14): (3, i, 1, j, 2, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S15): (4, 0, 0, 0, 0, 0, 0) -loop types (loop, scalar, scalar, scalar, scalar, scalar, scalar) - -[pluto] Number of statements: 15 -[pluto] Total number of loops: 22 -[pluto] Number of deps: 77 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 14 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 11 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 10 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 8: Stmt ids: 8 -[pluto] dfs_for_scc: SCC 9: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 10: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 11: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 12: Stmt ids: 9 -[pluto] dfs_for_scc: SCC 13: Stmt ids: 12 -[pluto] dfs_for_scc: SCC 14: Stmt ids: 13 - - - SCC 0: size: 1: max stmt dim: 0 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 1 - SCC 3: size: 1: max stmt dim: 1 - SCC 4: size: 1: max stmt dim: 1 - SCC 5: size: 1: max stmt dim: 2 - SCC 6: size: 1: max stmt dim: 1 - SCC 7: size: 1: max stmt dim: 2 - SCC 8: size: 1: max stmt dim: 2 - SCC 9: size: 1: max stmt dim: 1 - SCC 10: size: 1: max stmt dim: 1 - SCC 11: size: 1: max stmt dim: 1 - SCC 12: size: 1: max stmt dim: 2 - SCC 13: size: 1: max stmt dim: 3 - SCC 14: size: 1: max stmt dim: 2 -[pluto] parameter context from domains -Set #1 -[2 dims; 3 constraints] -c_j-1 >= 0 -c_i-2 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied - 55 dep(s) satisfied -h(S1) = 2, h(S2) = 3, h(S3) = 4, h(S4) = 2, h(S5) = 5, h(S6) = 6, h(S7) = 6, h(S8) = 6, h(S9) = 5, h(S10) = 7, h(S11) = 2, h(S12) = 1, h(S13) = 8, h(S14) = 9, h(S15) = 0 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 1; num_constraints: 15 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 2; num_constraints: 15 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 3; num_constraints: 15 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 4; num_constraints: 15 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 5; num_constraints: 12 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 6; num_constraints: 15 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 7; num_constraints: 15 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 8; num_constraints: 12 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 9; num_constraints: 17 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 10; num_constraints: 15 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 11; num_constraints: 17 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 12; num_constraints: 15 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 13; num_constraints: 9 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 14; num_constraints: 15 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 15; num_constraints: 17 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 10 constraints - For dep 16; num_constraints: 12 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 17; num_constraints: 15 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 18; num_constraints: 15 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 19; num_constraints: 15 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 20; num_constraints: 12 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 21; num_constraints: 15 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 22; num_constraints: 15 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 23; num_constraints: 15 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 24; num_constraints: 15 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 25; num_constraints: 15 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 26; num_constraints: 5 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 27; num_constraints: 9 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 28; num_constraints: 15 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 29; num_constraints: 15 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 30; num_constraints: 12 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 31; num_constraints: 15 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 32; num_constraints: 15 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 33; num_constraints: 12 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 34; num_constraints: 13 -[pluto] compute permutability constraints: Dep 35 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 35; num_constraints: 15 -[pluto] compute permutability constraints: Dep 36 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 36; num_constraints: 15 -[pluto] compute permutability constraints: Dep 37 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 37; num_constraints: 15 -[pluto] compute permutability constraints: Dep 38 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 38; num_constraints: 15 -[pluto] compute permutability constraints: Dep 39 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 39; num_constraints: 17 -[pluto] compute permutability constraints: Dep 40 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 40; num_constraints: 15 -[pluto] compute permutability constraints: Dep 41 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 41; num_constraints: 12 -[pluto] compute permutability constraints: Dep 42 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 42; num_constraints: 15 -[pluto] compute permutability constraints: Dep 43 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 43; num_constraints: 13 -[pluto] compute permutability constraints: Dep 44 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 44; num_constraints: 13 -[pluto] compute permutability constraints: Dep 45 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 45; num_constraints: 13 -[pluto] compute permutability constraints: Dep 46 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 46; num_constraints: 15 -[pluto] compute permutability constraints: Dep 47 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 47; num_constraints: 15 -[pluto] compute permutability constraints: Dep 48 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 48; num_constraints: 9 -[pluto] compute permutability constraints: Dep 49 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 49; num_constraints: 13 -[pluto] compute permutability constraints: Dep 50 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 50; num_constraints: 13 -[pluto] compute permutability constraints: Dep 51 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 51; num_constraints: 13 -[pluto] compute permutability constraints: Dep 52 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 52; num_constraints: 15 -[pluto] compute permutability constraints: Dep 53 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 53; num_constraints: 15 -[pluto] compute permutability constraints: Dep 54 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 54; num_constraints: 15 -[pluto] compute permutability constraints: Dep 55 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 55; num_constraints: 13 -[pluto] compute permutability constraints: Dep 56 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 56; num_constraints: 5 -[pluto] compute permutability constraints: Dep 57 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 57; num_constraints: 15 -[pluto] compute permutability constraints: Dep 58 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 58; num_constraints: 9 -[pluto] compute permutability constraints: Dep 59 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 59; num_constraints: 15 -[pluto] compute permutability constraints: Dep 60 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 60; num_constraints: 15 -[pluto] compute permutability constraints: Dep 61 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 61; num_constraints: 15 -[pluto] compute permutability constraints: Dep 62 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 62; num_constraints: 13 -[pluto] compute permutability constraints: Dep 63 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 63; num_constraints: 15 -[pluto] compute permutability constraints: Dep 64 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 64; num_constraints: 15 -[pluto] compute permutability constraints: Dep 65 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 65; num_constraints: 9 -[pluto] compute permutability constraints: Dep 66 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 66; num_constraints: 15 -[pluto] compute permutability constraints: Dep 67 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 67; num_constraints: 9 -[pluto] compute permutability constraints: Dep 68 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 68; num_constraints: 15 -[pluto] compute permutability constraints: Dep 69 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 69; num_constraints: 15 -[pluto] compute permutability constraints: Dep 70 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 70; num_constraints: 15 -[pluto] compute permutability constraints: Dep 71 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 71; num_constraints: 15 -[pluto] compute permutability constraints: Dep 72 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 72; num_constraints: 15 -[pluto] compute permutability constraints: Dep 73 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 73; num_constraints: 15 -[pluto] compute permutability constraints: Dep 74 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 74; num_constraints: 5 -[pluto] compute permutability constraints: Dep 75 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 75; num_constraints: 12 -[pluto] compute permutability constraints: Dep 76 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 76; num_constraints: 15 -[pluto] compute permutability constraints: Dep 77 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 77; num_constraints: 15 - After dep 7; num_constraints: 15 - After dep 13; num_constraints: 24 - After dep 14; num_constraints: 39 - After dep 22; num_constraints: 54 - After dep 26; num_constraints: 59 - After dep 27; num_constraints: 68 - After dep 32; num_constraints: 83 - After dep 38; num_constraints: 98 - After dep 46; num_constraints: 113 - After dep 47; num_constraints: 128 - After dep 48; num_constraints: 137 - After dep 49; num_constraints: 150 - After dep 51; num_constraints: 163 - After dep 56; num_constraints: 168 - After dep 57; num_constraints: 183 - After dep 58; num_constraints: 192 - After dep 64; num_constraints: 207 - After dep 65; num_constraints: 216 - After dep 67; num_constraints: 225 - After dep 72; num_constraints: 240 - After dep 74; num_constraints: 245 - After dep 77; num_constraints: 260 - After all dependences: num constraints: 33, num variables: 63 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 14 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_l >= 0 - -Set #1 -[63 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[63 dims; 1 constraints] -c_p >= 0 - -Set #1 -[63 dims; 1 constraints] -c_q >= 0 - -Set #1 -[63 dims; 1 constraints] -c_p+c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_t >= 0 - -Set #1 -[63 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_x >= 0 - -Set #1 -[63 dims; 1 constraints] -c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[63 dims; 1 constraints] -c_| >= 0 - -Set #1 -[63 dims; 1 constraints] -c_} >= 0 - -Set #1 -[63 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_„-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_ˆ-1 >= 0 - -[pluto] get_stmt_ortho constraints S9 -Ortho constraints for S9; 2 disjuncts -Set #1 -[63 dims; 1 constraints] -c_Œ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_Œ+c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S10 -Ortho constraints for S10; 2 disjuncts -Set #1 -[63 dims; 1 constraints] -c_ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_‘ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_+c_‘-1 >= 0 - -[pluto] get_stmt_ortho constraints S11 -Ortho constraints for S11; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_” >= 0 - -Set #1 -[63 dims; 1 constraints] -c_”-1 >= 0 - -[pluto] get_stmt_ortho constraints S12 -Ortho constraints for S12; 2 disjuncts -Set #1 -[63 dims; 1 constraints] -c_˜ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_™ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_˜+c_™-1 >= 0 - -[pluto] get_stmt_ortho constraints S13 -Ortho constraints for S13; 3 disjuncts -Set #1 -[63 dims; 1 constraints] -c_œ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_ž >= 0 - -Set #1 -[63 dims; 1 constraints] -c_œ+c_+c_ž-1 >= 0 - -[pluto] get_stmt_ortho constraints S14 -Ortho constraints for S14; 2 disjuncts -Set #1 -[63 dims; 1 constraints] -c_  >= 0 - -Set #1 -[63 dims; 1 constraints] -c_¡ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_ +c_¡-1 >= 0 - -[pluto] get_stmt_ortho constraints S15 -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -Added ortho constraints for S9 -Added ortho constraints for S10 -Added ortho constraints for S11 -Added ortho constraints for S12 -Added ortho constraints for S13 -Added ortho constraints for S14 -linear independence constraints -[63 dims; 14 constraints] - +c_l -1 >= 0 - +c_p +c_q -1 >= 0 - +c_t -1 >= 0 - +c_x -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ -1 >= 0 - +c_„ -1 >= 0 - +c_ˆ -1 >= 0 - +c_Œ +c_ -1 >= 0 - +c_ +c_‘ -1 >= 0 - +c_” -1 >= 0 - +c_˜ +c_™ -1 >= 0 - +c_œ +c_ +c_ž -1 >= 0 - +c_  +c_¡ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (63 variables, 124 constraints) -[pluto] pluto_constraints_lexmin_isl (40 variables, 124 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = j, h(S5) = j, h(S6) = j, h(S7) = j, h(S8) = j, h(S9) = j, h(S10) = i, h(S11) = i, h(S12) = i, h(S13) = i, h(S14) = i, h(S15) = 0 -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 5 -non-zero cst: skipping stmt 6 -non-zero cst: skipping stmt 7 -non-zero cst: skipping stmt 10 -non-zero cst: skipping stmt 14 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_q >= 0 - -Set #1 -[63 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_} >= 0 - -Set #1 -[63 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -[pluto] get_stmt_ortho constraints S8 -[pluto] get_stmt_ortho constraints S9 -Ortho constraints for S9; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_Œ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_Œ-1 >= 0 - -[pluto] get_stmt_ortho constraints S10 -Ortho constraints for S10; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_‘ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_‘-1 >= 0 - -[pluto] get_stmt_ortho constraints S11 -[pluto] get_stmt_ortho constraints S12 -Ortho constraints for S12; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_™ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_™-1 >= 0 - -[pluto] get_stmt_ortho constraints S13 -Ortho constraints for S13; 2 disjuncts -Set #1 -[63 dims; 1 constraints] -c_ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_ž >= 0 - -Set #1 -[63 dims; 1 constraints] -c_+c_ž-1 >= 0 - -[pluto] get_stmt_ortho constraints S14 -Ortho constraints for S14; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_¡ >= 0 - -Set #1 -[63 dims; 1 constraints] -c_¡-1 >= 0 - -[pluto] get_stmt_ortho constraints S15 -Added ortho constraints for S2 -Added ortho constraints for S5 -Added ortho constraints for S9 -Added ortho constraints for S10 -Added ortho constraints for S12 -Added ortho constraints for S13 -Added ortho constraints for S14 -linear independence constraints -[63 dims; 7 constraints] - +c_q -1 >= 0 - +c_} -1 >= 0 - +c_Œ -1 >= 0 - +c_‘ -1 >= 0 - +c_™ -1 >= 0 - +c_ +c_ž -1 >= 0 - +c_¡ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (63 variables, 110 constraints) -[pluto] pluto_constraints_lexmin_isl (40 variables, 110 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = 0, h(S4) = 0, h(S5) = i, h(S6) = 0, h(S7) = 0, h(S8) = 0, h(S9) = i, h(S10) = j, h(S11) = 0, h(S12) = j, h(S13) = j, h(S14) = j, h(S15) = 0 -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 5 -non-zero cst: skipping stmt 6 -non-zero cst: skipping stmt 7 -non-zero cst: skipping stmt 8 -non-zero cst: skipping stmt 9 -non-zero cst: skipping stmt 10 -non-zero cst: skipping stmt 11 -non-zero cst: skipping stmt 13 -non-zero cst: skipping stmt 14 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -[pluto] get_stmt_ortho constraints S8 -[pluto] get_stmt_ortho constraints S9 -[pluto] get_stmt_ortho constraints S10 -[pluto] get_stmt_ortho constraints S11 -[pluto] get_stmt_ortho constraints S12 -[pluto] get_stmt_ortho constraints S13 -Ortho constraints for S13; 1 disjuncts -Set #1 -[63 dims; 1 constraints] -c_ž >= 0 - -Set #1 -[63 dims; 1 constraints] -c_ž-1 >= 0 - -[pluto] get_stmt_ortho constraints S14 -[pluto] get_stmt_ortho constraints S15 -Added ortho constraints for S13 -linear independence constraints -[63 dims; 1 constraints] - +c_ž -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (63 variables, 98 constraints) -[pluto] pluto_constraints_lexmin_isl (40 variables, 98 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = 0, h(S7) = 0, h(S8) = 0, h(S9) = 0, h(S10) = 0, h(S11) = 0, h(S12) = 0, h(S13) = k, h(S14) = 0, h(S15) = 0 -[pluto] pluto_auto_transform: band level 0; 3 hyperplane(s) found -T(S1): (2, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (3, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S3): (4, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (2, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S5): (5, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S6): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S7): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S8): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S9): (5, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S10): (7, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S11): (2, i, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S12): (1, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S13): (8, i, j, k) -loop types (scalar, loop, loop, loop) - -T(S14): (9, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S15): (0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar) - -[pluto] pluto_diamond_tile - After dep 7; num_constraints: 15 - After dep 13; num_constraints: 24 - After dep 14; num_constraints: 39 - After dep 22; num_constraints: 54 - After dep 26; num_constraints: 59 - After dep 27; num_constraints: 68 - After dep 32; num_constraints: 83 - After dep 38; num_constraints: 98 - After dep 46; num_constraints: 113 - After dep 47; num_constraints: 128 - After dep 48; num_constraints: 137 - After dep 49; num_constraints: 150 - After dep 51; num_constraints: 163 - After dep 56; num_constraints: 168 - After dep 57; num_constraints: 183 - After dep 58; num_constraints: 192 - After dep 64; num_constraints: 207 - After dep 65; num_constraints: 216 - After dep 67; num_constraints: 225 - After dep 72; num_constraints: 240 - After dep 74; num_constraints: 245 - After dep 77; num_constraints: 260 - After all dependences: num constraints: 33, num variables: 63 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied - 55 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 1 -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (2, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (3, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S3): (4, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (2, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S5): (5, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S6): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S7): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S8): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S9): (5, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S10): (7, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S11): (2, i, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S12): (1, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S13): (8, i, j, k) -loop types (scalar, loop, loop, loop) - -T(S14): (9, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S15): (0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 14 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 13 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 12 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 11 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 10 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 9 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 8: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 9: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 10: Stmt ids: 8 -[pluto] dfs_for_scc: SCC 11: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 12: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 13: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 14: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 0 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 1 - SCC 5: size: 1: max stmt dim: 2 - SCC 6: size: 1: max stmt dim: 1 - SCC 7: size: 1: max stmt dim: 1 - SCC 8: size: 1: max stmt dim: 1 - SCC 9: size: 1: max stmt dim: 2 - SCC 10: size: 1: max stmt dim: 2 - SCC 11: size: 1: max stmt dim: 1 - SCC 12: size: 1: max stmt dim: 1 - SCC 13: size: 1: max stmt dim: 2 - SCC 14: size: 1: max stmt dim: 1 -[pluto] Cutting between all SCCs -h(S1) = 14, h(S2) = 13, h(S3) = 12, h(S4) = 11, h(S5) = 9, h(S6) = 6, h(S7) = 7, h(S8) = 8, h(S9) = 10, h(S10) = 5, h(S11) = 4, h(S12) = 3, h(S13) = 2, h(S14) = 1, h(S15) = 0 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 49 satisfied -[pluto] dep_satisfaction_update: dep 51 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 72 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied - 13 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied - 55 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 49 satisfied -[pluto] dep_satisfaction_update: dep 51 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 72 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied - 13 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (2, j, 0, 0, 14) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S2): (3, j, i, 0, 13) -loop types (scalar, loop, loop, scalar, scalar) - -T(S3): (4, j, 0, 0, 12) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S4): (2, j, 0, 0, 11) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S5): (5, j, i, 0, 9) -loop types (scalar, loop, loop, scalar, scalar) - -T(S6): (6, j, 0, 0, 6) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S7): (6, j, 0, 0, 7) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S8): (6, j, 0, 0, 8) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S9): (5, j, i, 0, 10) -loop types (scalar, loop, loop, scalar, scalar) - -T(S10): (7, i, j, 0, 5) -loop types (scalar, loop, loop, scalar, scalar) - -T(S11): (2, i, 0, 0, 4) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S12): (1, i, j, 0, 3) -loop types (scalar, loop, loop, scalar, scalar) - -T(S13): (8, i, j, k, 2) -loop types (scalar, loop, loop, loop, scalar) - -T(S14): (9, i, j, 0, 1) -loop types (scalar, loop, loop, scalar, scalar) - -T(S15): (0, 0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar, scalar) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S2, } -(t2, t3, ) with stmts {S5, S9, } -(t2, t3, ) with stmts {S10, } -(t2, t3, ) with stmts {S12, } -(t2, t3, t4, ) with stmts {S13, } -(t2, t3, ) with stmts {S14, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S2, } -(t2, t3, ) with stmts {S5, S9, } -(t2, t3, ) with stmts {S10, } -(t2, t3, ) with stmts {S12, } -(t2, t3, t4, ) with stmts {S13, } -(t2, t3, ) with stmts {S14, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied - 55 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 72 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied - 11 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 49 satisfied -[plutot5 {loop with stmts: S2, } -t4 {loop with stmts: S2, } -t4 {loop with stmts: S2, } -t5 {loop with stmts: S5, S9, } -t4 {loop with stmts: S5, S9, } -t4 {loop with stmts: S5, S9, } -t5 {loop with stmts: S10, } -t4 {loop with stmts: S10, } -t5 {loop with stmts: S12, } -t4 {loop with stmts: S12, } -t7 {loop with stmts: S13, } -t6 {loop with stmts: S13, } -t5 {loop with stmts: S13, } -t6 {loop with stmts: S13, } -t5 {loop with stmts: S14, } -t4 {loop with stmts: S14, } -t3 {loop with stmts: S1, S4, S11, } -t3 {loop with stmts: S3, } -t3 {loop with stmts: S6, S7, S8, } -] dep_satisfaction_update: dep 51 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied - 5 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[Pluto] After tiling: -T(S1): (2, j/32, j, 0, 0, 14, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (3, j/32, i/32, j, i, 0, 13, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S3): (4, j/32, j, 0, 0, 12, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (2, j/32, j, 0, 0, 11, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S5): (5, j/32, i/32, j, i, 0, 9, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S6): (6, j/32, j, 0, 0, 6, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S7): (6, j/32, j, 0, 0, 7, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S8): (6, j/32, j, 0, 0, 8, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S9): (5, j/32, i/32, j, i, 0, 10, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S10): (7, i/32, j/32, i, j, 0, 5, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S11): (2, i/32, i, 0, 0, 4, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S12): (1, i/32, j/32, i, j, 0, 3, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S13): (8, i/32, j/32, k/32, i, j, k, 2) -loop types (scalar, loop, loop, loop, loop, loop, loop, scalar) - -T(S14): (9, i/32, j/32, i, j, 0, 1, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S15): (0, 0, 0, 0, 0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -8 -[pluto-intra-tile-opt] Score for loop 1: 14 -[pluto] intra_tile_opt: loop to be made innermost: Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -88 -[pluto-intra-tile-opt] Score for loop 1: 52 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 18 -[pluto-intra-tile-opt] Score for loop 1: -24 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: -24 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto-intra-tile-opt] Score for loop 2: -26 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -14 -[pluto-intra-tile-opt] Score for loop 1: -14 -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Band 2 to be fused with band 0 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: -36 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: 16 -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Band 2 to be fused with band 0 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: 90 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied - 55 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 72 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied - 14 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 49 satisfied -[pluto] dep_satisfaction_update: dep 51 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (2, j/32, j, 0, 0, 14, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (3, j/32, i/32, i, j, 0, 13, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S3): (4, j/32, j, 0, 0, 12, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (2, j/32, j, 0, 0, 11, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S5): (5, j/32, i/32, i, j, 0, 9, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S6): (6, j/32, j, 0, 0, 6, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S7): (6, j/32, j, 0, 0, 7, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S8): (6, j/32, j, 0, 0, 8, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S9): (5, j/32, i/32, i, j, 0, 10, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S10): (7, i/32, j/32, i, j, 0, 5, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S11): (2, i/32, i, 0, 0, 4, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S12): (1, i/32, j/32, i, j, 0, 3, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S13): (8, i/32, j/32, k/32, i, k, j, 2) -loop types (scalar, loop, loop, loop, loop, loop, loop, scalar) - -T(S14): (9, i/32, j/32, i, j, 0, 1, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S15): (0, 0, 0, 0, 0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(3,8), S2(4,8), S3(3,8), S4(3,8), S5(4,8), S6(3,8), S7(3,8), S8(3,8), S9(4,8), S10(4,8), S11(3,8), S12(4,8), S13(5,8), S14(4,8), S15(1,8), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to correlation.origin.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.006223s -[pluto] Auto-transformation time: 0.160918s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.009410s -[pluto] Code generation time: 0.073638s -[pluto] Other/Misc time: 0.408016s -[pluto] Total time: 0.648795s -[pluto] All times: 0.006223 0.160918 0.073638 0.408016 diff --git a/example/polybench/split-and-merge/correlation/correlation.origin.polymer.parallel.mlir b/example/polybench/split-and-merge/correlation/correlation.origin.polymer.parallel.mlir deleted file mode 100644 index 378aa829..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.origin.polymer.parallel.mlir +++ /dev/null @@ -1,385 +0,0 @@ -#map0 = affine_map<()[s0] -> (s0 - 1)> -#map1 = affine_map<(d0) -> (d0 + 1)> -#map2 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> -#map3 = affine_map<(d0) -> (d0)> -#map4 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map5 = affine_map<(d0) -> (d0 * 32)> -#map6 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> -#map7 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map8 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#map9 = affine_map<(d0)[s0] -> (s0 - 1, d0 * 32 + 32)> -#set0 = affine_set<()[s0, s1] : (s0 - 2 >= 0, s1 - 1 >= 0)> -#set1 = affine_set<(d0)[s0] : (d0 - (s0 - 32) ceildiv 32 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("corr\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = memref.cast %0 : memref<1xf64> to memref - %6 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %5, %6) : (i32, i32, memref, memref) -> () - call @polybench_timer_start() : () -> () - %7 = affine.load %0[0] : memref<1xf64> - %8 = memref.cast %2 : memref<2600x2600xf64> to memref - %9 = memref.cast %3 : memref<2600xf64> to memref - %10 = memref.cast %4 : memref<2600xf64> to memref - call @kernel_correlation_opt(%c2600_i32, %c3000_i32, %7, %6, %8, %9, %10) : (i32, i32, f64, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %11 = cmpi sgt, %arg0, %c42_i32 : i32 - %12 = scf.if %11 -> (i1) { - %13 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %14 = llvm.load %13 : !llvm.ptr> - %15 = llvm.mlir.addressof @str0 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.call @strcmp(%14, %16) : (!llvm.ptr, !llvm.ptr) -> i32 - %18 = trunci %17 : i32 to i1 - %19 = xor %18, %true : i1 - scf.yield %19 : i1 - } else { - scf.yield %false : i1 - } - scf.if %12 { - call @print_array(%c2600_i32, %8) : (i32, memref) -> () - } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> - memref.dealloc %4 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { - %c3000_i32 = constant 3000 : i32 - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %0 = sitofp %c3000_i32 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %2 = cmpi slt, %arg4, %c3000_i32 : i32 - scf.condition(%2) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %2 = index_cast %arg4 : i32 to index - %3 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %5 = cmpi slt, %arg5, %c2600_i32 : i32 - scf.condition(%5) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %5 = index_cast %arg5 : i32 to index - %6 = muli %arg4, %arg5 : i32 - %7 = sitofp %6 : i32 to f64 - %8 = sitofp %c2600_i32 : i32 to f64 - %9 = divf %7, %8 : f64 - %10 = sitofp %arg4 : i32 to f64 - %11 = addf %9, %10 : f64 - memref.store %11, %arg3[%2, %5] : memref - %12 = addi %arg5, %c1_i32 : i32 - scf.yield %12 : i32 - } - %4 = addi %arg4, %c1_i32 : i32 - scf.yield %4 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg7 = 0 to %1 { - call @S0(%arg5, %arg7) : (memref, index) -> () - affine.for %arg8 = 0 to %0 { - call @S1(%arg5, %arg7, %arg3, %arg8) : (memref, index, memref, index) -> () - } - call @S2(%arg5, %arg7, %arg2) : (memref, index, f64) -> () - } - affine.for %arg7 = 0 to %1 { - call @S3(%arg6, %arg7) : (memref, index) -> () - affine.for %arg8 = 0 to %0 { - call @S4(%arg6, %arg7, %arg5, %arg3, %arg8) : (memref, index, memref, memref, index) -> () - } - call @S5(%arg6, %arg7, %arg2) : (memref, index, f64) -> () - } - affine.for %arg7 = 0 to %0 { - affine.for %arg8 = 0 to %1 { - call @S6(%arg3, %arg7, %arg8, %arg6, %arg2, %arg5) : (memref, index, index, memref, f64, memref) -> () - } - } - affine.for %arg7 = 0 to #map0()[%1] { - call @S7(%arg4, %arg7) : (memref, index) -> () - affine.for %arg8 = #map1(%arg7) to %1 { - call @S8(%arg4, %arg7, %arg8) : (memref, index, index) -> () - affine.for %arg9 = 0 to %0 { - call @S9(%arg4, %arg7, %arg8, %arg3, %arg9) : (memref, index, index, memref, index) -> () - } - call @S10(%arg4, %arg8, %arg7) : (memref, index, index) -> () - } - } - call @S11(%arg4, %1) : (memref, index) -> () - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg2[symbol(%arg1)] : memref - %3 = subf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = mulf %3, %3 {scop.splittable = 0 : index} : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 {scop.splittable = 4 : index} : f64 - %2 = math.sqrt %1 {scop.splittable = 3 : index} : f64 - %3 = cmpf ule, %2, %cst {scop.splittable = 2 : index} : f64 - %4 = select %3, %cst_0, %2 : f64 - affine.store %4, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: f64, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg2)] : memref - %2 = subf %0, %1 {scop.splittable = 5 : index} : f64 - %3 = math.sqrt %arg4 {scop.splittable = 7 : index} : f64 - %4 = affine.load %arg3[symbol(%arg2)] : memref - %5 = mulf %3, %4 {scop.splittable = 6 : index} : f64 - %6 = divf %2, %5 : f64 - affine.store %6, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S9(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 8 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S10(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S11(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %c1 = constant 1 : index - %cst = constant 1.000000e+00 : f64 - %0 = subi %arg1, %c1 : index - memref.store %cst, %arg0[%0, %0] : memref - return - } - func private @kernel_correlation_opt(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { - %0 = index_cast %arg0 : i32 to index - %1 = index_cast %arg1 : i32 to index - affine.if #set0()[%0, %1] { - call @S11(%arg4, %0) : (memref, index) -> () - affine.for %arg7 = 0 to #map2()[%0] { - affine.for %arg8 = #map3(%arg7) to #map4()[%0] { - affine.for %arg9 = #map5(%arg7) to min #map6(%arg7, %arg8)[%0] { - affine.for %arg10 = max #map7(%arg8, %arg9) to min #map8(%arg8)[%0] { - call @S8(%arg4, %arg9, %arg10) : (memref, index, index) -> () - } - } - } - } {scop.parallelizable} - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = #map5(%arg7) to min #map9(%arg7)[%0] { - call @S0(%arg5, %arg8) : (memref, index) -> () - call @S3(%arg6, %arg8) : (memref, index) -> () - call @S7(%arg4, %arg8) : (memref, index) -> () - } - affine.if #set1(%arg7)[%0] { - %2 = affine.apply #map0()[%0] - call @S0(%arg5, %2) : (memref, index) -> () - %3 = affine.apply #map0()[%0] - call @S3(%arg6, %3) : (memref, index) -> () - } - } {scop.parallelizable} - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = 0 to #map4()[%1] { - affine.for %arg9 = #map5(%arg8) to min #map8(%arg8)[%1] { - affine.for %arg10 = #map5(%arg7) to min #map8(%arg7)[%0] { - call @S1(%arg5, %arg10, %arg3, %arg9) : (memref, index, memref, index) -> () - } - } - } - } {scop.parallelizable} - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = #map5(%arg7) to min #map8(%arg7)[%0] { - call @S2(%arg5, %arg8, %arg2) : (memref, index, f64) -> () - } - } {scop.parallelizable} - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = 0 to #map4()[%1] { - affine.for %arg9 = #map5(%arg8) to min #map8(%arg8)[%1] { - affine.for %arg10 = #map5(%arg7) to min #map8(%arg7)[%0] { - call @S4(%arg6, %arg10, %arg5, %arg3, %arg9) : (memref, index, memref, memref, index) -> () - } - } - } - } {scop.parallelizable} - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = #map5(%arg7) to min #map8(%arg7)[%0] { - call @S5(%arg6, %arg8, %arg2) : (memref, index, f64) -> () - } - } {scop.parallelizable} - affine.for %arg7 = 0 to #map4()[%1] { - affine.for %arg8 = 0 to #map4()[%0] { - affine.for %arg9 = #map5(%arg7) to min #map8(%arg7)[%1] { - affine.for %arg10 = #map5(%arg8) to min #map8(%arg8)[%0] { - call @S6(%arg3, %arg9, %arg10, %arg6, %arg2, %arg5) : (memref, index, index, memref, f64, memref) -> () - } - } - } - } {scop.parallelizable} - affine.for %arg7 = 0 to #map2()[%0] { - affine.for %arg8 = #map3(%arg7) to #map4()[%0] { - affine.for %arg9 = 0 to #map4()[%1] { - affine.for %arg10 = #map5(%arg7) to min #map6(%arg7, %arg8)[%0] { - affine.for %arg11 = #map5(%arg9) to min #map8(%arg9)[%1] { - affine.for %arg12 = max #map7(%arg8, %arg10) to min #map8(%arg8)[%0] { - call @S9(%arg4, %arg10, %arg12, %arg3, %arg11) : (memref, index, index, memref, index) -> () - } - } - } - } - } - } {scop.parallelizable} - affine.for %arg7 = 0 to #map2()[%0] { - affine.for %arg8 = #map3(%arg7) to #map4()[%0] { - affine.for %arg9 = #map5(%arg7) to min #map6(%arg7, %arg8)[%0] { - affine.for %arg10 = max #map7(%arg8, %arg9) to min #map8(%arg8)[%0] { - call @S10(%arg4, %arg10, %arg9) : (memref, index, index) -> () - } - } - } - } {scop.parallelizable} - } - return - } - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/correlation/correlation.origin.polymer.seq.mlir b/example/polybench/split-and-merge/correlation/correlation.origin.polymer.seq.mlir deleted file mode 100644 index 82fb674e..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.origin.polymer.seq.mlir +++ /dev/null @@ -1,385 +0,0 @@ -#map0 = affine_map<()[s0] -> (s0 - 1)> -#map1 = affine_map<(d0) -> (d0 + 1)> -#map2 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> -#map3 = affine_map<(d0) -> (d0)> -#map4 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map5 = affine_map<(d0) -> (d0 * 32)> -#map6 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> -#map7 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map8 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#map9 = affine_map<(d0)[s0] -> (s0 - 1, d0 * 32 + 32)> -#set0 = affine_set<()[s0, s1] : (s0 - 2 >= 0, s1 - 1 >= 0)> -#set1 = affine_set<(d0)[s0] : (d0 - (s0 - 32) ceildiv 32 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("corr\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = memref.cast %0 : memref<1xf64> to memref - %6 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %5, %6) : (i32, i32, memref, memref) -> () - call @polybench_timer_start() : () -> () - %7 = affine.load %0[0] : memref<1xf64> - %8 = memref.cast %2 : memref<2600x2600xf64> to memref - %9 = memref.cast %3 : memref<2600xf64> to memref - %10 = memref.cast %4 : memref<2600xf64> to memref - call @kernel_correlation_opt(%c2600_i32, %c3000_i32, %7, %6, %8, %9, %10) : (i32, i32, f64, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %11 = cmpi sgt, %arg0, %c42_i32 : i32 - %12 = scf.if %11 -> (i1) { - %13 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %14 = llvm.load %13 : !llvm.ptr> - %15 = llvm.mlir.addressof @str0 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.call @strcmp(%14, %16) : (!llvm.ptr, !llvm.ptr) -> i32 - %18 = trunci %17 : i32 to i1 - %19 = xor %18, %true : i1 - scf.yield %19 : i1 - } else { - scf.yield %false : i1 - } - scf.if %12 { - call @print_array(%c2600_i32, %8) : (i32, memref) -> () - } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> - memref.dealloc %4 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { - %c3000_i32 = constant 3000 : i32 - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %0 = sitofp %c3000_i32 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %2 = cmpi slt, %arg4, %c3000_i32 : i32 - scf.condition(%2) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %2 = index_cast %arg4 : i32 to index - %3 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %5 = cmpi slt, %arg5, %c2600_i32 : i32 - scf.condition(%5) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %5 = index_cast %arg5 : i32 to index - %6 = muli %arg4, %arg5 : i32 - %7 = sitofp %6 : i32 to f64 - %8 = sitofp %c2600_i32 : i32 to f64 - %9 = divf %7, %8 : f64 - %10 = sitofp %arg4 : i32 to f64 - %11 = addf %9, %10 : f64 - memref.store %11, %arg3[%2, %5] : memref - %12 = addi %arg5, %c1_i32 : i32 - scf.yield %12 : i32 - } - %4 = addi %arg4, %c1_i32 : i32 - scf.yield %4 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg7 = 0 to %1 { - call @S0(%arg5, %arg7) : (memref, index) -> () - affine.for %arg8 = 0 to %0 { - call @S1(%arg5, %arg7, %arg3, %arg8) : (memref, index, memref, index) -> () - } - call @S2(%arg5, %arg7, %arg2) : (memref, index, f64) -> () - } - affine.for %arg7 = 0 to %1 { - call @S3(%arg6, %arg7) : (memref, index) -> () - affine.for %arg8 = 0 to %0 { - call @S4(%arg6, %arg7, %arg5, %arg3, %arg8) : (memref, index, memref, memref, index) -> () - } - call @S5(%arg6, %arg7, %arg2) : (memref, index, f64) -> () - } - affine.for %arg7 = 0 to %0 { - affine.for %arg8 = 0 to %1 { - call @S6(%arg3, %arg7, %arg8, %arg6, %arg2, %arg5) : (memref, index, index, memref, f64, memref) -> () - } - } - affine.for %arg7 = 0 to #map0()[%1] { - call @S7(%arg4, %arg7) : (memref, index) -> () - affine.for %arg8 = #map1(%arg7) to %1 { - call @S8(%arg4, %arg7, %arg8) : (memref, index, index) -> () - affine.for %arg9 = 0 to %0 { - call @S9(%arg4, %arg7, %arg8, %arg3, %arg9) : (memref, index, index, memref, index) -> () - } - call @S10(%arg4, %arg8, %arg7) : (memref, index, index) -> () - } - } - call @S11(%arg4, %1) : (memref, index) -> () - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg2[symbol(%arg1)] : memref - %3 = subf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = mulf %3, %3 {scop.splittable = 0 : index} : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 {scop.splittable = 4 : index} : f64 - %2 = math.sqrt %1 {scop.splittable = 3 : index} : f64 - %3 = cmpf ule, %2, %cst {scop.splittable = 2 : index} : f64 - %4 = select %3, %cst_0, %2 : f64 - affine.store %4, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: f64, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg2)] : memref - %2 = subf %0, %1 {scop.splittable = 5 : index} : f64 - %3 = math.sqrt %arg4 {scop.splittable = 7 : index} : f64 - %4 = affine.load %arg3[symbol(%arg2)] : memref - %5 = mulf %3, %4 {scop.splittable = 6 : index} : f64 - %6 = divf %2, %5 : f64 - affine.store %6, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S9(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 8 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S10(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S11(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %c1 = constant 1 : index - %cst = constant 1.000000e+00 : f64 - %0 = subi %arg1, %c1 : index - memref.store %cst, %arg0[%0, %0] : memref - return - } - func private @kernel_correlation_opt(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { - %0 = index_cast %arg0 : i32 to index - %1 = index_cast %arg1 : i32 to index - affine.if #set0()[%0, %1] { - call @S11(%arg4, %0) : (memref, index) -> () - affine.for %arg7 = 0 to #map2()[%0] { - affine.for %arg8 = #map3(%arg7) to #map4()[%0] { - affine.for %arg9 = #map5(%arg7) to min #map6(%arg7, %arg8)[%0] { - affine.for %arg10 = max #map7(%arg8, %arg9) to min #map8(%arg8)[%0] { - call @S8(%arg4, %arg9, %arg10) : (memref, index, index) -> () - } - } - } - } - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = #map5(%arg7) to min #map9(%arg7)[%0] { - call @S0(%arg5, %arg8) : (memref, index) -> () - call @S3(%arg6, %arg8) : (memref, index) -> () - call @S7(%arg4, %arg8) : (memref, index) -> () - } - affine.if #set1(%arg7)[%0] { - %2 = affine.apply #map0()[%0] - call @S0(%arg5, %2) : (memref, index) -> () - %3 = affine.apply #map0()[%0] - call @S3(%arg6, %3) : (memref, index) -> () - } - } - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = 0 to #map4()[%1] { - affine.for %arg9 = #map5(%arg8) to min #map8(%arg8)[%1] { - affine.for %arg10 = #map5(%arg7) to min #map8(%arg7)[%0] { - call @S1(%arg5, %arg10, %arg3, %arg9) : (memref, index, memref, index) -> () - } - } - } - } - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = #map5(%arg7) to min #map8(%arg7)[%0] { - call @S2(%arg5, %arg8, %arg2) : (memref, index, f64) -> () - } - } - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = 0 to #map4()[%1] { - affine.for %arg9 = #map5(%arg8) to min #map8(%arg8)[%1] { - affine.for %arg10 = #map5(%arg7) to min #map8(%arg7)[%0] { - call @S4(%arg6, %arg10, %arg5, %arg3, %arg9) : (memref, index, memref, memref, index) -> () - } - } - } - } - affine.for %arg7 = 0 to #map4()[%0] { - affine.for %arg8 = #map5(%arg7) to min #map8(%arg7)[%0] { - call @S5(%arg6, %arg8, %arg2) : (memref, index, f64) -> () - } - } - affine.for %arg7 = 0 to #map4()[%1] { - affine.for %arg8 = 0 to #map4()[%0] { - affine.for %arg9 = #map5(%arg7) to min #map8(%arg7)[%1] { - affine.for %arg10 = #map5(%arg8) to min #map8(%arg8)[%0] { - call @S6(%arg3, %arg9, %arg10, %arg6, %arg2, %arg5) : (memref, index, index, memref, f64, memref) -> () - } - } - } - } - affine.for %arg7 = 0 to #map2()[%0] { - affine.for %arg8 = #map3(%arg7) to #map4()[%0] { - affine.for %arg9 = 0 to #map4()[%1] { - affine.for %arg10 = #map5(%arg7) to min #map6(%arg7, %arg8)[%0] { - affine.for %arg11 = #map5(%arg9) to min #map8(%arg9)[%1] { - affine.for %arg12 = max #map7(%arg8, %arg10) to min #map8(%arg8)[%0] { - call @S9(%arg4, %arg10, %arg12, %arg3, %arg11) : (memref, index, index, memref, index) -> () - } - } - } - } - } - } - affine.for %arg7 = 0 to #map2()[%0] { - affine.for %arg8 = #map3(%arg7) to #map4()[%0] { - affine.for %arg9 = #map5(%arg7) to min #map6(%arg7, %arg8)[%0] { - affine.for %arg10 = max #map7(%arg8, %arg9) to min #map8(%arg8)[%0] { - call @S10(%arg4, %arg10, %arg9) : (memref, index, index) -> () - } - } - } - } - } - return - } - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/correlation/correlation.origin.splittable.mlir b/example/polybench/split-and-merge/correlation/correlation.origin.splittable.mlir deleted file mode 100644 index 275a83e9..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.origin.splittable.mlir +++ /dev/null @@ -1,234 +0,0 @@ -#map0 = affine_map<()[s0] -> (s0 - 1)> -#map1 = affine_map<(d0) -> (d0 + 1)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("corr\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = memref.cast %0 : memref<1xf64> to memref - %6 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %5, %6) : (i32, i32, memref, memref) -> () - call @polybench_timer_start() : () -> () - %7 = affine.load %0[0] : memref<1xf64> - %8 = memref.cast %2 : memref<2600x2600xf64> to memref - %9 = memref.cast %3 : memref<2600xf64> to memref - %10 = memref.cast %4 : memref<2600xf64> to memref - call @kernel_correlation(%c2600_i32, %c3000_i32, %7, %6, %8, %9, %10) : (i32, i32, f64, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %11 = cmpi sgt, %arg0, %c42_i32 : i32 - %12 = scf.if %11 -> (i1) { - %13 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %14 = llvm.load %13 : !llvm.ptr> - %15 = llvm.mlir.addressof @str0 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.call @strcmp(%14, %16) : (!llvm.ptr, !llvm.ptr) -> i32 - %18 = trunci %17 : i32 to i1 - %19 = xor %18, %true : i1 - scf.yield %19 : i1 - } else { - scf.yield %false : i1 - } - scf.if %12 { - call @print_array(%c2600_i32, %8) : (i32, memref) -> () - } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> - memref.dealloc %4 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { - %c3000_i32 = constant 3000 : i32 - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %0 = sitofp %c3000_i32 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %2 = cmpi slt, %arg4, %c3000_i32 : i32 - scf.condition(%2) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %2 = index_cast %arg4 : i32 to index - %3 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %5 = cmpi slt, %arg5, %c2600_i32 : i32 - scf.condition(%5) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %5 = index_cast %arg5 : i32 to index - %6 = muli %arg4, %arg5 : i32 - %7 = sitofp %6 : i32 to f64 - %8 = sitofp %c2600_i32 : i32 to f64 - %9 = divf %7, %8 : f64 - %10 = sitofp %arg4 : i32 to f64 - %11 = addf %9, %10 : f64 - memref.store %11, %arg3[%2, %5] : memref - %12 = addi %arg5, %c1_i32 : i32 - scf.yield %12 : i32 - } - %4 = addi %arg4, %c1_i32 : i32 - scf.yield %4 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 0.000000e+00 : f64 - %c1 = constant 1 : index - %cst_1 = constant 1.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg7 = 0 to %1 { - affine.store %cst_0, %arg5[%arg7] : memref - affine.for %arg8 = 0 to %0 { - %5 = affine.load %arg3[%arg8, %arg7] : memref - %6 = affine.load %arg5[%arg7] : memref - %7 = addf %6, %5 : f64 - affine.store %7, %arg5[%arg7] : memref - } - %3 = affine.load %arg5[%arg7] : memref - %4 = divf %3, %arg2 : f64 - affine.store %4, %arg5[%arg7] : memref - } - affine.for %arg7 = 0 to %1 { - affine.store %cst_0, %arg6[%arg7] : memref - affine.for %arg8 = 0 to %0 { - %8 = affine.load %arg3[%arg8, %arg7] : memref - %9 = affine.load %arg5[%arg7] : memref - %10 = subf %8, %9 {scop.splittable = 1 : index} : f64 - %11 = mulf %10, %10 {scop.splittable = 0 : index} : f64 - %12 = affine.load %arg6[%arg7] : memref - %13 = addf %12, %11 : f64 - affine.store %13, %arg6[%arg7] : memref - } - %3 = affine.load %arg6[%arg7] : memref - %4 = divf %3, %arg2 {scop.splittable = 4 : index} : f64 - %5 = math.sqrt %4 {scop.splittable = 3 : index} : f64 - %6 = cmpf ule, %5, %cst {scop.splittable = 2 : index} : f64 - %7 = select %6, %cst_1, %5 : f64 - affine.store %7, %arg6[%arg7] : memref - } - affine.for %arg7 = 0 to %0 { - affine.for %arg8 = 0 to %1 { - %3 = affine.load %arg5[%arg8] : memref - %4 = affine.load %arg3[%arg7, %arg8] : memref - %5 = subf %4, %3 {scop.splittable = 5 : index} : f64 - %6 = math.sqrt %arg2 {scop.splittable = 7 : index} : f64 - %7 = affine.load %arg6[%arg8] : memref - %8 = mulf %6, %7 {scop.splittable = 6 : index} : f64 - %9 = divf %5, %8 : f64 - affine.store %9, %arg3[%arg7, %arg8] : memref - } - } - affine.for %arg7 = 0 to #map0()[%1] { - affine.store %cst_1, %arg4[%arg7, %arg7] : memref - affine.for %arg8 = #map1(%arg7) to %1 { - affine.store %cst_0, %arg4[%arg7, %arg8] : memref - affine.for %arg9 = 0 to %0 { - %4 = affine.load %arg3[%arg9, %arg7] : memref - %5 = affine.load %arg3[%arg9, %arg8] : memref - %6 = mulf %4, %5 {scop.splittable = 8 : index} : f64 - %7 = affine.load %arg4[%arg7, %arg8] : memref - %8 = addf %7, %6 : f64 - affine.store %8, %arg4[%arg7, %arg8] : memref - } - %3 = affine.load %arg4[%arg7, %arg8] : memref - affine.store %3, %arg4[%arg8, %arg7] : memref - } - } - %2 = subi %1, %c1 : index - memref.store %cst_1, %arg4[%2, %2] : memref - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/correlation/correlation.split-8.polymer.par.mlir b/example/polybench/split-and-merge/correlation/correlation.split-8.polymer.par.mlir deleted file mode 100644 index 08067f08..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.split-8.polymer.par.mlir +++ /dev/null @@ -1,369 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0, d1) -> (2599, d0 * 32 + 32, d1 * 32 + 31)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2599, d0 * 32 + 32)> -#map6 = affine_map<(d0) -> (3000, d0 * 32 + 32)> -#map7 = affine_map<(d0) -> (0, (d0 * 32 - 2999) ceildiv 32)> -#map8 = affine_map<(d0) -> (82, d0 + 1)> -#map9 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> -#map10 = affine_map<(d0, d1) -> (3000, d0 * 32 - d1 * 32 + 32)> -#map11 = affine_map<(d0) -> (d0 + 1)> -#set = affine_set<(d0) : (d0 - 81 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("corr\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c3000_i32 = constant 3000 : i32 - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %cst = constant 0.000000e+00 : f64 - %cst_0 = constant 1.000000e-01 : f64 - %cst_1 = constant 1.000000e+00 : f64 - %c2599 = constant 2599 : index - %0 = memref.alloca() : memref<3000xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<3000x2600xf64> - %3 = memref.alloc() : memref<2600x2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = memref.alloc() : memref<2600xf64> - %6 = sitofp %c3000_i32 : i32 to f64 - affine.store %6, %1[0] : memref<1xf64> - %7 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %12 = cmpi slt, %arg2, %c3000_i32 : i32 - scf.condition(%12) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %12 = index_cast %arg2 : i32 to index - %13 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %15 = cmpi slt, %arg3, %c2600_i32 : i32 - scf.condition(%15) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %15 = index_cast %arg3 : i32 to index - %16 = muli %arg2, %arg3 : i32 - %17 = sitofp %16 : i32 to f64 - %18 = sitofp %c2600_i32 : i32 to f64 - %19 = divf %17, %18 : f64 - %20 = sitofp %arg2 : i32 to f64 - %21 = addf %19, %20 : f64 - memref.store %21, %2[%12, %15] : memref<3000x2600xf64> - %22 = addi %arg3, %c1_i32 : i32 - scf.yield %22 : i32 - } - %14 = addi %arg2, %c1_i32 : i32 - scf.yield %14 : i32 - } - call @polybench_timer_start() : () -> () - %8 = affine.load %1[0] : memref<1xf64> - %9 = memref.cast %3 : memref<2600x2600xf64> to memref - memref.store %cst_1, %3[%c2599, %c2599] : memref<2600x2600xf64> - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - affine.store %cst, %3[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map5(%arg2) { - affine.store %cst_1, %3[%arg3, %arg3] : memref<2600x2600xf64> - affine.store %cst, %5[%arg3] : memref<2600xf64> - affine.store %cst, %4[%arg3] : memref<2600xf64> - } - affine.if #set(%arg2) { - affine.store %cst, %5[2599] : memref<2600xf64> - affine.store %cst, %4[2599] : memref<2600xf64> - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = 0 to 94 { - affine.for %arg4 = #map1(%arg3) to min #map6(%arg3) { - affine.for %arg5 = #map1(%arg2) to min #map4(%arg2) { - %12 = affine.load %4[%arg5] : memref<2600xf64> - %13 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %14 = addf %12, %13 : f64 - affine.store %14, %4[%arg5] : memref<2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map4(%arg2) { - %12 = affine.load %4[%arg3] : memref<2600xf64> - %13 = divf %12, %8 : f64 - affine.store %13, %4[%arg3] : memref<2600xf64> - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = 0 to 94 { - affine.for %arg4 = #map1(%arg3) to min #map6(%arg3) { - affine.for %arg5 = #map1(%arg2) to min #map4(%arg2) { - %12 = affine.load %5[%arg5] : memref<2600xf64> - %13 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %14 = affine.load %4[%arg5] : memref<2600xf64> - %15 = subf %13, %14 {scop.splittable = 1 : index} : f64 - %16 = mulf %15, %15 {scop.splittable = 0 : index} : f64 - %17 = addf %12, %16 : f64 - affine.store %17, %5[%arg5] : memref<2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map4(%arg2) { - %12 = affine.load %5[%arg3] : memref<2600xf64> - %13 = divf %12, %8 {scop.splittable = 4 : index} : f64 - %14 = math.sqrt %13 {scop.splittable = 3 : index} : f64 - %15 = cmpf ule, %14, %cst_0 {scop.splittable = 2 : index} : f64 - %16 = select %15, %cst_1, %14 : f64 - affine.store %16, %5[%arg3] : memref<2600xf64> - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 94 { - affine.for %arg3 = 0 to 82 { - affine.for %arg4 = #map1(%arg2) to min #map6(%arg2) { - affine.for %arg5 = #map1(%arg3) to min #map4(%arg3) { - %12 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %13 = affine.load %4[%arg5] : memref<2600xf64> - %14 = subf %12, %13 {scop.splittable = 5 : index} : f64 - %15 = math.sqrt %8 {scop.splittable = 7 : index} : f64 - %16 = affine.load %5[%arg5] : memref<2600xf64> - %17 = mulf %15, %16 {scop.splittable = 6 : index} : f64 - %18 = divf %14, %17 : f64 - affine.store %18, %2[%arg4, %arg5] : memref<3000x2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 175 { - affine.for %arg3 = max #map7(%arg2) to min #map8(%arg2) { - affine.for %arg4 = #map9(%arg2, %arg3) to min #map10(%arg2, %arg3) { - affine.for %arg5 = #map1(%arg3) to min #map5(%arg3) { - affine.for %arg6 = #map11(%arg5) to 2600 { - %12 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %13 = affine.load %2[%arg4, %arg6] : memref<3000x2600xf64> - %14 = mulf %12, %13 {scop.splittable = 8 : index} : f64 - affine.store %14, %0[%arg4] : memref<3000xf64> - %15 = affine.load %3[%arg5, %arg6] : memref<2600x2600xf64> - %16 = affine.load %0[%arg4] : memref<3000xf64> - %17 = addf %15, %16 : f64 - affine.store %17, %3[%arg5, %arg6] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - %12 = affine.load %3[%arg4, %arg5] : memref<2600x2600xf64> - affine.store %12, %3[%arg5, %arg4] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %10 = cmpi sgt, %arg0, %c42_i32 : i32 - %11 = scf.if %10 -> (i1) { - %12 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %13 = llvm.load %12 : !llvm.ptr> - %14 = llvm.mlir.addressof @str0 : !llvm.ptr> - %15 = llvm.getelementptr %14[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %16 = llvm.call @strcmp(%13, %15) : (!llvm.ptr, !llvm.ptr) -> i32 - %17 = trunci %16 : i32 to i1 - %18 = xor %17, %true : i1 - scf.yield %18 : i1 - } else { - scf.yield %false : i1 - } - scf.if %11 { - call @print_array(%c2600_i32, %9) : (i32, memref) -> () - } - memref.dealloc %2 : memref<3000x2600xf64> - memref.dealloc %3 : memref<2600x2600xf64> - memref.dealloc %4 : memref<2600xf64> - memref.dealloc %5 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg2[symbol(%arg1)] : memref - %3 = subf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = mulf %3, %3 {scop.splittable = 0 : index} : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 {scop.splittable = 4 : index} : f64 - %2 = math.sqrt %1 {scop.splittable = 3 : index} : f64 - %3 = cmpf ule, %2, %cst {scop.splittable = 2 : index} : f64 - %4 = select %3, %cst_0, %2 : f64 - affine.store %4, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: f64, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg2)] : memref - %2 = subf %0, %1 {scop.splittable = 5 : index} : f64 - %3 = math.sqrt %arg4 {scop.splittable = 7 : index} : f64 - %4 = affine.load %arg3[symbol(%arg2)] : memref - %5 = mulf %3, %4 {scop.splittable = 6 : index} : f64 - %6 = divf %2, %5 : f64 - affine.store %6, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S9(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg4)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 8 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S10(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S11(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S12(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %c1 = constant 1 : index - %cst = constant 1.000000e+00 : f64 - %0 = subi %arg1, %c1 : index - memref.store %cst, %arg0[%0, %0] : memref - return - } - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/correlation/correlation.split-8.polymer.seq.mlir b/example/polybench/split-and-merge/correlation/correlation.split-8.polymer.seq.mlir deleted file mode 100644 index d9705e5c..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.split-8.polymer.seq.mlir +++ /dev/null @@ -1,365 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0, d1) -> (2599, d0 * 32 + 32, d1 * 32 + 31)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2599, d0 * 32 + 32)> -#map6 = affine_map<(d0) -> (3000, d0 * 32 + 32)> -#map7 = affine_map<(d0) -> (d0 + 1)> -#set = affine_set<(d0) : (d0 - 81 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("corr\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c3000_i32 = constant 3000 : i32 - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %cst = constant 0.000000e+00 : f64 - %cst_0 = constant 1.000000e-01 : f64 - %cst_1 = constant 1.000000e+00 : f64 - %c2599 = constant 2599 : index - %0 = memref.alloca() : memref<3000xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<3000x2600xf64> - %3 = memref.alloc() : memref<2600x2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = memref.alloc() : memref<2600xf64> - %6 = sitofp %c3000_i32 : i32 to f64 - affine.store %6, %1[0] : memref<1xf64> - %7 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %12 = cmpi slt, %arg2, %c3000_i32 : i32 - scf.condition(%12) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %12 = index_cast %arg2 : i32 to index - %13 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %15 = cmpi slt, %arg3, %c2600_i32 : i32 - scf.condition(%15) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %15 = index_cast %arg3 : i32 to index - %16 = muli %arg2, %arg3 : i32 - %17 = sitofp %16 : i32 to f64 - %18 = sitofp %c2600_i32 : i32 to f64 - %19 = divf %17, %18 : f64 - %20 = sitofp %arg2 : i32 to f64 - %21 = addf %19, %20 : f64 - memref.store %21, %2[%12, %15] : memref<3000x2600xf64> - %22 = addi %arg3, %c1_i32 : i32 - scf.yield %22 : i32 - } - %14 = addi %arg2, %c1_i32 : i32 - scf.yield %14 : i32 - } - call @polybench_timer_start() : () -> () - %8 = affine.load %1[0] : memref<1xf64> - %9 = memref.cast %3 : memref<2600x2600xf64> to memref - memref.store %cst_1, %3[%c2599, %c2599] : memref<2600x2600xf64> - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - affine.store %cst, %3[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map5(%arg2) { - affine.store %cst_1, %3[%arg3, %arg3] : memref<2600x2600xf64> - affine.store %cst, %5[%arg3] : memref<2600xf64> - affine.store %cst, %4[%arg3] : memref<2600xf64> - } - affine.if #set(%arg2) { - affine.store %cst, %5[2599] : memref<2600xf64> - affine.store %cst, %4[2599] : memref<2600xf64> - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = 0 to 94 { - affine.for %arg4 = #map1(%arg3) to min #map6(%arg3) { - affine.for %arg5 = #map1(%arg2) to min #map4(%arg2) { - %12 = affine.load %4[%arg5] : memref<2600xf64> - %13 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %14 = addf %12, %13 : f64 - affine.store %14, %4[%arg5] : memref<2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map4(%arg2) { - %12 = affine.load %4[%arg3] : memref<2600xf64> - %13 = divf %12, %8 : f64 - affine.store %13, %4[%arg3] : memref<2600xf64> - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = 0 to 94 { - affine.for %arg4 = #map1(%arg3) to min #map6(%arg3) { - affine.for %arg5 = #map1(%arg2) to min #map4(%arg2) { - %12 = affine.load %5[%arg5] : memref<2600xf64> - %13 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %14 = affine.load %4[%arg5] : memref<2600xf64> - %15 = subf %13, %14 {scop.splittable = 1 : index} : f64 - %16 = mulf %15, %15 {scop.splittable = 0 : index} : f64 - %17 = addf %12, %16 : f64 - affine.store %17, %5[%arg5] : memref<2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map4(%arg2) { - %12 = affine.load %5[%arg3] : memref<2600xf64> - %13 = divf %12, %8 {scop.splittable = 4 : index} : f64 - %14 = math.sqrt %13 {scop.splittable = 3 : index} : f64 - %15 = cmpf ule, %14, %cst_0 {scop.splittable = 2 : index} : f64 - %16 = select %15, %cst_1, %14 : f64 - affine.store %16, %5[%arg3] : memref<2600xf64> - } - } - affine.for %arg2 = 0 to 94 { - affine.for %arg3 = 0 to 82 { - affine.for %arg4 = #map1(%arg2) to min #map6(%arg2) { - affine.for %arg5 = #map1(%arg3) to min #map4(%arg3) { - %12 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %13 = affine.load %4[%arg5] : memref<2600xf64> - %14 = subf %12, %13 {scop.splittable = 5 : index} : f64 - %15 = math.sqrt %8 {scop.splittable = 7 : index} : f64 - %16 = affine.load %5[%arg5] : memref<2600xf64> - %17 = mulf %15, %16 {scop.splittable = 6 : index} : f64 - %18 = divf %14, %17 : f64 - affine.store %18, %2[%arg4, %arg5] : memref<3000x2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 94 { - affine.for %arg3 = 0 to 82 { - affine.for %arg4 = #map1(%arg2) to min #map6(%arg2) { - affine.for %arg5 = #map1(%arg3) to min #map5(%arg3) { - affine.for %arg6 = #map7(%arg5) to 2600 { - %12 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %13 = affine.load %2[%arg4, %arg6] : memref<3000x2600xf64> - %14 = mulf %12, %13 {scop.splittable = 8 : index} : f64 - affine.store %14, %0[%arg4] : memref<3000xf64> - %15 = affine.load %3[%arg5, %arg6] : memref<2600x2600xf64> - %16 = affine.load %0[%arg4] : memref<3000xf64> - %17 = addf %15, %16 : f64 - affine.store %17, %3[%arg5, %arg6] : memref<2600x2600xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - %12 = affine.load %3[%arg4, %arg5] : memref<2600x2600xf64> - affine.store %12, %3[%arg5, %arg4] : memref<2600x2600xf64> - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %10 = cmpi sgt, %arg0, %c42_i32 : i32 - %11 = scf.if %10 -> (i1) { - %12 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %13 = llvm.load %12 : !llvm.ptr> - %14 = llvm.mlir.addressof @str0 : !llvm.ptr> - %15 = llvm.getelementptr %14[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %16 = llvm.call @strcmp(%13, %15) : (!llvm.ptr, !llvm.ptr) -> i32 - %17 = trunci %16 : i32 to i1 - %18 = xor %17, %true : i1 - scf.yield %18 : i1 - } else { - scf.yield %false : i1 - } - scf.if %11 { - call @print_array(%c2600_i32, %9) : (i32, memref) -> () - } - memref.dealloc %2 : memref<3000x2600xf64> - memref.dealloc %3 : memref<2600x2600xf64> - memref.dealloc %4 : memref<2600xf64> - memref.dealloc %5 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg2[symbol(%arg1)] : memref - %3 = subf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = mulf %3, %3 {scop.splittable = 0 : index} : f64 - %5 = addf %0, %4 : f64 - affine.store %5, %arg0[symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 {scop.splittable = 4 : index} : f64 - %2 = math.sqrt %1 {scop.splittable = 3 : index} : f64 - %3 = cmpf ule, %2, %cst {scop.splittable = 2 : index} : f64 - %4 = select %3, %cst_0, %2 : f64 - affine.store %4, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: f64, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg2)] : memref - %2 = subf %0, %1 {scop.splittable = 5 : index} : f64 - %3 = math.sqrt %arg4 {scop.splittable = 7 : index} : f64 - %4 = affine.load %arg3[symbol(%arg2)] : memref - %5 = mulf %3, %4 {scop.splittable = 6 : index} : f64 - %6 = divf %2, %5 : f64 - affine.store %6, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S9(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg4)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 8 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S10(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S11(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S12(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %c1 = constant 1 : index - %cst = constant 1.000000e+00 : f64 - %0 = subi %arg1, %c1 : index - memref.store %cst, %arg0[%0, %0] : memref - return - } - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/correlation/correlation.split.c b/example/polybench/split-and-merge/correlation/correlation.split.c deleted file mode 100644 index 9c781f42..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.split.c +++ /dev/null @@ -1,148 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* correlation.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "correlation.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)N; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = (DATA_TYPE)(i * j) / M + i; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(corr, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("corr"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, corr[i][j]); - } - POLYBENCH_DUMP_END("corr"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_correlation(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(corr, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(stddev, M, m), - DATA_TYPE POLYBENCH_1D(scr_data, N, n)) { - int i, j, k; - - DATA_TYPE eps = SCALAR_VAL(0.1); - -#pragma scop - for (j = 0; j < _PB_M; j++) { - mean[j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_N; i++) - mean[j] += data[i][j]; - mean[j] /= float_n; - } - - for (j = 0; j < _PB_M; j++) { - stddev[j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_N; i++) - stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]); - stddev[j] /= float_n; - stddev[j] = SQRT_FUN(stddev[j]); - /* The following in an inelegant but usual way to handle - near-zero std. dev. values, which below would cause a zero- - divide. */ - stddev[j] = stddev[j] <= eps ? SCALAR_VAL(1.0) : stddev[j]; - } - - /* Center and reduce the column vectors. */ - for (i = 0; i < _PB_N; i++) - for (j = 0; j < _PB_M; j++) { - data[i][j] -= mean[j]; - data[i][j] /= SQRT_FUN(float_n) * stddev[j]; - } - - /* Calculate the m * m correlation matrix. */ - for (i = 0; i < _PB_M - 1; i++) { - corr[i][i] = SCALAR_VAL(1.0); - for (j = i + 1; j < _PB_M; j++) { - corr[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_N; k++) { - scr_data[k] = data[k][i] * data[k][j]; - corr[i][j] += scr_data[k]; - } - corr[j][i] = corr[i][j]; - } - } - corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0); -#pragma endscop -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(corr, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(stddev, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(scr_data, DATA_TYPE, N, n); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_correlation(m, n, float_n, POLYBENCH_ARRAY(data), - POLYBENCH_ARRAY(corr), POLYBENCH_ARRAY(mean), - POLYBENCH_ARRAY(stddev), POLYBENCH_ARRAY(scr_data)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(corr))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(corr); - POLYBENCH_FREE_ARRAY(mean); - POLYBENCH_FREE_ARRAY(stddev); - - return 0; -} diff --git a/example/polybench/split-and-merge/correlation/correlation.split.pluto.c b/example/polybench/split-and-merge/correlation/correlation.split.pluto.c deleted file mode 100644 index 9dc4fcad..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.split.pluto.c +++ /dev/null @@ -1,205 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* correlation.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "correlation.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)N; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = (DATA_TYPE)(i * j) / M + i; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(corr, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("corr"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, corr[i][j]); - } - POLYBENCH_DUMP_END("corr"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_correlation(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(corr, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(stddev, M, m), - DATA_TYPE POLYBENCH_1D(scr_data, N, n)) { - int i, j, k; - - DATA_TYPE eps = SCALAR_VAL(0.1); - - int t1, t2, t3, t4, t5, t6, t7; - register int lbv, ubv; -corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0);; -for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_M-2,32*t2+31),32*t3+30);t4++) { - for (t5=max(32*t3,t4+1);t5<=min(_PB_M-1,32*t3+31);t5++) { - corr[t4][t5] = SCALAR_VAL(0.0);; - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-2,32*t2+31);t3++) { - corr[t3][t3] = SCALAR_VAL(1.0);; - stddev[t3] = SCALAR_VAL(0.0);; - mean[t3] = SCALAR_VAL(0.0);; - } - if (t2 >= ceild(_PB_M-32,32)) { - stddev[(_PB_M-1)] = SCALAR_VAL(0.0);; - mean[(_PB_M-1)] = SCALAR_VAL(0.0);; - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - mean[t5] += data[t4][t5];; - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] /= float_n;; - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - stddev[t5] += (data[t4][t5] - mean[t5]) * (data[t4][t5] - mean[t5]);; - data[t4][t5] -= mean[t5];; - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - stddev[t3] /= float_n;; - stddev[t3] = SQRT_FUN(stddev[t3]);; - stddev[t3] = stddev[t3] <= eps ? SCALAR_VAL(1.0) : stddev[t3];; - } -} -if (_PB_M >= 1) { - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - data[t4][t5] /= SQRT_FUN(float_n) * stddev[t5];; - } - } - } - } -} -if (_PB_M >= 2) { - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-2,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-2,32*t3+31);t5++) { - for (t6=t5+1;t6<=_PB_M-1;t6++) { - scr_data[t4] = data[t4][t5] * data[t4][t6];; - corr[t5][t6] += scr_data[t4];; - } - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_M-2,32*t2+31),32*t3+30);t4++) { - for (t5=max(32*t3,t4+1);t5<=min(_PB_M-1,32*t3+31);t5++) { - corr[t5][t4] = corr[t4][t5];; - } - } - } -} -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(corr, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(stddev, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(scr_data, DATA_TYPE, N, n); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_correlation(m, n, float_n, POLYBENCH_ARRAY(data), - POLYBENCH_ARRAY(corr), POLYBENCH_ARRAY(mean), - POLYBENCH_ARRAY(stddev), POLYBENCH_ARRAY(scr_data)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(corr))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(corr); - POLYBENCH_FREE_ARRAY(mean); - POLYBENCH_FREE_ARRAY(stddev); - - return 0; -} diff --git a/example/polybench/split-and-merge/correlation/correlation.split.pluto.cloog b/example/polybench/split-and-merge/correlation/correlation.split.pluto.cloog deleted file mode 100644 index 138544f2..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.split.pluto.cloog +++ /dev/null @@ -1,385 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_M _PB_N - -# Number of statements -16 - -# S1 (mean[j] = SCALAR_VAL(0.0);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S2 (mean[j] += data[i][j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S3 (mean[j] /= float_n;) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S4 (stddev[j] = SCALAR_VAL(0.0);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S5 (stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]);) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S6 (stddev[j] /= float_n;) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S7 (stddev[j] = SQRT_FUN(stddev[j]);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S8 (stddev[j] = stddev[j] <= eps ? SCALAR_VAL(1.0) : stddev[j];) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S9 (data[i][j] -= mean[j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 1 0 -1 -1 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 0 1 0 0 0 -1 32 0 0 -1 0 0 31 -1 0 -32 1 0 0 0 0 -1 0 32 -1 0 0 0 31 -0 0 0 - -# S10 (data[i][j] /= SQRT_FUN(float_n) * stddev[j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 1 0 -1 -1 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S11 (corr[i][i] = SCALAR_VAL(1.0);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -2 -1 0 0 1 0 -2 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S12 (corr[i][j] = SCALAR_VAL(0.0);) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -2 -1 0 0 0 0 1 0 -2 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S13 (scr_data[k] = data[k][i] * data[k][j];) -12 9 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -2 -1 0 0 0 0 0 1 0 -2 -1 0 0 -1 1 0 0 0 -1 -1 0 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 -1 32 0 0 0 -1 0 0 31 -1 0 -32 1 0 0 0 0 0 -1 0 32 -1 0 0 0 0 31 -0 0 0 - -# S14 (corr[i][j] += scr_data[k];) -12 9 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -2 -1 0 0 0 0 0 1 0 -2 -1 0 0 -1 1 0 0 0 -1 -1 0 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 -1 32 0 0 0 -1 0 0 31 -1 0 -32 1 0 0 0 0 0 -1 0 32 -1 0 0 0 0 31 -0 0 0 - -# S15 (corr[j][i] = corr[i][j];) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -2 -1 0 0 0 0 1 0 -2 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S16 (corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0);) -3 4 -0 0 0 0 -0 0 0 0 -0 0 0 0 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -16 - -# T(S1) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -15 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S2) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -14 - -# T(S3) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -4 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -13 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S4) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -12 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S5) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -10 - -# T(S6) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -7 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S7) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -8 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S8) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -9 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S9) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -11 - -# T(S10) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -7 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -6 - -# T(S11) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -5 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S12) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -4 - -# T(S13) -7 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -8 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -2 - -# T(S14) -7 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -8 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -3 - -# T(S15) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -9 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 - -# T(S16) -7 11 -0 1 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 - -# we will set the scattering dimension names -7 -t1 t2 t3 t4 t5 t6 t7 diff --git a/example/polybench/split-and-merge/correlation/correlation.split.pluto.inner.c b/example/polybench/split-and-merge/correlation/correlation.split.pluto.inner.c deleted file mode 100644 index 3225fc78..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.split.pluto.inner.c +++ /dev/null @@ -1,221 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* correlation.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "correlation.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)N; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = (DATA_TYPE)(i * j) / M + i; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(corr, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("corr"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, corr[i][j]); - } - POLYBENCH_DUMP_END("corr"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_correlation(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(corr, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(stddev, M, m), - DATA_TYPE POLYBENCH_1D(scr_data, N, n)) { - int i, j, k; - - DATA_TYPE eps = SCALAR_VAL(0.1); - - int t1, t2, t3, t4, t5, t6, t7; - register int lbv, ubv; -corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0);; -for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_M-2,32*t2+31),32*t3+30);t4++) { - for (t5=max(32*t3,t4+1);t5<=min(_PB_M-1,32*t3+31);t5++) { - corr[t4][t5] = SCALAR_VAL(0.0);; - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-2,32*t2+31);t3++) { - corr[t3][t3] = SCALAR_VAL(1.0);; - stddev[t3] = SCALAR_VAL(0.0);; - mean[t3] = SCALAR_VAL(0.0);; - } - if (t2 >= ceild(_PB_M-32,32)) { - stddev[(_PB_M-1)] = SCALAR_VAL(0.0);; - mean[(_PB_M-1)] = SCALAR_VAL(0.0);; - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - mean[t5] += data[t4][t5];; - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] /= float_n;; - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - stddev[t5] += (data[t4][t5] - mean[t5]) * (data[t4][t5] - mean[t5]);; - data[t4][t5] -= mean[t5];; - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - stddev[t3] /= float_n;; - stddev[t3] = SQRT_FUN(stddev[t3]);; - stddev[t3] = stddev[t3] <= eps ? SCALAR_VAL(1.0) : stddev[t3];; - } -} -if (_PB_M >= 1) { - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - data[t4][t5] /= SQRT_FUN(float_n) * stddev[t5];; - } - } - } - } -} -if (_PB_M >= 2) { -#if 0 - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-2,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-2,32*t3+31);t5++) { - for (t6=t5+1;t6<=_PB_M-1;t6++) { - scr_data[t4] = data[t4][t5] * data[t4][t6];; - corr[t5][t6] += scr_data[t4];; - } - } - } - } - } -#endif - for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=0;t4<=floord(_PB_N-1,32);t4++) { - for (t6=32*t4;t6<=min(_PB_N-1,32*t4+31);t6++) { - for (t5=32*t2;t5<=min(min(_PB_M-2,32*t2+31),32*t3+30);t5++) { - for (t7=max(32*t3,t5+1);t7<=min(_PB_M-1,32*t3+31);t7++) { - scr_data[t6] = data[t6][t5] * data[t6][t7];; - corr[t5][t7] += scr_data[t6];; - } - } - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_M-2,32*t2+31),32*t3+30);t4++) { - for (t5=max(32*t3,t4+1);t5<=min(_PB_M-1,32*t3+31);t5++) { - corr[t5][t4] = corr[t4][t5];; - } - } - } -} -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(corr, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(stddev, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(scr_data, DATA_TYPE, N, n); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_correlation(m, n, float_n, POLYBENCH_ARRAY(data), - POLYBENCH_ARRAY(corr), POLYBENCH_ARRAY(mean), - POLYBENCH_ARRAY(stddev), POLYBENCH_ARRAY(scr_data)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(corr))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(corr); - POLYBENCH_FREE_ARRAY(mean); - POLYBENCH_FREE_ARRAY(stddev); - - return 0; -} diff --git a/example/polybench/split-and-merge/correlation/correlation.split.pluto.log b/example/polybench/split-and-merge/correlation/correlation.split.pluto.log deleted file mode 100644 index 8105ab75..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.split.pluto.log +++ /dev/null @@ -1,5731 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_M _PB_N - - -# Number of statements -16 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -mean[j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| j i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## j >= 0 - 1 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -WRITE -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -j i -# Statement body expression -mean[j] += data[i][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 3.3 Access -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -READ -1 6 1 1 0 2 -# e/i| Arr| j |_PB. _PB.| 1 - 0 -1 0 0 0 8 ## Arr == float_n - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -mean[j] /= float_n; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -stddev[j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 5 -# Number of relations describing the statement: -8 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| j i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## j >= 0 - 1 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 0 ## [1] == j - -WRITE -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 0 ## [1] == j - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == j - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == j - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -j i -# Statement body expression -stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 6.3 Access -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -READ -1 6 1 1 0 2 -# e/i| Arr| j |_PB. _PB.| 1 - 0 -1 0 0 0 8 ## Arr == float_n - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -stddev[j] /= float_n; - - -# =============================================== Statement 7 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 3 ## c3 == 3 - -# ---------------------------------------------- 7.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -stddev[j] = SQRT_FUN(stddev[j]); - - -# =============================================== Statement 8 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 8.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 8.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 4 ## c3 == 4 - -# ---------------------------------------------- 8.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -READ -1 6 1 1 0 2 -# e/i| Arr| j |_PB. _PB.| 1 - 0 -1 0 0 0 11 ## Arr == eps - -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 9 ## Arr == stddev - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 8.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -stddev[j] = stddev[j] <= eps ? SCALAR_VAL(1.0) : stddev[j]; - - -# =============================================== Statement 9 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 9.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 9.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 9.3 Access -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 0 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 9.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -data[i][j] -= mean[j]; - - -# =============================================== Statement 10 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 10.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 10.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 1 ## c5 == 1 - -# ---------------------------------------------- 10.3 Access -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -1 7 1 2 0 2 -# e/i| Arr| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 8 ## Arr == float_n - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 9 ## Arr == stddev - 0 0 -1 0 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 10.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -data[i][j] /= SQRT_FUN(float_n) * stddev[j]; - - -# =============================================== Statement 11 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 11.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| i |_PB. _PB.| 1 - 1 1 0 0 0 ## i >= 0 - 1 -1 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 1 0 -2 ## _PB_M-2 >= 0 - -# ---------------------------------------------- 11.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 1 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 11.3 Access -WRITE -3 8 3 1 0 2 -# e/i| Arr [1] [2]| i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 ## [2] == i - -# ---------------------------------------------- 11.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -i -# Statement body expression -corr[i][i] = SCALAR_VAL(1.0); - - -# =============================================== Statement 12 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 12.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 0 1 0 -2 ## _PB_M-2 >= 0 - 1 -1 1 0 0 -1 ## -i+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 12.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 12.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 12.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -corr[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 13 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 13.1 Domain -DOMAIN -8 7 3 0 0 2 -# e/i| i j k |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 0 0 1 0 -2 ## _PB_M-2 >= 0 - 1 -1 1 0 0 0 -1 ## -i+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 13.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 13.3 Access -WRITE -2 9 2 3 0 2 -# e/i| Arr [1]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 14 ## Arr == scr_data - 0 0 -1 0 0 1 0 0 0 ## [1] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 0 ## [2] == i - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 0 1 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 13.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -scr_data[k] = data[k][i] * data[k][j]; - - -# =============================================== Statement 14 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 14.1 Domain -DOMAIN -8 7 3 0 0 2 -# e/i| i j k |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 0 0 1 0 -2 ## _PB_M-2 >= 0 - 1 -1 1 0 0 0 -1 ## -i+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 14.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 14.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -2 9 2 3 0 2 -# e/i| Arr [1]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 14 ## Arr == scr_data - 0 0 -1 0 0 1 0 0 0 ## [1] == k - -# ---------------------------------------------- 14.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -corr[i][j] += scr_data[k]; - - -# =============================================== Statement 15 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 15.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -2 ## -i+_PB_M-2 >= 0 - 1 0 0 1 0 -2 ## _PB_M-2 >= 0 - 1 -1 1 0 0 -1 ## -i+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 15.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 3 ## c1 == 3 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 2 ## c5 == 2 - -# ---------------------------------------------- 15.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 0 1 0 0 0 ## [1] == j - 0 0 0 -1 1 0 0 0 0 ## [2] == i - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 15.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -corr[j][i] = corr[i][j]; - - -# =============================================== Statement 16 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 16.1 Domain -DOMAIN -0 4 0 0 0 2 - -# ---------------------------------------------- 16.2 Scattering -SCATTERING -1 5 1 0 0 2 -# e/i| c1 |_PB. _PB.| 1 - 0 -1 0 0 4 ## c1 == 4 - -# ---------------------------------------------- 16.3 Access -WRITE -3 7 3 0 0 2 -# e/i| Arr [1] [2]|_PB. _PB.| 1 - 0 -1 0 0 0 0 12 ## Arr == corr - 0 0 -1 0 1 0 -1 ## [1] == _PB_M-1 - 0 0 0 -1 1 0 -1 ## [2] == _PB_M-1 - -# ---------------------------------------------- 16.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -0 -# Statement body expression -corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0); - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -14 -# Mapping array-identifiers/array-names -1 j -2 _PB_M -3 mean -4 SCALAR_VAL -5 i -6 _PB_N -7 data -8 float_n -9 stddev -10 SQRT_FUN -11 eps -12 corr -13 k -14 scr_data - - - -# File name -(null) -# Starting line and column -67 0 -# Ending line and column -106 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_M _PB_N -S1 "mean[j] = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S1): (0, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -mean[j] -Original loop: 0 -> yes - -S2 "mean[j] += data[i][j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -mean[j] -data[i][j] -Write accesses -mean[j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "mean[j] /= float_n;" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S3): (0, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -mean[j] -float_n[0] -Write accesses -mean[j] -Original loop: 0 -> yes - -S4 "stddev[j] = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S4): (1, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -stddev[j] -Original loop: 0 -> yes - -S5 "stddev[j] += (data[i][j] - mean[j]) * (data[i][j] - mean[j]);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S5): (1, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -stddev[j] -data[i][j] -mean[j] -data[i][j] -mean[j] -Write accesses -stddev[j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "stddev[j] /= float_n;" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S6): (1, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -stddev[j] -float_n[0] -Write accesses -stddev[j] -Original loop: 0 -> yes - -S7 "stddev[j] = SQRT_FUN(stddev[j]);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S7): (1, j, 3, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -stddev[j] -Write accesses -stddev[j] -Original loop: 0 -> yes - -S8 "stddev[j] = stddev[j] <= eps ? SCALAR_VAL(1.0) : stddev[j];" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S8): (1, j, 4, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -stddev[j] -eps[0] -stddev[j] -Write accesses -stddev[j] -Original loop: 0 -> yes - -S9 "data[i][j] -= mean[j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S9): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -data[i][j] -mean[j] -Write accesses -data[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S10 "data[i][j] /= SQRT_FUN(float_n) * stddev[j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S10): (2, i, 0, j, 1, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -data[i][j] -float_n[0] -stddev[j] -Write accesses -data[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S11 "corr[i][i] = SCALAR_VAL(1.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 - -T(S11): (3, i, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -corr[i][i] -Original loop: 0 -> yes - -S12 "corr[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 - -T(S12): (3, i, 1, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -corr[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S13 "scr_data[k] = data[k][i] * data[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 8 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S13): (3, i, 1, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -data[k][i] -data[k][j] -Write accesses -scr_data[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S14 "corr[i][j] += scr_data[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 8 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S14): (3, i, 1, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -corr[i][j] -scr_data[k] -Write accesses -corr[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S15 "corr[j][i] = corr[i][j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-2 >= 0 -_PB_M-2 >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 - -T(S15): (3, i, 1, j, 2, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -corr[i][j] -Write accesses -corr[j][i] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S16 "corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0);" -ndims: 0; orig_depth: 0 -Index set -Set #1 -Universal polyhedron -- No constraints (2 dims)! -T(S16): (4, 0, 0, 0, 0, 0, 0) -loop types (loop, scalar, scalar, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -corr[_PB_M-1][_PB_M-1] - ---- Dep 1 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 2 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 3 from S12 to S15; satisfied: 0, sat level: -1; Type: RAW -on variable: corr -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 4 from S4 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 5 from S1 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 6 from S10 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 --j+_PB_M-1 >= 0 -i' >= 0 -j-i'-1 >= 0 - - ---- Dep 7 from S1 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 8 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 9 from S2 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 10 from S2 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 11 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 12 from S9 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 13 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 14 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 15 from S5 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 16 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 17 from S9 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 --j+_PB_M-1 >= 0 -i' >= 0 -j-i'-1 >= 0 - - ---- Dep 18 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 19 from S4 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 20 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 21 from S4 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 22 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 23 from S7 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 24 from S13 to S14; satisfied: 0, sat level: -1; Type: RAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --k+k' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 25 from S13 to S14; satisfied: 0, sat level: -1; Type: RAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 26 from S13 to S14; satisfied: 0, sat level: -1; Type: RAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 27 from S3 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 28 from S1 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 29 from S5 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 30 from S14 to S14; satisfied: 0, sat level: -1; Type: RAW -on variable: corr -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 31 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 32 from S8 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 33 from S6 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 34 from S6 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 35 from S12 to S14; satisfied: 0, sat level: -1; Type: RAW -on variable: corr -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 36 from S9 to S10; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 37 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 38 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 39 from S14 to S15; satisfied: 0, sat level: -1; Type: RAW -on variable: corr -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 40 from S4 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 41 from S6 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 42 from S2 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 43 from S3 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 44 from S10 to S13; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 45 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 46 from S5 to S10; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 47 from S2 to S9; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 48 from S9 to S10; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 49 from S6 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 50 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 51 from S5 to S5; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 52 from S5 to S9; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 53 from S5 to S10; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 54 from S5 to S9; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 55 from S5 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 56 from S5 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 57 from S2 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 58 from S2 to S10; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 59 from S7 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 60 from S14 to S14; satisfied: 0, sat level: -1; Type: WAR -on variable: corr -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 61 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 62 from S14 to S13; satisfied: 0, sat level: -1; Type: WAR -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --k+k' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 63 from S14 to S13; satisfied: 0, sat level: -1; Type: WAR -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 64 from S5 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 65 from S5 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 66 from S14 to S14; satisfied: 0, sat level: -1; Type: WAW -on variable: corr -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 67 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 68 from S13 to S13; satisfied: 0, sat level: -1; Type: WAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --k+k' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 69 from S13 to S13; satisfied: 0, sat level: -1; Type: WAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 70 from S9 to S10; satisfied: 0, sat level: -1; Type: WAW -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 71 from S5 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 72 from S6 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 73 from S5 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 74 from S4 to S5; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 75 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 76 from S4 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 77 from S5 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 78 from S2 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 79 from S4 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 80 from S12 to S14; satisfied: 0, sat level: -1; Type: WAW -on variable: corr -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j-1 >= 0 --j+_PB_M-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 81 from S6 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 82 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 83 from S4 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 84 from S7 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: stddev -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - -T(S1): (0, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (1, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (1, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S7): (1, j, 3, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S8): (1, j, 4, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S9): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S10): (2, i, 0, j, 1, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S11): (3, i, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S12): (3, i, 1, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S13): (3, i, 1, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S14): (3, i, 1, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S15): (3, i, 1, j, 2, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S16): (4, 0, 0, 0, 0, 0, 0) -loop types (loop, scalar, scalar, scalar, scalar, scalar, scalar) - -[pluto] Number of statements: 16 -[pluto] Total number of loops: 25 -[pluto] Number of deps: 84 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 15 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 11 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 10 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 8: Stmt ids: 8 -[pluto] dfs_for_scc: SCC 9: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 10: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 11: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 12: Stmt ids: 9 -[pluto] dfs_for_scc: SCC 13: Stmt ids: 12 13 -[pluto] dfs_for_scc: SCC 14: Stmt ids: 14 - - - SCC 0: size: 1: max stmt dim: 0 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 1 - SCC 3: size: 1: max stmt dim: 1 - SCC 4: size: 1: max stmt dim: 1 - SCC 5: size: 1: max stmt dim: 2 - SCC 6: size: 1: max stmt dim: 1 - SCC 7: size: 1: max stmt dim: 2 - SCC 8: size: 1: max stmt dim: 2 - SCC 9: size: 1: max stmt dim: 1 - SCC 10: size: 1: max stmt dim: 1 - SCC 11: size: 1: max stmt dim: 1 - SCC 12: size: 1: max stmt dim: 2 - SCC 13: size: 2: max stmt dim: 3 - SCC 14: size: 1: max stmt dim: 2 -[pluto] parameter context from domains -Set #1 -[2 dims; 3 constraints] -c_j-1 >= 0 -c_i-2 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied -[pluto] dep_satisfaction_update: dep 78 satisfied -[pluto] dep_satisfaction_update: dep 79 satisfied -[pluto] dep_satisfaction_update: dep 80 satisfied -[pluto] dep_satisfaction_update: dep 82 satisfied -[pluto] dep_satisfaction_update: dep 83 satisfied - 55 dep(s) satisfied -h(S1) = 2, h(S2) = 3, h(S3) = 4, h(S4) = 2, h(S5) = 5, h(S6) = 6, h(S7) = 6, h(S8) = 6, h(S9) = 5, h(S10) = 7, h(S11) = 2, h(S12) = 1, h(S13) = 8, h(S14) = 8, h(S15) = 9, h(S16) = 0 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 1; num_constraints: 15 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 2; num_constraints: 15 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 10 constraints - For dep 3; num_constraints: 12 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 4; num_constraints: 15 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 5; num_constraints: 15 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 6; num_constraints: 12 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 7; num_constraints: 15 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 8; num_constraints: 15 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 9; num_constraints: 17 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 10; num_constraints: 17 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 11; num_constraints: 15 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 12; num_constraints: 12 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 13; num_constraints: 15 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 14; num_constraints: 9 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 15; num_constraints: 17 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 16; num_constraints: 15 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 17; num_constraints: 12 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 18; num_constraints: 15 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 19; num_constraints: 15 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 20; num_constraints: 15 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 21; num_constraints: 15 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 22; num_constraints: 15 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 23; num_constraints: 15 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 9 constraints - For dep 24; num_constraints: 20 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 25; num_constraints: 12 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 26; num_constraints: 10 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 27; num_constraints: 15 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 28; num_constraints: 15 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 29; num_constraints: 9 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 30; num_constraints: 5 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 31; num_constraints: 15 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 32; num_constraints: 15 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 33; num_constraints: 15 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 34; num_constraints: 15 -[pluto] compute permutability constraints: Dep 35 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 35; num_constraints: 12 -[pluto] compute permutability constraints: Dep 36 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 36; num_constraints: 13 -[pluto] compute permutability constraints: Dep 37 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 37; num_constraints: 15 -[pluto] compute permutability constraints: Dep 38 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 38; num_constraints: 15 -[pluto] compute permutability constraints: Dep 39 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 39; num_constraints: 12 -[pluto] compute permutability constraints: Dep 40 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 40; num_constraints: 15 -[pluto] compute permutability constraints: Dep 41 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 41; num_constraints: 15 -[pluto] compute permutability constraints: Dep 42 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 42; num_constraints: 17 -[pluto] compute permutability constraints: Dep 43 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 43; num_constraints: 15 -[pluto] compute permutability constraints: Dep 44 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 44; num_constraints: 12 -[pluto] compute permutability constraints: Dep 45 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 45; num_constraints: 15 -[pluto] compute permutability constraints: Dep 46 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 46; num_constraints: 13 -[pluto] compute permutability constraints: Dep 47 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 47; num_constraints: 13 -[pluto] compute permutability constraints: Dep 48 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 48; num_constraints: 13 -[pluto] compute permutability constraints: Dep 49 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 49; num_constraints: 15 -[pluto] compute permutability constraints: Dep 50 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 50; num_constraints: 15 -[pluto] compute permutability constraints: Dep 51 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 51; num_constraints: 9 -[pluto] compute permutability constraints: Dep 52 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 52; num_constraints: 13 -[pluto] compute permutability constraints: Dep 53 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 53; num_constraints: 13 -[pluto] compute permutability constraints: Dep 54 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 54; num_constraints: 13 -[pluto] compute permutability constraints: Dep 55 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 55; num_constraints: 15 -[pluto] compute permutability constraints: Dep 56 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 56; num_constraints: 15 -[pluto] compute permutability constraints: Dep 57 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 57; num_constraints: 15 -[pluto] compute permutability constraints: Dep 58 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 58; num_constraints: 13 -[pluto] compute permutability constraints: Dep 59 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 59; num_constraints: 15 -[pluto] compute permutability constraints: Dep 60 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 60; num_constraints: 5 -[pluto] compute permutability constraints: Dep 61 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 61; num_constraints: 9 -[pluto] compute permutability constraints: Dep 62 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 9 constraints - For dep 62; num_constraints: 20 -[pluto] compute permutability constraints: Dep 63 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 63; num_constraints: 12 -[pluto] compute permutability constraints: Dep 64 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 64; num_constraints: 15 -[pluto] compute permutability constraints: Dep 65 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 65; num_constraints: 15 -[pluto] compute permutability constraints: Dep 66 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 66; num_constraints: 5 -[pluto] compute permutability constraints: Dep 67 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 67; num_constraints: 15 -[pluto] compute permutability constraints: Dep 68 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_p) from 8 constraints - For dep 68; num_constraints: 12 -[pluto] compute permutability constraints: Dep 69 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 69; num_constraints: 5 -[pluto] compute permutability constraints: Dep 70 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 70; num_constraints: 13 -[pluto] compute permutability constraints: Dep 71 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 71; num_constraints: 15 -[pluto] compute permutability constraints: Dep 72 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 72; num_constraints: 15 -[pluto] compute permutability constraints: Dep 73 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 73; num_constraints: 9 -[pluto] compute permutability constraints: Dep 74 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 74; num_constraints: 15 -[pluto] compute permutability constraints: Dep 75 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 75; num_constraints: 9 -[pluto] compute permutability constraints: Dep 76 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 76; num_constraints: 15 -[pluto] compute permutability constraints: Dep 77 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 77; num_constraints: 15 -[pluto] compute permutability constraints: Dep 78 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 78; num_constraints: 15 -[pluto] compute permutability constraints: Dep 79 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 79; num_constraints: 15 -[pluto] compute permutability constraints: Dep 80 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 80; num_constraints: 12 -[pluto] compute permutability constraints: Dep 81 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 81; num_constraints: 15 -[pluto] compute permutability constraints: Dep 82 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 82; num_constraints: 15 -[pluto] compute permutability constraints: Dep 83 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 83; num_constraints: 15 -[pluto] compute permutability constraints: Dep 84 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 9 constraints - For dep 84; num_constraints: 15 - After dep 8; num_constraints: 15 - After dep 14; num_constraints: 24 - After dep 16; num_constraints: 39 - After dep 22; num_constraints: 54 - After dep 24; num_constraints: 74 - After dep 25; num_constraints: 86 - After dep 26; num_constraints: 96 - After dep 29; num_constraints: 105 - After dep 30; num_constraints: 110 - After dep 34; num_constraints: 125 - After dep 41; num_constraints: 140 - After dep 49; num_constraints: 155 - After dep 50; num_constraints: 170 - After dep 51; num_constraints: 179 - After dep 52; num_constraints: 192 - After dep 54; num_constraints: 205 - After dep 59; num_constraints: 220 - After dep 60; num_constraints: 225 - After dep 61; num_constraints: 234 - After dep 62; num_constraints: 254 - After dep 63; num_constraints: 266 - After dep 66; num_constraints: 271 - After dep 68; num_constraints: 283 - After dep 69; num_constraints: 288 - After dep 72; num_constraints: 303 - After dep 73; num_constraints: 312 - After dep 75; num_constraints: 321 - After dep 81; num_constraints: 336 - After dep 84; num_constraints: 351 - After all dependences: num constraints: 80, num variables: 67 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 15 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_l >= 0 - -Set #1 -[67 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[67 dims; 1 constraints] -c_p >= 0 - -Set #1 -[67 dims; 1 constraints] -c_q >= 0 - -Set #1 -[67 dims; 1 constraints] -c_p+c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_t >= 0 - -Set #1 -[67 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_x >= 0 - -Set #1 -[67 dims; 1 constraints] -c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[67 dims; 1 constraints] -c_| >= 0 - -Set #1 -[67 dims; 1 constraints] -c_} >= 0 - -Set #1 -[67 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_€-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_„-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_ˆ-1 >= 0 - -[pluto] get_stmt_ortho constraints S9 -Ortho constraints for S9; 2 disjuncts -Set #1 -[67 dims; 1 constraints] -c_Œ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_Œ+c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S10 -Ortho constraints for S10; 2 disjuncts -Set #1 -[67 dims; 1 constraints] -c_ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_‘ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_+c_‘-1 >= 0 - -[pluto] get_stmt_ortho constraints S11 -Ortho constraints for S11; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_” >= 0 - -Set #1 -[67 dims; 1 constraints] -c_”-1 >= 0 - -[pluto] get_stmt_ortho constraints S12 -Ortho constraints for S12; 2 disjuncts -Set #1 -[67 dims; 1 constraints] -c_˜ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_™ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_˜+c_™-1 >= 0 - -[pluto] get_stmt_ortho constraints S13 -Ortho constraints for S13; 3 disjuncts -Set #1 -[67 dims; 1 constraints] -c_œ >= 0 - -Set #1 -[67 dims; 1 constraints] --c_ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_ž >= 0 - -Set #1 -[67 dims; 1 constraints] -c_œ-c_+c_ž-1 >= 0 - -[pluto] get_stmt_ortho constraints S14 -Ortho constraints for S14; 3 disjuncts -Set #1 -[67 dims; 1 constraints] -c_  >= 0 - -Set #1 -[67 dims; 1 constraints] --c_¡ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_¢ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_ -c_¡+c_¢-1 >= 0 - -[pluto] get_stmt_ortho constraints S15 -Ortho constraints for S15; 2 disjuncts -Set #1 -[67 dims; 1 constraints] -c_¤ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_¥ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_¤+c_¥-1 >= 0 - -[pluto] get_stmt_ortho constraints S16 -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -Added ortho constraints for S9 -Added ortho constraints for S10 -Added ortho constraints for S11 -Added ortho constraints for S12 -Added ortho constraints for S13 -Added ortho constraints for S14 -Added ortho constraints for S15 -linear independence constraints -[67 dims; 15 constraints] - +c_l -1 >= 0 - +c_p +c_q -1 >= 0 - +c_t -1 >= 0 - +c_x -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ -1 >= 0 - +c_„ -1 >= 0 - +c_ˆ -1 >= 0 - +c_Œ +c_ -1 >= 0 - +c_ +c_‘ -1 >= 0 - +c_” -1 >= 0 - +c_˜ +c_™ -1 >= 0 - +c_œ -c_ +c_ž -1 >= 0 - +c_  -c_¡ +c_¢ -1 >= 0 - +c_¤ +c_¥ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (67 variables, 177 constraints) -[pluto] pluto_constraints_lexmin_isl (44 variables, 177 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = j, h(S5) = j, h(S6) = j, h(S7) = j, h(S8) = j, h(S9) = j, h(S10) = i, h(S11) = i, h(S12) = i, h(S13) = k, h(S14) = k, h(S15) = i, h(S16) = 0 -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 5 -non-zero cst: skipping stmt 6 -non-zero cst: skipping stmt 7 -non-zero cst: skipping stmt 10 -non-zero cst: skipping stmt 15 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_q >= 0 - -Set #1 -[67 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_} >= 0 - -Set #1 -[67 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -[pluto] get_stmt_ortho constraints S8 -[pluto] get_stmt_ortho constraints S9 -Ortho constraints for S9; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_Œ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_Œ-1 >= 0 - -[pluto] get_stmt_ortho constraints S10 -Ortho constraints for S10; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_‘ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_‘-1 >= 0 - -[pluto] get_stmt_ortho constraints S11 -[pluto] get_stmt_ortho constraints S12 -Ortho constraints for S12; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_™ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_™-1 >= 0 - -[pluto] get_stmt_ortho constraints S13 -Ortho constraints for S13; 2 disjuncts -Set #1 -[67 dims; 1 constraints] --c_ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_œ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_œ-c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S14 -Ortho constraints for S14; 2 disjuncts -Set #1 -[67 dims; 1 constraints] --c_¡ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_  >= 0 - -Set #1 -[67 dims; 1 constraints] -c_ -c_¡-1 >= 0 - -[pluto] get_stmt_ortho constraints S15 -Ortho constraints for S15; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_¥ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_¥-1 >= 0 - -[pluto] get_stmt_ortho constraints S16 -Added ortho constraints for S2 -Added ortho constraints for S5 -Added ortho constraints for S9 -Added ortho constraints for S10 -Added ortho constraints for S12 -Added ortho constraints for S13 -Added ortho constraints for S14 -Added ortho constraints for S15 -linear independence constraints -[67 dims; 8 constraints] - +c_q -1 >= 0 - +c_} -1 >= 0 - +c_Œ -1 >= 0 - +c_‘ -1 >= 0 - +c_™ -1 >= 0 - +c_œ -c_ -1 >= 0 - +c_  -c_¡ -1 >= 0 - +c_¥ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (67 variables, 163 constraints) -[pluto] pluto_constraints_lexmin_isl (44 variables, 163 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = 0, h(S4) = 0, h(S5) = i, h(S6) = 0, h(S7) = 0, h(S8) = 0, h(S9) = i, h(S10) = j, h(S11) = 0, h(S12) = j, h(S13) = i, h(S14) = i, h(S15) = j, h(S16) = 0 -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 5 -non-zero cst: skipping stmt 6 -non-zero cst: skipping stmt 7 -non-zero cst: skipping stmt 8 -non-zero cst: skipping stmt 9 -non-zero cst: skipping stmt 10 -non-zero cst: skipping stmt 11 -non-zero cst: skipping stmt 14 -non-zero cst: skipping stmt 15 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -[pluto] get_stmt_ortho constraints S8 -[pluto] get_stmt_ortho constraints S9 -[pluto] get_stmt_ortho constraints S10 -[pluto] get_stmt_ortho constraints S11 -[pluto] get_stmt_ortho constraints S12 -[pluto] get_stmt_ortho constraints S13 -Ortho constraints for S13; 1 disjuncts -Set #1 -[67 dims; 1 constraints] --c_ >= 0 - -Set #1 -[67 dims; 1 constraints] --c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S14 -Ortho constraints for S14; 1 disjuncts -Set #1 -[67 dims; 1 constraints] --c_¡ >= 0 - -Set #1 -[67 dims; 1 constraints] --c_¡-1 >= 0 - -[pluto] get_stmt_ortho constraints S15 -[pluto] get_stmt_ortho constraints S16 -Added ortho constraints for S13 -Added ortho constraints for S14 -linear independence constraints -[67 dims; 2 constraints] - -c_ -1 >= 0 - -c_¡ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (67 variables, 151 constraints) -[pluto] pluto_constraints_lexmin_isl (44 variables, 151 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 2 hyperplane(s) found -T(S1): (2, j, 0) -loop types (scalar, loop, scalar) - -T(S2): (3, j, i) -loop types (scalar, loop, loop) - -T(S3): (4, j, 0) -loop types (scalar, loop, scalar) - -T(S4): (2, j, 0) -loop types (scalar, loop, scalar) - -T(S5): (5, j, i) -loop types (scalar, loop, loop) - -T(S6): (6, j, 0) -loop types (scalar, loop, scalar) - -T(S7): (6, j, 0) -loop types (scalar, loop, scalar) - -T(S8): (6, j, 0) -loop types (scalar, loop, scalar) - -T(S9): (5, j, i) -loop types (scalar, loop, loop) - -T(S10): (7, i, j) -loop types (scalar, loop, loop) - -T(S11): (2, i, 0) -loop types (scalar, loop, scalar) - -T(S12): (1, i, j) -loop types (scalar, loop, loop) - -T(S13): (8, k, i) -loop types (scalar, loop, loop) - -T(S14): (8, k, i) -loop types (scalar, loop, loop) - -T(S15): (9, i, j) -loop types (scalar, loop, loop) - -T(S16): (0, 0, 0) -loop types (scalar, scalar, scalar) - -[pluto] pluto_diamond_tile - After dep 8; num_constraints: 15 - After dep 14; num_constraints: 24 - After dep 16; num_constraints: 39 - After dep 22; num_constraints: 54 - After dep 24; num_constraints: 74 - After dep 25; num_constraints: 86 - After dep 26; num_constraints: 96 - After dep 29; num_constraints: 105 - After dep 30; num_constraints: 110 - After dep 34; num_constraints: 125 - After dep 41; num_constraints: 140 - After dep 49; num_constraints: 155 - After dep 50; num_constraints: 170 - After dep 51; num_constraints: 179 - After dep 52; num_constraints: 192 - After dep 54; num_constraints: 205 - After dep 59; num_constraints: 220 - After dep 60; num_constraints: 225 - After dep 61; num_constraints: 234 - After dep 62; num_constraints: 254 - After dep 63; num_constraints: 266 - After dep 66; num_constraints: 271 - After dep 68; num_constraints: 283 - After dep 69; num_constraints: 288 - After dep 72; num_constraints: 303 - After dep 73; num_constraints: 312 - After dep 75; num_constraints: 321 - After dep 81; num_constraints: 336 - After dep 84; num_constraints: 351 - After all dependences: num constraints: 80, num variables: 67 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied -[pluto] dep_satisfaction_update: dep 78 satisfied -[pluto] dep_satisfaction_update: dep 79 satisfied -[pluto] dep_satisfaction_update: dep 80 satisfied -[pluto] dep_satisfaction_update: dep 82 satisfied -[pluto] dep_satisfaction_update: dep 83 satisfied - 55 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 51 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 1 - After dep 8; num_constraints: 15 - After dep 16; num_constraints: 30 - After dep 22; num_constraints: 45 - After dep 25; num_constraints: 57 - After dep 26; num_constraints: 67 - After dep 34; num_constraints: 82 - After dep 41; num_constraints: 97 - After dep 49; num_constraints: 112 - After dep 50; num_constraints: 127 - After dep 52; num_constraints: 140 - After dep 54; num_constraints: 153 - After dep 59; num_constraints: 168 - After dep 63; num_constraints: 180 - After dep 69; num_constraints: 185 - After dep 72; num_constraints: 200 - After dep 81; num_constraints: 215 - After dep 84; num_constraints: 230 - After all dependences: num constraints: 47, num variables: 67 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 5 -non-zero cst: skipping stmt 6 -non-zero cst: skipping stmt 7 -non-zero cst: skipping stmt 8 -non-zero cst: skipping stmt 9 -non-zero cst: skipping stmt 10 -non-zero cst: skipping stmt 11 -non-zero cst: skipping stmt 14 -non-zero cst: skipping stmt 15 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -[pluto] get_stmt_ortho constraints S8 -[pluto] get_stmt_ortho constraints S9 -[pluto] get_stmt_ortho constraints S10 -[pluto] get_stmt_ortho constraints S11 -[pluto] get_stmt_ortho constraints S12 -[pluto] get_stmt_ortho constraints S13 -Ortho constraints for S13; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S14 -Ortho constraints for S14; 1 disjuncts -Set #1 -[67 dims; 1 constraints] -c_¡ >= 0 - -Set #1 -[67 dims; 1 constraints] -c_¡-1 >= 0 - -[pluto] get_stmt_ortho constraints S15 -[pluto] get_stmt_ortho constraints S16 -Added ortho constraints for S13 -Added ortho constraints for S14 -linear independence constraints -[67 dims; 2 constraints] - +c_ -1 >= 0 - +c_¡ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (67 variables, 118 constraints) -[pluto] pluto_constraints_lexmin_isl (44 variables, 118 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = 0, h(S7) = 0, h(S8) = 0, h(S9) = 0, h(S10) = 0, h(S11) = 0, h(S12) = 0, h(S13) = j, h(S14) = j, h(S15) = 0, h(S16) = 0 -[pluto] pluto_auto_transform: band level 1; 1 hyperplane(s) found -T(S1): (2, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (3, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S3): (4, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (2, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S5): (5, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S6): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S7): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S8): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S9): (5, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S10): (7, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S11): (2, i, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S12): (1, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S13): (8, k, i, j) -loop types (scalar, loop, loop, loop) - -T(S14): (8, k, i, j) -loop types (scalar, loop, loop, loop) - -T(S15): (9, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S16): (0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar) - -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 2 -[pluto] pluto_auto_transform: band level 2; 0 hyperplane(s) found -T(S1): (2, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (3, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S3): (4, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (2, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S5): (5, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S6): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S7): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S8): (6, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S9): (5, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S10): (7, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S11): (2, i, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S12): (1, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S13): (8, k, i, j) -loop types (scalar, loop, loop, loop) - -T(S14): (8, k, i, j) -loop types (scalar, loop, loop, loop) - -T(S15): (9, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S16): (0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 15 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 14 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 12 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 13 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 11 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 10 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 9 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 8: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 9: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 10: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 11: Stmt ids: 8 -[pluto] dfs_for_scc: SCC 12: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 13: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 14: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 15: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 0 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 1 - SCC 6: size: 1: max stmt dim: 2 - SCC 7: size: 1: max stmt dim: 1 - SCC 8: size: 1: max stmt dim: 1 - SCC 9: size: 1: max stmt dim: 1 - SCC 10: size: 1: max stmt dim: 2 - SCC 11: size: 1: max stmt dim: 2 - SCC 12: size: 1: max stmt dim: 1 - SCC 13: size: 1: max stmt dim: 1 - SCC 14: size: 1: max stmt dim: 2 - SCC 15: size: 1: max stmt dim: 1 -[pluto] Cutting between all SCCs -h(S1) = 15, h(S2) = 14, h(S3) = 13, h(S4) = 12, h(S5) = 10, h(S6) = 7, h(S7) = 8, h(S8) = 9, h(S9) = 11, h(S10) = 6, h(S11) = 5, h(S12) = 4, h(S13) = 2, h(S14) = 3, h(S15) = 1, h(S16) = 0 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 49 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 72 satisfied -[pluto] dep_satisfaction_update: dep 81 satisfied -[pluto] dep_satisfaction_update: dep 84 satisfied - 14 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied -[pluto] dep_satisfaction_update: dep 78 satisfied -[pluto] dep_satisfaction_update: dep 79 satisfied -[pluto] dep_satisfaction_update: dep 80 satisfied -[pluto] dep_satisfaction_update: dep 82 satisfied -[pluto] dep_satisfaction_update: dep 83 satisfied - 55 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 51 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 49 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 72 satisfied -[pluto] dep_satisfaction_update: dep 81 satisfied -[pluto] dep_satisfaction_update: dep 84 satisfied - 14 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (2, j, 0, 0, 15) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S2): (3, j, i, 0, 14) -loop types (scalar, loop, loop, scalar, scalar) - -T(S3): (4, j, 0, 0, 13) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S4): (2, j, 0, 0, 12) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S5): (5, j, i, 0, 10) -loop types (scalar, loop, loop, scalar, scalar) - -T(S6): (6, j, 0, 0, 7) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S7): (6, j, 0, 0, 8) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S8): (6, j, 0, 0, 9) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S9): (5, j, i, 0, 11) -loop types (scalar, loop, loop, scalar, scalar) - -T(S10): (7, i, j, 0, 6) -loop types (scalar, loop, loop, scalar, scalar) - -T(S11): (2, i, 0, 0, 5) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S12): (1, i, j, 0, 4) -loop types (scalar, loop, loop, scalar, scalar) - -T(S13): (8, k, i, j, 2) -loop types (scalar, loop, loop, loop, scalar) - -T(S14): (8, k, i, j, 3) -loop types (scalar, loop, loop, loop, scalar) - -T(S15): (9, i, j, 0, 1) -loop types (scalar, loop, loop, scalar, scalar) - -T(S16): (0, 0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar, scalar) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S2, } -(t2, t3, ) with stmts {S5, S9, } -(t2, t3, ) with stmts {S10, } -(t2, t3, ) with stmts {S12, } -(t2, t3, ) with stmts {S13, S14, } -(t2, t3, ) with stmts {S15, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S2, } -(t2, t3, ) with stmts {S5, S9, } -(t2, t3, ) with stmts {S10, } -(t2, t3, ) with stmts {S12, } -(t2, t3, ) with stmts {S15, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied -[pluto] dep_satisfaction_update: dep 78 satisfied -[pluto] dep_satisfaction_update: dep 79 satisfied -[pluto] dep_satisfaction_update: dep 80 satisfied -[pluto] dep_satisfaction_update: dep 82 satisfied -[pluto] dep_satisfaction_update: dep 83 satisfied - 55 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 51 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfactiont5 {loop with stmts: S2, } -t4 {loop with stmts: S2, } -t4 {loop with stmts: S2, } -t5 {loop with stmts: S5, S9, } -t4 {loop with stmts: S5, S9, } -t4 {loop with stmts: S5, S9, } -t5 {loop with stmts: S10, } -t4 {loop with stmts: S10, } -t5 {loop with stmts: S12, } -t4 {loop with stmts: S12, } -t6 {loop with stmts: S13, S14, } -t5 {loop with stmts: S13, S14, } -t4 {loop with stmts: S13, S14, } -t5 {loop with stmts: S15, } -t4 {loop with stmts: S15, } -t3 {loop with stmts: S1, S4, S11, } -t3 {loop with stmts: S3, } -t3 {loop with stmts: S6, S7, S8, } -_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 49 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied -[pluto] dep_satisfaction_update: dep 72 satisfied -[pluto] dep_satisfaction_update: dep 81 satisfied -[pluto] dep_satisfaction_update: dep 84 satisfied - 14 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied - 3 dep(s) satisfied -[Pluto] After tiling: -T(S1): (2, j/32, j, 0, 0, 15, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (3, j/32, i/32, j, i, 0, 14) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S3): (4, j/32, j, 0, 0, 13, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (2, j/32, j, 0, 0, 12, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (5, j/32, i/32, j, i, 0, 10) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S6): (6, j/32, j, 0, 0, 7, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S7): (6, j/32, j, 0, 0, 8, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S8): (6, j/32, j, 0, 0, 9, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S9): (5, j/32, i/32, j, i, 0, 11) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S10): (7, i/32, j/32, i, j, 0, 6) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S11): (2, i/32, i, 0, 0, 5, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S12): (1, i/32, j/32, i, j, 0, 4) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S13): (8, k/32, i/32, k, i, j, 2) -loop types (scalar, loop, loop, loop, loop, loop, scalar) - -T(S14): (8, k/32, i/32, k, i, j, 3) -loop types (scalar, loop, loop, loop, loop, loop, scalar) - -T(S15): (9, i/32, j/32, i, j, 0, 1) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S16): (0, 0, 0, 0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -8 -[pluto-intra-tile-opt] Score for loop 1: 14 -[pluto] intra_tile_opt: loop to be made innermost: Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -88 -[pluto-intra-tile-opt] Score for loop 1: 52 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 18 -[pluto-intra-tile-opt] Score for loop 1: -24 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -14 -[pluto-intra-tile-opt] Score for loop 1: -14 -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Band 2 to be fused with band 0 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: -36 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: 16 -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Band 2 to be fused with band 0 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: 90 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied -[pluto] dep_satisfaction_update: dep 42 satisfied -[pluto] dep_satisfaction_update: dep 43 satisfied -[pluto] dep_satisfaction_update: dep 44 satisfied -[pluto] dep_satisfaction_update: dep 45 satisfied -[pluto] dep_satisfaction_update: dep 46 satisfied -[pluto] dep_satisfaction_update: dep 47 satisfied -[pluto] dep_satisfaction_update: dep 48 satisfied -[pluto] dep_satisfaction_update: dep 53 satisfied -[pluto] dep_satisfaction_update: dep 55 satisfied -[pluto] dep_satisfaction_update: dep 56 satisfied -[pluto] dep_satisfaction_update: dep 57 satisfied -[pluto] dep_satisfaction_update: dep 58 satisfied -[pluto] dep_satisfaction_update: dep 64 satisfied -[pluto] dep_satisfaction_update: dep 65 satisfied -[pluto] dep_satisfaction_update: dep 67 satisfied -[pluto] dep_satisfaction_update: dep 70 satisfied -[pluto] dep_satisfaction_update: dep 71 satisfied -[pluto] dep_satisfaction_update: dep 74 satisfied -[pluto] dep_satisfaction_update: dep 76 satisfied -[pluto] dep_satisfaction_update: dep 77 satisfied -[pluto] dep_satisfaction_update: dep 78 satisfied -[pluto] dep_satisfaction_update: dep 79 satisfied -[pluto] dep_satisfaction_update: dep 80 satisfied -[pluto] dep_satisfaction_update: dep 82 satisfied -[pluto] dep_satisfaction_update: dep 83 satisfied - 55 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 51 satisfied -[pluto] dep_satisfaction_update: dep 60 satisfied -[pluto] dep_satisfaction_update: dep 61 satisfied -[pluto] dep_satisfaction_update: dep 66 satisfied -[pluto] dep_satisfaction_update: dep 73 satisfied -[pluto] dep_satisfaction_update: dep 75 satisfied - 9 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 62 satisfied -[pluto] dep_satisfaction_update: dep 68 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied -[pluto] dep_satisfaction_update: dep 49 satisfied -[pluto] dep_satisfaction_update: dep 50 satisfied -[pluto] dep_satisfaction_update: dep 59 satisfied -[pluto] dep_satisfaction_update: dep 63 satisfied -[pluto] dep_satisfaction_update: dep 69 satisfied -[pluto] dep_satisfaction_update: dep 72 satisfied -[pluto] dep_satisfaction_update: dep 81 satisfied -[pluto] dep_satisfaction_update: dep 84 satisfied - 14 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 52 satisfied -[pluto] dep_satisfaction_update: dep 54 satisfied - 3 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (2, j/32, j, 0, 0, 15, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (3, j/32, i/32, i, j, 0, 14) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S3): (4, j/32, j, 0, 0, 13, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (2, j/32, j, 0, 0, 12, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (5, j/32, i/32, i, j, 0, 10) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S6): (6, j/32, j, 0, 0, 7, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S7): (6, j/32, j, 0, 0, 8, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S8): (6, j/32, j, 0, 0, 9, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S9): (5, j/32, i/32, i, j, 0, 11) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S10): (7, i/32, j/32, i, j, 0, 6) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S11): (2, i/32, i, 0, 0, 5, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S12): (1, i/32, j/32, i, j, 0, 4) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S13): (8, k/32, i/32, k, i, j, 2) -loop types (scalar, loop, loop, loop, loop, loop, scalar) - -T(S14): (8, k/32, i/32, k, i, j, 3) -loop types (scalar, loop, loop, loop, loop, loop, scalar) - -T(S15): (9, i/32, j/32, i, j, 0, 1) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S16): (0, 0, 0, 0, 0, 0, 0) -loop types (scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(3,7), S2(4,7), S3(3,7), S4(3,7), S5(4,7), S6(3,7), S7(3,7), S8(3,7), S9(4,7), S10(4,7), S11(3,7), S12(4,7), S13(4,7), S14(4,7), S15(4,7), S16(1,7), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to correlation.split.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.004505s -[pluto] Auto-transformation time: 0.222183s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.013409s -[pluto] Code generation time: 0.059198s -[pluto] Other/Misc time: 0.428435s -[pluto] Total time: 0.714321s -[pluto] All times: 0.004505 0.222183 0.059198 0.428435 diff --git a/example/polybench/split-and-merge/correlation/correlation.split.pluto.noscr.c b/example/polybench/split-and-merge/correlation/correlation.split.pluto.noscr.c deleted file mode 100644 index d2aec0a2..00000000 --- a/example/polybench/split-and-merge/correlation/correlation.split.pluto.noscr.c +++ /dev/null @@ -1,202 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* correlation.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "correlation.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)N; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = (DATA_TYPE)(i * j) / M + i; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(corr, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("corr"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, corr[i][j]); - } - POLYBENCH_DUMP_END("corr"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_correlation(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(corr, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(stddev, M, m)) { - int i, j, k; - - DATA_TYPE eps = SCALAR_VAL(0.1); - - int t1, t2, t3, t4, t5, t6, t7; - register int lbv, ubv; -corr[_PB_M - 1][_PB_M - 1] = SCALAR_VAL(1.0);; -for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_M-2,32*t2+31),32*t3+30);t4++) { - for (t5=max(32*t3,t4+1);t5<=min(_PB_M-1,32*t3+31);t5++) { - corr[t4][t5] = SCALAR_VAL(0.0);; - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-2,32*t2+31);t3++) { - corr[t3][t3] = SCALAR_VAL(1.0);; - stddev[t3] = SCALAR_VAL(0.0);; - mean[t3] = SCALAR_VAL(0.0);; - } - if (t2 >= ceild(_PB_M-32,32)) { - stddev[(_PB_M-1)] = SCALAR_VAL(0.0);; - mean[(_PB_M-1)] = SCALAR_VAL(0.0);; - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - mean[t5] += data[t4][t5];; - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] /= float_n;; - } -} -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - stddev[t5] += (data[t4][t5] - mean[t5]) * (data[t4][t5] - mean[t5]);; - data[t4][t5] -= mean[t5];; - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - stddev[t3] /= float_n;; - stddev[t3] = SQRT_FUN(stddev[t3]);; - stddev[t3] = stddev[t3] <= eps ? SCALAR_VAL(1.0) : stddev[t3];; - } -} -if (_PB_M >= 1) { - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - data[t4][t5] /= SQRT_FUN(float_n) * stddev[t5];; - } - } - } - } -} -if (_PB_M >= 2) { - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-2,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-2,32*t3+31);t5++) { - for (t6=t5+1;t6<=_PB_M-1;t6++) { - corr[t5][t6] += data[t4][t5] * data[t4][t6];;; - } - } - } - } - } -} -for (t2=0;t2<=floord(_PB_M-2,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(min(_PB_M-2,32*t2+31),32*t3+30);t4++) { - for (t5=max(32*t3,t4+1);t5<=min(_PB_M-1,32*t3+31);t5++) { - corr[t5][t4] = corr[t4][t5];; - } - } - } -} -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(corr, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(stddev, DATA_TYPE, M, m); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_correlation(m, n, float_n, POLYBENCH_ARRAY(data), - POLYBENCH_ARRAY(corr), POLYBENCH_ARRAY(mean), - POLYBENCH_ARRAY(stddev)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(corr))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(corr); - POLYBENCH_FREE_ARRAY(mean); - POLYBENCH_FREE_ARRAY(stddev); - - return 0; -} diff --git a/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.par.log b/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.par.log new file mode 100644 index 00000000..829a8d9e --- /dev/null +++ b/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.par.log @@ -0,0 +1,777 @@ +t6 {loop with stmts: S6, S7, } +t5 {loop with stmts: S6, S7, } +t4 {loop with stmts: S6, S7, } +Pluto schedule elapsed time: 2.499650e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +9 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 8 ## c6 == 8 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S0(i0) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 7 ## c7 == 7 + +# ---------------------------------------------- 2.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 6 ## c6 == 6 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 3.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S2(i0) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 4 ## c1 == 4 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 5 ## c7 == 5 + +# ---------------------------------------------- 4.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S3(i0, i1) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 4 ## c7 == 4 + +# ---------------------------------------------- 5.3 Access +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 ## c2 == fk0+fk1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i2 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c7 == 2 + +# ---------------------------------------------- 6.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S5(i2, i1, i0) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 ## c2 == fk0+fk1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i2 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 3 ## c7 == 3 + +# ---------------------------------------------- 7.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +READ +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S6(i0, i1, i2) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 8.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S7(i0, i1) + + +# =============================================== Statement 9 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 9.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 9.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 ## c7 == 1 + +# ---------------------------------------------- 9.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 9.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S8(i1, i0) + + +# =============================================== Extensions + +# Number of arrays +4 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 + + + +kernel_covariance + + +t1 t2 t3 t4 t5 t6 t7 + + + +# Number of loops +7 +# =========================================== +# Loop number 1 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +1 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +2 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 3 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +3 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 4 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +4 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 5 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +5 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 6 +# Iterator name +t3 +# Number of stmts +2 +# Statement identifiers +6 +7 +# Private variables +t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 7 +# Iterator name +t2 +# Number of stmts +2 +# Statement identifiers +8 +9 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 + + + + +[CLooG] INFO: 2 domains have been blocked. +[CLooG] INFO: 2 dimensions (over 7) are scalar. +if (P0 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=max(32*t3,t4);t5<=min(P0-1,32*t3+31);t5++) { + S4(t4, t5) + } + } + } + } + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S0(t3) + } + } + if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S1(t5, t4) + } + } + } + } + } + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S2(t3) + } + } + lbp=0; + ubp=floord(P1-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + S3(t4, t5) + } + } + } + } + if (P1 >= 1) { + for (t2=0;t2<=floord(P0+P1-2,32);t2++) { + lbp=max(0,ceild(32*t2-P1+1,32)); + ubp=min(floord(P0-1,32),t2); +#pragma omp parallel for private(lbv,ubv,t4,t5,t6,t7) + for (t3=lbp;t3<=ubp;t3++) { + for (t4=32*t2-32*t3;t4<=min(P1-1,32*t2-32*t3+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + for (t6=t5;t6<=P0-1;t6++) { + S5(t4, t6, t5) + S6(t5, t6, t4) + } + } + } + } + } + } + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=max(32*t3,t4);t5<=min(P0-1,32*t3+31);t5++) { + S7(t4, t5) + S8(t5, t4) + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.3182 seconds + + ---Wall Time--- --- Name --- + 0.0003 ( 0.1%) {anonymous}::AnnotateHeuristicPass + 0.0003 ( 0.1%) {anonymous}::ScopStmtSplitPass + 0.0001 ( 0.0%) {anonymous}::UnifyScratchpadPass + 0.0006 ( 0.2%) Canonicalizer + 0.0003 ( 0.1%) 'func' Pipeline + 0.0001 ( 0.0%) {anonymous}::RegToMemPass + 0.0001 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0003 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.3120 ( 98.0%) {anonymous}::PlutoTransformPass + 0.0009 ( 0.3%) Canonicalizer + 0.0024 ( 0.8%) Inliner + 0.0018 ( 0.6%) 'func' Pipeline + 0.0018 ( 0.6%) Canonicalizer + 0.0000 ( 0.0%) (A) CallGraph + 0.0011 ( 0.4%) Canonicalizer + 0.3182 (100.0%) Total diff --git a/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.par.mlir b/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.par.mlir index 86af7e1b..9a01439f 100644 --- a/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.par.mlir +++ b/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.par.mlir @@ -7,6 +7,13 @@ #map6 = affine_map<(d0) -> (82, d0 + 1)> #map7 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> #map8 = affine_map<(d0, d1) -> (3000, d0 * 32 - d1 * 32 + 32)> +#map9 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map10 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map11 = affine_map<()[s0, s1] -> ((s0 + s1 - 2) floordiv 32 + 1)> +#map12 = affine_map<(d0)[s0] -> (0, (d0 * 32 - s0 + 1) ceildiv 32)> +#map13 = affine_map<(d0)[s0] -> ((s0 - 1) floordiv 32 + 1, d0 + 1)> +#map14 = affine_map<(d0, d1)[s0] -> (s0, d0 * 32 - d1 * 32 + 32)> +#set = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -163,61 +170,94 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { + func @kernel_covariance(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg4)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = subf %arg3, %cst : f64 - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %cst_0 = constant 1.000000e+00 : f64 + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.if #set()[%0] { + affine.for %arg7 = 0 to #map9()[%0] { + affine.for %arg8 = #map0(%arg7) to #map9()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map10(%arg7)[%0] { + affine.for %arg10 = max #map3(%arg8, %arg9) to min #map10(%arg8)[%0] { + affine.store %cst, %arg4[%arg9, %arg10] : memref + } + } + } + } {scop.parallelizable} + affine.for %arg7 = 0 to #map9()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map10(%arg7)[%0] { + affine.store %cst, %arg5[%arg8] : memref + } + } {scop.parallelizable} + affine.if #set()[%1] { + affine.for %arg7 = 0 to #map9()[%0] { + affine.for %arg8 = 0 to #map9()[%1] { + affine.for %arg9 = #map1(%arg8) to min #map10(%arg8)[%1] { + affine.for %arg10 = #map1(%arg7) to min #map10(%arg7)[%0] { + %2 = affine.load %arg5[%arg10] : memref + %3 = affine.load %arg3[%arg9, %arg10] : memref + %4 = addf %2, %3 : f64 + affine.store %4, %arg5[%arg10] : memref + } + } + } + } {scop.parallelizable} + } + affine.for %arg7 = 0 to #map9()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map10(%arg7)[%0] { + %2 = affine.load %arg5[%arg8] : memref + %3 = divf %2, %arg2 : f64 + affine.store %3, %arg5[%arg8] : memref + } + } {scop.parallelizable} + affine.for %arg7 = 0 to #map9()[%1] { + affine.for %arg8 = 0 to #map9()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map10(%arg7)[%1] { + affine.for %arg10 = #map1(%arg8) to min #map10(%arg8)[%0] { + %2 = affine.load %arg3[%arg9, %arg10] : memref + %3 = affine.load %arg5[%arg10] : memref + %4 = subf %2, %3 : f64 + affine.store %4, %arg3[%arg9, %arg10] : memref + } + } + } + } {scop.parallelizable} + affine.if #set()[%1] { + affine.for %arg7 = 0 to #map11()[%0, %1] { + affine.for %arg8 = max #map12(%arg7)[%1] to min #map13(%arg7)[%0] { + affine.for %arg9 = #map7(%arg7, %arg8) to min #map14(%arg7, %arg8)[%1] { + affine.for %arg10 = #map1(%arg8) to min #map10(%arg8)[%0] { + affine.for %arg11 = #map0(%arg10) to %0 { + %2 = affine.load %arg3[%arg9, %arg10] : memref + %3 = affine.load %arg3[%arg9, %arg11] : memref + %4 = mulf %2, %3 {scop.splittable = 0 : index} : f64 + affine.store %4, %arg6[%arg9] : memref + %5 = affine.load %arg4[%arg10, %arg11] : memref + %6 = affine.load %arg6[%arg9] : memref + %7 = addf %5, %6 : f64 + affine.store %7, %arg4[%arg10, %arg11] : memref + } + } + } + } {scop.parallelizable} + } + } + affine.for %arg7 = 0 to #map9()[%0] { + affine.for %arg8 = #map0(%arg7) to #map9()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map10(%arg7)[%0] { + affine.for %arg10 = max #map3(%arg8, %arg9) to min #map10(%arg8)[%0] { + %2 = affine.load %arg4[%arg9, %arg10] : memref + %3 = subf %arg2, %cst_0 : f64 + %4 = divf %2, %3 : f64 + affine.store %4, %arg4[%arg9, %arg10] : memref + %5 = affine.load %arg4[%arg9, %arg10] : memref + affine.store %5, %arg4[%arg10, %arg9] : memref + } + } + } + } {scop.parallelizable} + } return } func private @print_array(%arg0: i32, %arg1: memref) { diff --git a/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.seq.log b/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.seq.log new file mode 100644 index 00000000..43b35d96 --- /dev/null +++ b/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.seq.log @@ -0,0 +1,663 @@ +t6 {loop with stmts: S6, S7, } +t5 {loop with stmts: S6, S7, } +t4 {loop with stmts: S6, S7, } +Pluto schedule elapsed time: 2.484641e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +9 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 8 ## c6 == 8 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S0(i0) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 7 ## c7 == 7 + +# ---------------------------------------------- 2.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +7 13 7 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 6 ## c6 == 6 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 3.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S2(i0) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 4 ## c1 == 4 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 5 ## c7 == 5 + +# ---------------------------------------------- 4.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S3(i0, i1) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 4 ## c7 == 4 + +# ---------------------------------------------- 5.3 Access +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i2 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c7 == 2 + +# ---------------------------------------------- 6.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S5(i2, i1, i0) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 0 1 0 0 0 ## -32*fk0+i2 >= 0 + 1 32 0 0 0 -1 0 0 31 ## 32*fk0-i2+31 >= 0 + 1 0 -32 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i2 + 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 3 ## c7 == 3 + +# ---------------------------------------------- 7.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +READ +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 -1 0 0 0 0 0 0 0 0 4 ## Arr == A4 + +WRITE +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S6(i0, i1, i2) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 8.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S7(i0, i1) + + +# =============================================== Statement 9 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 9.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 9.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 ## c7 == 1 + +# ---------------------------------------------- 9.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 9.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S8(i1, i0) + + +# =============================================== Extensions + +# Number of arrays +4 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 +4 A4 + + + +kernel_covariance + + +t1 t2 t3 t4 t5 t6 t7 + + + + +[CLooG] INFO: 2 domains have been blocked. +[CLooG] INFO: 2 dimensions (over 7) are scalar. +if (P0 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=max(32*t3,t4);t5<=min(P0-1,32*t3+31);t5++) { + S4(t4, t5) + } + } + } + } + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S0(t3) + } + } + if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S1(t5, t4) + } + } + } + } + } + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S2(t3) + } + } + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + S3(t4, t5) + } + } + } + } + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + for (t6=t5;t6<=P0-1;t6++) { + S5(t4, t6, t5) + S6(t5, t6, t4) + } + } + } + } + } + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=max(32*t3,t4);t5<=min(P0-1,32*t3+31);t5++) { + S7(t4, t5) + S8(t5, t4) + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.3280 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0006 ( 0.2%) 0.0006 ( 0.2%) {anonymous}::AnnotateHeuristicPass + 0.0007 ( 0.2%) 0.0007 ( 0.2%) {anonymous}::ScopStmtSplitPass + 0.0004 ( 0.1%) 0.0004 ( 0.1%) {anonymous}::UnifyScratchpadPass + 0.0017 ( 0.5%) 0.0017 ( 0.5%) Canonicalizer + 0.0010 ( 0.3%) 0.0004 ( 0.1%) 'func' Pipeline + 0.0006 ( 0.2%) 0.0002 ( 0.1%) {anonymous}::RegToMemPass + 0.0004 ( 0.1%) 0.0002 ( 0.1%) {anonymous}::InsertRedundantLoadPass + 0.0008 ( 0.2%) 0.0008 ( 0.2%) {anonymous}::ExtractScopStmtPass + 0.3191 ( 97.1%) 0.3191 ( 97.3%) {anonymous}::PlutoTransformPass + 0.0008 ( 0.3%) 0.0008 ( 0.3%) Canonicalizer + 0.0023 ( 0.7%) 0.0023 ( 0.7%) Inliner + 0.0018 ( 0.5%) 0.0018 ( 0.5%) 'func' Pipeline + 0.0018 ( 0.5%) 0.0018 ( 0.5%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0011 ( 0.3%) 0.0011 ( 0.3%) Canonicalizer + 0.3286 (100.0%) 0.3280 (100.0%) Total diff --git a/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.seq.mlir b/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.seq.mlir index 768abaae..b7a3b2e7 100644 --- a/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.seq.mlir +++ b/example/polybench/split-and-merge/covariance/covariance.heuristic.polymer.seq.mlir @@ -3,6 +3,9 @@ #map2 = affine_map<(d0) -> (2600, d0 * 32 + 32)> #map3 = affine_map<(d0, d1) -> (d0 * 32, d1)> #map4 = affine_map<(d0) -> (3000, d0 * 32 + 32)> +#map5 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map6 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#set = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -159,61 +162,92 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { + func @kernel_covariance(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg4)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = subf %arg3, %cst : f64 - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %cst_0 = constant 1.000000e+00 : f64 + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.if #set()[%0] { + affine.for %arg7 = 0 to #map5()[%0] { + affine.for %arg8 = #map0(%arg7) to #map5()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map6(%arg7)[%0] { + affine.for %arg10 = max #map3(%arg8, %arg9) to min #map6(%arg8)[%0] { + affine.store %cst, %arg4[%arg9, %arg10] : memref + } + } + } + } + affine.for %arg7 = 0 to #map5()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map6(%arg7)[%0] { + affine.store %cst, %arg5[%arg8] : memref + } + } + affine.if #set()[%1] { + affine.for %arg7 = 0 to #map5()[%0] { + affine.for %arg8 = 0 to #map5()[%1] { + affine.for %arg9 = #map1(%arg8) to min #map6(%arg8)[%1] { + affine.for %arg10 = #map1(%arg7) to min #map6(%arg7)[%0] { + %2 = affine.load %arg5[%arg10] : memref + %3 = affine.load %arg3[%arg9, %arg10] : memref + %4 = addf %2, %3 : f64 + affine.store %4, %arg5[%arg10] : memref + } + } + } + } + } + affine.for %arg7 = 0 to #map5()[%0] { + affine.for %arg8 = #map1(%arg7) to min #map6(%arg7)[%0] { + %2 = affine.load %arg5[%arg8] : memref + %3 = divf %2, %arg2 : f64 + affine.store %3, %arg5[%arg8] : memref + } + } + affine.for %arg7 = 0 to #map5()[%1] { + affine.for %arg8 = 0 to #map5()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map6(%arg7)[%1] { + affine.for %arg10 = #map1(%arg8) to min #map6(%arg8)[%0] { + %2 = affine.load %arg3[%arg9, %arg10] : memref + %3 = affine.load %arg5[%arg10] : memref + %4 = subf %2, %3 : f64 + affine.store %4, %arg3[%arg9, %arg10] : memref + } + } + } + } + affine.for %arg7 = 0 to #map5()[%1] { + affine.for %arg8 = 0 to #map5()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map6(%arg7)[%1] { + affine.for %arg10 = #map1(%arg8) to min #map6(%arg8)[%0] { + affine.for %arg11 = #map0(%arg10) to %0 { + %2 = affine.load %arg3[%arg9, %arg10] : memref + %3 = affine.load %arg3[%arg9, %arg11] : memref + %4 = mulf %2, %3 {scop.splittable = 0 : index} : f64 + affine.store %4, %arg6[%arg9] : memref + %5 = affine.load %arg4[%arg10, %arg11] : memref + %6 = affine.load %arg6[%arg9] : memref + %7 = addf %5, %6 : f64 + affine.store %7, %arg4[%arg10, %arg11] : memref + } + } + } + } + } + affine.for %arg7 = 0 to #map5()[%0] { + affine.for %arg8 = #map0(%arg7) to #map5()[%0] { + affine.for %arg9 = #map1(%arg7) to min #map6(%arg7)[%0] { + affine.for %arg10 = max #map3(%arg8, %arg9) to min #map6(%arg8)[%0] { + %2 = affine.load %arg4[%arg9, %arg10] : memref + %3 = subf %arg2, %cst_0 : f64 + %4 = divf %2, %3 : f64 + affine.store %4, %arg4[%arg9, %arg10] : memref + %5 = affine.load %arg4[%arg9, %arg10] : memref + affine.store %5, %arg4[%arg10, %arg9] : memref + } + } + } + } + } return } func private @print_array(%arg0: i32, %arg1: memref) { diff --git a/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.par.log b/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.par.log new file mode 100644 index 00000000..ce720cd7 --- /dev/null +++ b/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.par.log @@ -0,0 +1,718 @@ +Pluto schedule elapsed time: 2.157220e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +8 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +8 14 8 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 7 ## c6 == 7 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S0(i0) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 6 ## c7 == 6 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 2.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +8 14 8 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 5 ## c6 == 5 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 3.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S2(i0) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ## c1 == 4 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 4 ## c7 == 4 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 4.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S3(i0, i1) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 3 ## c7 == 3 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 5.3 Access +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +12 10 6 0 0 2 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 1 0 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 -1 1 0 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +8 18 8 6 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == fk2 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 2 ## c8 == 2 + +# ---------------------------------------------- 6.3 Access +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S5(i0, i1, i2) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 7.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S6(i0, i1) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 8.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S7(i1, i0) + + +# =============================================== Extensions + +# Number of arrays +3 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 + + + +kernel_covariance + + +t1 t2 t3 t4 t5 t6 t7 t8 + + + +# Number of loops +7 +# =========================================== +# Loop number 1 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +1 +# Private variables +t3,t4,t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +2 +# Private variables +t3,t4,t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 3 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +3 +# Private variables +t3,t4,t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 4 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +4 +# Private variables +t3,t4,t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 5 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +5 +# Private variables +t3,t4,t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 6 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +6 +# Private variables +t3,t4,t5,t6,t7,t8 +# Directive +1 +# =========================================== +# Loop number 7 +# Iterator name +t2 +# Number of stmts +2 +# Statement identifiers +7 +8 +# Private variables +t3,t4,t5,t6,t7,t8 +# Directive +1 + + + + +[CLooG] INFO: 2 dimensions (over 8) are scalar. +if (P0 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=max(32*t3,t4);t5<=min(P0-1,32*t3+31);t5++) { + S4(t4, t5) + } + } + } + } + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S0(t3) + } + } + if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S1(t5, t4) + } + } + } + } + } + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S2(t3) + } + } + lbp=0; + ubp=floord(P1-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + S3(t4, t5) + } + } + } + } + if (P1 >= 1) { + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + for (t7=max(32*t3,t5);t7<=min(P0-1,32*t3+31);t7++) { + S5(t5, t7, t6) + } + } + } + } + } + } + } + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7,t8) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=max(32*t3,t4);t5<=min(P0-1,32*t3+31);t5++) { + S6(t4, t5) + S7(t5, t4) + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.2871 seconds + + ---Wall Time--- --- Name --- + 0.0003 ( 0.1%) 'func' Pipeline + 0.0002 ( 0.1%) {anonymous}::RegToMemPass + 0.0001 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0003 ( 0.1%) {anonymous}::ExtractScopStmtPass + 0.2824 ( 98.3%) {anonymous}::PlutoTransformPass + 0.0008 ( 0.3%) Canonicalizer + 0.0023 ( 0.8%) Inliner + 0.0017 ( 0.6%) 'func' Pipeline + 0.0017 ( 0.6%) Canonicalizer + 0.0000 ( 0.0%) (A) CallGraph + 0.0011 ( 0.4%) Canonicalizer + 0.2871 (100.0%) Total diff --git a/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.par.mlir b/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.par.mlir index 1f730d7c..e7f2548e 100644 --- a/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.par.mlir +++ b/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.par.mlir @@ -3,6 +3,9 @@ #map2 = affine_map<(d0) -> (2600, d0 * 32 + 32)> #map3 = affine_map<(d0, d1) -> (d0 * 32, d1)> #map4 = affine_map<(d0) -> (3000, d0 * 32 + 32)> +#map5 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map6 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#set = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -158,56 +161,94 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { + func @kernel_covariance(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = subf %arg3, %cst : f64 - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %cst_0 = constant 1.000000e+00 : f64 + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.if #set()[%0] { + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map0(%arg6) to #map5()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map6(%arg6)[%0] { + affine.for %arg9 = max #map3(%arg7, %arg8) to min #map6(%arg7)[%0] { + affine.store %cst, %arg4[%arg8, %arg9] : memref + } + } + } + } {scop.parallelizable} + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map1(%arg6) to min #map6(%arg6)[%0] { + affine.store %cst, %arg5[%arg7] : memref + } + } {scop.parallelizable} + affine.if #set()[%1] { + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = 0 to #map5()[%1] { + affine.for %arg8 = #map1(%arg7) to min #map6(%arg7)[%1] { + affine.for %arg9 = #map1(%arg6) to min #map6(%arg6)[%0] { + %2 = affine.load %arg5[%arg9] : memref + %3 = affine.load %arg3[%arg8, %arg9] : memref + %4 = addf %2, %3 : f64 + affine.store %4, %arg5[%arg9] : memref + } + } + } + } {scop.parallelizable} + } + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map1(%arg6) to min #map6(%arg6)[%0] { + %2 = affine.load %arg5[%arg7] : memref + %3 = divf %2, %arg2 : f64 + affine.store %3, %arg5[%arg7] : memref + } + } {scop.parallelizable} + affine.for %arg6 = 0 to #map5()[%1] { + affine.for %arg7 = 0 to #map5()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map6(%arg6)[%1] { + affine.for %arg9 = #map1(%arg7) to min #map6(%arg7)[%0] { + %2 = affine.load %arg3[%arg8, %arg9] : memref + %3 = affine.load %arg5[%arg9] : memref + %4 = subf %2, %3 : f64 + affine.store %4, %arg3[%arg8, %arg9] : memref + } + } + } + } {scop.parallelizable} + affine.if #set()[%1] { + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map0(%arg6) to #map5()[%0] { + affine.for %arg8 = 0 to #map5()[%1] { + affine.for %arg9 = #map1(%arg6) to min #map6(%arg6)[%0] { + affine.for %arg10 = #map1(%arg8) to min #map6(%arg8)[%1] { + affine.for %arg11 = max #map3(%arg7, %arg9) to min #map6(%arg7)[%0] { + %2 = affine.load %arg4[%arg9, %arg11] : memref + %3 = affine.load %arg3[%arg10, %arg9] : memref + %4 = affine.load %arg3[%arg10, %arg11] : memref + %5 = mulf %3, %4 : f64 + %6 = addf %2, %5 : f64 + affine.store %6, %arg4[%arg9, %arg11] : memref + } + } + } + } + } + } {scop.parallelizable} + } + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map0(%arg6) to #map5()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map6(%arg6)[%0] { + affine.for %arg9 = max #map3(%arg7, %arg8) to min #map6(%arg7)[%0] { + %2 = affine.load %arg4[%arg8, %arg9] : memref + %3 = subf %arg2, %cst_0 : f64 + %4 = divf %2, %3 : f64 + affine.store %4, %arg4[%arg8, %arg9] : memref + %5 = affine.load %arg4[%arg8, %arg9] : memref + affine.store %5, %arg4[%arg9, %arg8] : memref + } + } + } + } {scop.parallelizable} + } return } func private @print_array(%arg0: i32, %arg1: memref) { diff --git a/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.seq.log b/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.seq.log new file mode 100644 index 00000000..0a93ef25 --- /dev/null +++ b/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.seq.log @@ -0,0 +1,607 @@ +Pluto schedule elapsed time: 2.160702e-01s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +8 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +8 14 8 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 7 ## c6 == 7 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S0(i0) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c4 == i1 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 6 ## c7 == 6 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 2.3 Access +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 1 0 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +6 6 2 0 0 2 +# e/i| fk0 i0 | P0 P1 | 1 + 1 0 1 0 0 0 ## i0 >= 0 + 1 0 -1 1 0 -1 ## -i0+P0-1 >= 0 + 0 0 0 0 0 0 ## 0 == 0 + 0 0 0 0 0 0 ## 0 == 0 + 1 -32 1 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 -1 0 0 31 ## 32*fk0-i0+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +8 14 8 2 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 i0 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 3 ## c1 == 3 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c3 == i0 + 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c4 == 0 + 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c5 == 0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 5 ## c6 == 5 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 3.3 Access +READ +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]| fk0 i0 | P0 P1 | 1 + 0 0 -1 0 1 0 0 0 ## [1] == i0 + 0 -1 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +fk0 i0 +# Statement body expression +S2(i0) + + +# =============================================== Statement 4 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 4.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 -1 ## -i0+P1-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 4.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ## c1 == 4 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 4 ## c7 == 4 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 4.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 10 2 4 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 ## [1] == i1 + 0 -1 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 4.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S3(i0, i1) + + +# =============================================== Statement 5 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 5.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 5.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 3 ## c7 == 3 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 5.3 Access +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 5.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S4(i0, i1) + + +# =============================================== Statement 6 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 6.1 Domain +DOMAIN +12 10 6 0 0 2 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 1 0 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 -1 1 0 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 0 -1 0 1 0 -1 ## -i1+P0-1 >= 0 + 1 0 0 0 0 0 1 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 1 -1 ## -i2+P1-1 >= 0 + 1 -32 0 0 1 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 0 -1 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 0 -1 0 0 0 31 ## 32*fk1-i1+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 6.2 Scattering +SCATTERING +8 18 8 6 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 ## c1 == 5 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == fk2 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c7 == i1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 2 ## c8 == 2 + +# ---------------------------------------------- 6.3 Access +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 6.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S5(i0, i1, i2) + + +# =============================================== Statement 7 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 7.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 7.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c7 == 0 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 7.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 7.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S6(i0, i1) + + +# =============================================== Statement 8 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 8.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 -1 1 0 0 0 ## -i0+i1 >= 0 + 1 0 0 0 -1 1 0 -1 ## -i1+P0-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 8.2 Scattering +SCATTERING +8 16 8 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 c8 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 6 ## c1 == 6 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 + 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c8 == 0 + +# ---------------------------------------------- 8.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 ## [1] == i1 + 0 0 0 -1 0 0 1 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 8.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S7(i1, i0) + + +# =============================================== Extensions + +# Number of arrays +3 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 + + + +kernel_covariance + + +t1 t2 t3 t4 t5 t6 t7 t8 + + + + +[CLooG] INFO: 2 dimensions (over 8) are scalar. +if (P0 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=max(32*t3,t4);t5<=min(P0-1,32*t3+31);t5++) { + S4(t4, t5) + } + } + } + } + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S0(t3) + } + } + if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t3;t4<=min(P1-1,32*t3+31);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + S1(t5, t4) + } + } + } + } + } + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=32*t2;t3<=min(P0-1,32*t2+31);t3++) { + S2(t3) + } + } + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P1-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P0-1,32*t3+31);t5++) { + S3(t4, t5) + } + } + } + } + if (P1 >= 1) { + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=0;t4<=floord(P1-1,32);t4++) { + for (t5=32*t2;t5<=min(P0-1,32*t2+31);t5++) { + for (t6=32*t4;t6<=min(P1-1,32*t4+31);t6++) { + for (t7=max(32*t3,t5);t7<=min(P0-1,32*t3+31);t7++) { + S5(t5, t7, t6) + } + } + } + } + } + } + } + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=max(32*t3,t4);t5<=min(P0-1,32*t3+31);t5++) { + S6(t4, t5) + S7(t5, t4) + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.3000 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0009 ( 0.3%) 0.0003 ( 0.1%) 'func' Pipeline + 0.0005 ( 0.2%) 0.0002 ( 0.1%) {anonymous}::RegToMemPass + 0.0004 ( 0.1%) 0.0001 ( 0.0%) {anonymous}::InsertRedundantLoadPass + 0.0007 ( 0.2%) 0.0007 ( 0.2%) {anonymous}::ExtractScopStmtPass + 0.2948 ( 98.1%) 0.2948 ( 98.3%) {anonymous}::PlutoTransformPass + 0.0008 ( 0.3%) 0.0008 ( 0.3%) Canonicalizer + 0.0023 ( 0.8%) 0.0023 ( 0.8%) Inliner + 0.0018 ( 0.6%) 0.0018 ( 0.6%) 'func' Pipeline + 0.0018 ( 0.6%) 0.0018 ( 0.6%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0010 ( 0.3%) 0.0010 ( 0.3%) Canonicalizer + 0.3006 (100.0%) 0.3000 (100.0%) Total diff --git a/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.seq.mlir b/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.seq.mlir index 3521b84e..2d061088 100644 --- a/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.seq.mlir +++ b/example/polybench/split-and-merge/covariance/covariance.nosplit.polymer.seq.mlir @@ -3,6 +3,9 @@ #map2 = affine_map<(d0) -> (2600, d0 * 32 + 32)> #map3 = affine_map<(d0, d1) -> (d0 * 32, d1)> #map4 = affine_map<(d0) -> (3000, d0 * 32 + 32)> +#map5 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map6 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#set = affine_set<()[s0] : (s0 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") @@ -158,56 +161,94 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 func private @polybench_timer_start() func private @polybench_timer_stop() func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { + func @kernel_covariance(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = subf %arg3, %cst : f64 - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref + %cst_0 = constant 1.000000e+00 : f64 + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.if #set()[%0] { + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map0(%arg6) to #map5()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map6(%arg6)[%0] { + affine.for %arg9 = max #map3(%arg7, %arg8) to min #map6(%arg7)[%0] { + affine.store %cst, %arg4[%arg8, %arg9] : memref + } + } + } + } + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map1(%arg6) to min #map6(%arg6)[%0] { + affine.store %cst, %arg5[%arg7] : memref + } + } + affine.if #set()[%1] { + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = 0 to #map5()[%1] { + affine.for %arg8 = #map1(%arg7) to min #map6(%arg7)[%1] { + affine.for %arg9 = #map1(%arg6) to min #map6(%arg6)[%0] { + %2 = affine.load %arg5[%arg9] : memref + %3 = affine.load %arg3[%arg8, %arg9] : memref + %4 = addf %2, %3 : f64 + affine.store %4, %arg5[%arg9] : memref + } + } + } + } + } + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map1(%arg6) to min #map6(%arg6)[%0] { + %2 = affine.load %arg5[%arg7] : memref + %3 = divf %2, %arg2 : f64 + affine.store %3, %arg5[%arg7] : memref + } + } + affine.for %arg6 = 0 to #map5()[%1] { + affine.for %arg7 = 0 to #map5()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map6(%arg6)[%1] { + affine.for %arg9 = #map1(%arg7) to min #map6(%arg7)[%0] { + %2 = affine.load %arg3[%arg8, %arg9] : memref + %3 = affine.load %arg5[%arg9] : memref + %4 = subf %2, %3 : f64 + affine.store %4, %arg3[%arg8, %arg9] : memref + } + } + } + } + affine.if #set()[%1] { + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map0(%arg6) to #map5()[%0] { + affine.for %arg8 = 0 to #map5()[%1] { + affine.for %arg9 = #map1(%arg6) to min #map6(%arg6)[%0] { + affine.for %arg10 = #map1(%arg8) to min #map6(%arg8)[%1] { + affine.for %arg11 = max #map3(%arg7, %arg9) to min #map6(%arg7)[%0] { + %2 = affine.load %arg4[%arg9, %arg11] : memref + %3 = affine.load %arg3[%arg10, %arg9] : memref + %4 = affine.load %arg3[%arg10, %arg11] : memref + %5 = mulf %3, %4 : f64 + %6 = addf %2, %5 : f64 + affine.store %6, %arg4[%arg9, %arg11] : memref + } + } + } + } + } + } + } + affine.for %arg6 = 0 to #map5()[%0] { + affine.for %arg7 = #map0(%arg6) to #map5()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map6(%arg6)[%0] { + affine.for %arg9 = max #map3(%arg7, %arg8) to min #map6(%arg7)[%0] { + %2 = affine.load %arg4[%arg8, %arg9] : memref + %3 = subf %arg2, %cst_0 : f64 + %4 = divf %2, %3 : f64 + affine.store %4, %arg4[%arg8, %arg9] : memref + %5 = affine.load %arg4[%arg8, %arg9] : memref + affine.store %5, %arg4[%arg9, %arg8] : memref + } + } + } + } + } return } func private @print_array(%arg0: i32, %arg1: memref) { diff --git a/example/polybench/split-and-merge/covariance/covariance.origin.c b/example/polybench/split-and-merge/covariance/covariance.origin.c deleted file mode 100644 index 9f82ad99..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.origin.c +++ /dev/null @@ -1,120 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* covariance.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "covariance.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)n; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = ((DATA_TYPE)i * j) / M; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(cov, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("cov"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, cov[i][j]); - } - POLYBENCH_DUMP_END("cov"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_covariance(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(cov, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m)) { - int i, j, k; - -#pragma scop - for (j = 0; j < _PB_M; j++) { - mean[j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_N; i++) - mean[j] += data[i][j]; - mean[j] /= float_n; - } - - for (i = 0; i < _PB_N; i++) - for (j = 0; j < _PB_M; j++) - data[i][j] -= mean[j]; - - for (i = 0; i < _PB_M; i++) - for (j = i; j < _PB_M; j++) { - cov[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_N; k++) - cov[i][j] += data[k][i] * data[k][j]; - cov[i][j] /= (float_n - SCALAR_VAL(1.0)); - cov[j][i] = cov[i][j]; - } -#pragma endscop -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(cov, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_covariance(m, n, float_n, POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(cov), - POLYBENCH_ARRAY(mean)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(cov))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(cov); - POLYBENCH_FREE_ARRAY(mean); - - return 0; -} diff --git a/example/polybench/split-and-merge/covariance/covariance.origin.pluto.c b/example/polybench/split-and-merge/covariance/covariance.origin.pluto.c deleted file mode 100644 index d4072183..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.origin.pluto.c +++ /dev/null @@ -1,173 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* covariance.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "covariance.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)n; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = ((DATA_TYPE)i * j) / M; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(cov, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("cov"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, cov[i][j]); - } - POLYBENCH_DUMP_END("cov"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_covariance(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(cov, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m)) { - int i, j, k; - - int t1, t2, t3, t4, t5, t6, t7, t8; - register int lbv, ubv; -if (_PB_M >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_M-1,32*t2+31);t4++) { - for (t5=max(32*t3,t4);t5<=min(_PB_M-1,32*t3+31);t5++) { - cov[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] = SCALAR_VAL(0.0);; - } - } - if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - mean[t5] += data[t4][t5];; - } - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] /= float_n;; - } - } - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - data[t4][t5] -= mean[t5];; - } - } - } - } - if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=0;t4<=floord(_PB_N-1,32);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - for (t6=32*t4;t6<=min(_PB_N-1,32*t4+31);t6++) { - for (t7=max(32*t3,t5);t7<=min(_PB_M-1,32*t3+31);t7++) { - cov[t5][t7] += data[t6][t5] * data[t6][t7];; - } - } - } - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_M-1,32*t2+31);t4++) { - for (t5=max(32*t3,t4);t5<=min(_PB_M-1,32*t3+31);t5++) { - cov[t4][t5] /= (float_n - SCALAR_VAL(1.0));; - cov[t5][t4] = cov[t4][t5];; - } - } - } - } -} -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(cov, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_covariance(m, n, float_n, POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(cov), - POLYBENCH_ARRAY(mean)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(cov))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(cov); - POLYBENCH_FREE_ARRAY(mean); - - return 0; -} diff --git a/example/polybench/split-and-merge/covariance/covariance.origin.pluto.cloog b/example/polybench/split-and-merge/covariance/covariance.origin.pluto.cloog deleted file mode 100644 index bbcc1e03..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.origin.pluto.cloog +++ /dev/null @@ -1,221 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_M _PB_N - -# Number of statements -8 - -# S1 (mean[j] = SCALAR_VAL(0.0);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S2 (mean[j] += data[i][j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S3 (mean[j] /= float_n;) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S4 (data[i][j] -= mean[j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 1 0 -1 -1 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S5 (cov[i][j] = SCALAR_VAL(0.0);) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S6 (cov[i][j] += data[k][i] * data[k][j];) -14 10 -1 0 0 0 1 0 0 0 0 0 -1 0 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 0 1 0 -1 -1 0 0 0 -1 1 0 0 0 0 -1 0 0 0 0 -1 0 1 0 -1 -1 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 0 0 -1 32 0 0 -1 0 0 0 0 31 -1 0 -32 0 0 1 0 0 0 0 -1 0 32 0 0 -1 0 0 0 31 -1 0 0 -32 0 0 1 0 0 0 -1 0 0 32 0 0 -1 0 0 31 -0 0 0 - -# S7 (cov[i][j] /= (float_n - SCALAR_VAL(1.0));) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S8 (cov[j][i] = cov[i][j];) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -8 - -# T(S1) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -7 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S2) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -6 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S3) -8 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -5 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S4) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -4 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S5) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -3 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S6) -8 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -2 - -# T(S7) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S8) -8 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -8 -t1 t2 t3 t4 t5 t6 t7 t8 diff --git a/example/polybench/split-and-merge/covariance/covariance.origin.pluto.log b/example/polybench/split-and-merge/covariance/covariance.origin.pluto.log deleted file mode 100644 index e5778f4f..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.origin.pluto.log +++ /dev/null @@ -1,2651 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_M _PB_N - - -# Number of statements -8 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -mean[j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| j i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## j >= 0 - 1 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -WRITE -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -j i -# Statement body expression -mean[j] += data[i][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 3.3 Access -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -READ -1 6 1 1 0 2 -# e/i| Arr| j |_PB. _PB.| 1 - 0 -1 0 0 0 8 ## Arr == float_n - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -mean[j] /= float_n; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 0 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -data[i][j] -= mean[j]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 ## -i+j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -cov[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -8 7 3 0 0 2 -# e/i| i j k |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 0 ## -i+j >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 6.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 0 ## [2] == i - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 0 1 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -cov[i][j] += data[k][i] * data[k][j]; - - -# =============================================== Statement 7 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 ## -i+j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 2 ## c5 == 2 - -# ---------------------------------------------- 7.3 Access -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -1 7 1 2 0 2 -# e/i| Arr| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 8 ## Arr == float_n - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -cov[i][j] /= (float_n - SCALAR_VAL(1.0)); - - -# =============================================== Statement 8 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 8.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 ## -i+j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 8.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 3 ## c5 == 3 - -# ---------------------------------------------- 8.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 0 1 0 0 0 ## [1] == j - 0 0 0 -1 1 0 0 0 0 ## [2] == i - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 8.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -cov[j][i] = cov[i][j]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -10 -# Mapping array-identifiers/array-names -1 j -2 _PB_M -3 mean -4 SCALAR_VAL -5 i -6 _PB_N -7 data -8 float_n -9 cov -10 k - - - -# File name -(null) -# Starting line and column -63 0 -# Ending line and column -82 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_M _PB_N -S1 "mean[j] = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S1): (0, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -mean[j] -Original loop: 0 -> yes - -S2 "mean[j] += data[i][j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -mean[j] -data[i][j] -Write accesses -mean[j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "mean[j] /= float_n;" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S3): (0, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -mean[j] -float_n[0] -Write accesses -mean[j] -Original loop: 0 -> yes - -S4 "data[i][j] -= mean[j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -data[i][j] -mean[j] -Write accesses -data[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "cov[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - -T(S5): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -cov[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "cov[i][j] += data[k][i] * data[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 8 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S6): (2, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -cov[i][j] -data[k][i] -data[k][j] -Write accesses -cov[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S7 "cov[i][j] /= (float_n - SCALAR_VAL(1.0));" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - -T(S7): (2, i, 0, j, 2, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -cov[i][j] -float_n[0] -Write accesses -cov[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S8 "cov[j][i] = cov[i][j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - -T(S8): (2, i, 0, j, 3, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -cov[i][j] -Write accesses -cov[j][i] -Original loop: 0 -> yes -Original loop: 1 -> yes - ---- Dep 1 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 2 from S6 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 3 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 4 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 5 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+j' >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 6 from S2 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 7 from S1 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 8 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 9 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 10 from S6 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 11 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 --j+_PB_M-1 >= 0 -i' >= 0 -j-i' >= 0 - - ---- Dep 12 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 13 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 14 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 15 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 16 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 17 from S6 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: cov -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 18 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 19 from S2 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 20 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 21 from S2 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 22 from S6 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 23 from S7 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 24 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 25 from S6 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 26 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 27 from S5 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 28 from S2 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 29 from S6 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 30 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 31 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 32 from S7 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 33 from S5 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 34 from S5 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 - - -T(S1): (0, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (2, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S7): (2, i, 0, j, 2, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S8): (2, i, 0, j, 3, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -[pluto] Number of statements: 8 -[pluto] Total number of loops: 15 -[pluto] Number of deps: 34 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 1 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 1 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 3 - SCC 6: size: 1: max stmt dim: 2 - SCC 7: size: 1: max stmt dim: 2 -[pluto] parameter context from domains -Set #1 -[2 dims; 2 constraints] -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 25 dep(s) satisfied -h(S1) = 1, h(S2) = 2, h(S3) = 3, h(S4) = 4, h(S5) = 0, h(S6) = 5, h(S7) = 6, h(S8) = 6 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 1; num_constraints: 12 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 7 constraints - For dep 2; num_constraints: 5 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 7 constraints - For dep 3; num_constraints: 9 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 4; num_constraints: 12 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 5; num_constraints: 12 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 9 constraints - For dep 6; num_constraints: 16 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 7; num_constraints: 14 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 8; num_constraints: 12 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 9; num_constraints: 12 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 10; num_constraints: 12 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 11; num_constraints: 12 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 12; num_constraints: 12 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 13; num_constraints: 14 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 9 constraints - For dep 14; num_constraints: 14 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 15; num_constraints: 14 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 16; num_constraints: 14 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 7 constraints - For dep 17; num_constraints: 5 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 18; num_constraints: 10 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 10 constraints - For dep 19; num_constraints: 12 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 7 constraints - For dep 20; num_constraints: 9 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 21; num_constraints: 14 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 22; num_constraints: 12 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 23; num_constraints: 10 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 7 constraints - For dep 24; num_constraints: 5 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 25; num_constraints: 10 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 26; num_constraints: 14 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 27; num_constraints: 12 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 28; num_constraints: 14 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 29; num_constraints: 12 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 9 constraints - For dep 30; num_constraints: 14 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 7 constraints - For dep 31; num_constraints: 9 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 32; num_constraints: 10 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 33; num_constraints: 12 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 34; num_constraints: 10 - After dep 2; num_constraints: 5 - After dep 3; num_constraints: 14 - After dep 9; num_constraints: 26 - After dep 17; num_constraints: 31 - After dep 20; num_constraints: 40 - After dep 23; num_constraints: 50 - After dep 24; num_constraints: 55 - After dep 31; num_constraints: 64 - After dep 32; num_constraints: 74 - After all dependences: num constraints: 14, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_l >= 0 - -Set #1 -[35 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_p >= 0 - -Set #1 -[35 dims; 1 constraints] -c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_p+c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_t >= 0 - -Set #1 -[35 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_x >= 0 - -Set #1 -[35 dims; 1 constraints] -c_y >= 0 - -Set #1 -[35 dims; 1 constraints] -c_x+c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_| >= 0 - -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_€+c_+c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] -c_„+c_…-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_ˆ+c_‰-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 8 constraints] - +c_l -1 >= 0 - +c_p +c_q -1 >= 0 - +c_t -1 >= 0 - +c_x +c_y -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ +c_ +c_‚ -1 >= 0 - +c_„ +c_… -1 >= 0 - +c_ˆ +c_‰ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 65 constraints) -[pluto] pluto_constraints_lexmin_isl (26 variables, 65 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = i, h(S5) = i, h(S6) = i, h(S7) = i, h(S8) = i -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_y >= 0 - -Set #1 -[35 dims; 1 constraints] -c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_+c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - +c_q -1 >= 0 - +c_y -1 >= 0 - +c_} -1 >= 0 - +c_ +c_‚ -1 >= 0 - +c_… -1 >= 0 - +c_‰ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 61 constraints) -[pluto] pluto_constraints_lexmin_isl (26 variables, 61 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = 0, h(S4) = j, h(S5) = j, h(S6) = j, h(S7) = j, h(S8) = j -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 6 -non-zero cst: skipping stmt 7 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -[pluto] get_stmt_ortho constraints S8 -Added ortho constraints for S6 -linear independence constraints -[35 dims; 1 constraints] - +c_‚ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (35 variables, 51 constraints) -[pluto] pluto_constraints_lexmin_isl (26 variables, 51 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = k, h(S7) = 0, h(S8) = 0 -[pluto] pluto_auto_transform: band level 0; 3 hyperplane(s) found -T(S1): (1, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (2, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S3): (3, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (4, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S5): (0, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S6): (5, i, j, k) -loop types (scalar, loop, loop, loop) - -T(S7): (6, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S8): (6, i, j, 0) -loop types (scalar, loop, loop, scalar) - -[pluto] pluto_diamond_tile - After dep 2; num_constraints: 5 - After dep 3; num_constraints: 14 - After dep 9; num_constraints: 26 - After dep 17; num_constraints: 31 - After dep 20; num_constraints: 40 - After dep 23; num_constraints: 50 - After dep 24; num_constraints: 55 - After dep 31; num_constraints: 64 - After dep 32; num_constraints: 74 - After all dependences: num constraints: 14, num variables: 35 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 25 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 1 -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (1, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (2, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S3): (3, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (4, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S5): (0, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S6): (5, i, j, k) -loop types (scalar, loop, loop, loop) - -T(S7): (6, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S8): (6, i, j, 0) -loop types (scalar, loop, loop, scalar) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 1 - SCC 6: size: 1: max stmt dim: 2 - SCC 7: size: 1: max stmt dim: 1 -[pluto] Cutting between all SCCs -h(S1) = 7, h(S2) = 6, h(S3) = 5, h(S4) = 4, h(S5) = 3, h(S6) = 2, h(S7) = 0, h(S8) = 1 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 25 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (1, j, 0, 0, 7) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S2): (2, j, i, 0, 6) -loop types (scalar, loop, loop, scalar, scalar) - -T(S3): (3, j, 0, 0, 5) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S4): (4, i, j, 0, 4) -loop types (scalar, loop, loop, scalar, scalar) - -T(S5): (0, i, j, 0, 3) -loop types (scalar, loop, loop, scalar, scalar) - -T(S6): (5, i, j, k, 2) -loop types (scalar, loop, loop, loop, scalar) - -T(S7): (6, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S8): (6, i, j, 0, 1) -loop types (scalar, lot5 {loop with stmts: S2, } -t4 {loop with stmts: S2, } -t4 {loop with stmts: S2, } -t5 {loop with stmts: S4, } -t4 {loop with stmts: S4, } -t5 {loop with stmts: S5, } -t4 {loop with stmts: S5, } -t7 {loop with stmts: S6, } -t6 {loop with stmts: S6, } -op, loop, scalar, scalar) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S2, } -(t2, t3, ) with stmts {S4, } -(t2, t3, ) with stmts {S5, } -(t2, t3, t4, ) with stmts {S6, } -(t2, t3, ) with stmts {S7, S8, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S2, } -(t2, t3, ) with stmts {S4, } -(t2, t3, ) with stmts {S5, } -(t2, t3, t4, ) with stmts {S6, } -(t2, t3, ) with stmts {S7, S8, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 25 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[Pluto] After tiling: -T(S1): (1, j/32, j, 0, 0, 7, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (2, j/32, i/32, j, i, 0, 6, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S3): (3, j/32, j, 0, 0, 5, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (4, i/32, j/32, i, j, 0, 4, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S5): (0, i/32, j/32, i, j, 0, 3, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S6): (5, i/32, j/32, k/32, i, j, k, 2) -loop types (scalar, loop, loop, loop, loop, loop, loop, scalar) - -T(S7): (6, i/32, j/32, i, j, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S8): (6, i/32, j/32, i, j, 0, 1, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -8 -[pluto-intra-tile-opt] Score for loop 1: 14 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 14 -[pluto-intra-tile-opt] Score for loop 1: -28 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: -24 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto-intra-tile-opt] Score fort5 {loop with stmts: S6, } -t6 {loop with stmts: S6, } -t5 {loop with stmts: S7, S8, } -t4 {loop with stmts: S7, S8, } -t3 {loop with stmts: S1, } -t3 {loop with stmts: S3, } - loop 2: -26 -[pluto] intra_tile_opt: loop to be made innermost: Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -12 -[pluto-intra-tile-opt] Score for loop 1: -84 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: 10 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: 16 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 25 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (1, j/32, j, 0, 0, 7, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (2, j/32, i/32, i, j, 0, 6, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S3): (3, j/32, j, 0, 0, 5, 0, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (4, i/32, j/32, i, j, 0, 4, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S5): (0, i/32, j/32, i, j, 0, 3, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S6): (5, i/32, j/32, k/32, i, k, j, 2) -loop types (scalar, loop, loop, loop, loop, loop, loop, scalar) - -T(S7): (6, i/32, j/32, i, j, 0, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -T(S8): (6, i/32, j/32, i, j, 0, 1, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(3,8), S2(4,8), S3(3,8), S4(4,8), S5(4,8), S6(5,8), S7(4,8), S8(4,8), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to covariance.origin.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.004026s -[pluto] Auto-transformation time: 0.039582s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.003621s -[pluto] Code generation time: 0.050214s -[pluto] Other/Misc time: 0.259008s -[pluto] Total time: 0.352830s -[pluto] All times: 0.004026 0.039582 0.050214 0.259008 diff --git a/example/polybench/split-and-merge/covariance/covariance.origin.polymer.parallel.mlir b/example/polybench/split-and-merge/covariance/covariance.origin.polymer.parallel.mlir deleted file mode 100644 index b86bf49c..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.origin.polymer.parallel.mlir +++ /dev/null @@ -1,280 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1)> -#map4 = affine_map<(d0) -> (3000, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("cov\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %c3000 = constant 3000 : index - %c2600 = constant 2600 : index - %c0 = constant 0 : index - %c1 = constant 1 : index - %cst = constant 0.000000e+00 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = sitofp %c3000_i32 : i32 to f64 - affine.store %4, %0[0] : memref<1xf64> - %5 = scf.for %arg2 = %c0 to %c3000 step %c1 iter_args(%arg3 = %c0_i32) -> (i32) { - %10 = index_cast %arg3 : i32 to index - %11 = scf.for %arg4 = %c0 to %c2600 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %13 = index_cast %arg5 : i32 to index - %14 = sitofp %arg3 : i32 to f64 - %15 = sitofp %arg5 : i32 to f64 - %16 = mulf %14, %15 : f64 - %17 = sitofp %c2600_i32 : i32 to f64 - %18 = divf %16, %17 : f64 - memref.store %18, %1[%10, %13] : memref<3000x2600xf64> - %19 = addi %arg5, %c1_i32 : i32 - scf.yield %19 : i32 - } - %12 = addi %arg3, %c1_i32 : i32 - scf.yield %12 : i32 - } - call @polybench_timer_start() : () -> () - %6 = affine.load %0[0] : memref<1xf64> - %7 = memref.cast %2 : memref<2600x2600xf64> to memref - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map2(%arg3) { - affine.store %cst, %2[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map2(%arg2) { - affine.store %cst, %3[%arg3] : memref<2600xf64> - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = 0 to 94 { - affine.for %arg4 = #map1(%arg3) to min #map4(%arg3) { - affine.for %arg5 = #map1(%arg2) to min #map2(%arg2) { - %10 = affine.load %3[%arg5] : memref<2600xf64> - %11 = affine.load %1[%arg4, %arg5] : memref<3000x2600xf64> - %12 = addf %10, %11 : f64 - affine.store %12, %3[%arg5] : memref<2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map2(%arg2) { - %10 = affine.load %3[%arg3] : memref<2600xf64> - %11 = divf %10, %6 : f64 - affine.store %11, %3[%arg3] : memref<2600xf64> - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 94 { - affine.for %arg3 = 0 to 82 { - affine.for %arg4 = #map1(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map1(%arg3) to min #map2(%arg3) { - %10 = affine.load %1[%arg4, %arg5] : memref<3000x2600xf64> - %11 = affine.load %3[%arg5] : memref<2600xf64> - %12 = subf %10, %11 : f64 - affine.store %12, %1[%arg4, %arg5] : memref<3000x2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = 0 to 94 { - affine.for %arg5 = #map1(%arg2) to min #map2(%arg2) { - affine.for %arg6 = #map1(%arg4) to min #map4(%arg4) { - affine.for %arg7 = max #map3(%arg3, %arg5) to min #map2(%arg3) { - %10 = affine.load %2[%arg5, %arg7] : memref<2600x2600xf64> - %11 = affine.load %1[%arg6, %arg5] : memref<3000x2600xf64> - %12 = affine.load %1[%arg6, %arg7] : memref<3000x2600xf64> - %13 = mulf %11, %12 {scop.splittable = 0 : index} : f64 - %14 = addf %10, %13 : f64 - affine.store %14, %2[%arg5, %arg7] : memref<2600x2600xf64> - } - } - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map2(%arg3) { - %10 = affine.load %2[%arg4, %arg5] : memref<2600x2600xf64> - %11 = subf %6, %cst_0 : f64 - %12 = divf %10, %11 : f64 - affine.store %12, %2[%arg4, %arg5] : memref<2600x2600xf64> - %13 = affine.load %2[%arg4, %arg5] : memref<2600x2600xf64> - affine.store %13, %2[%arg5, %arg4] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %8 = cmpi sgt, %arg0, %c42_i32 : i32 - %9 = scf.if %8 -> (i1) { - %10 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %11 = llvm.load %10 : !llvm.ptr> - %12 = llvm.mlir.addressof @str0 : !llvm.ptr> - %13 = llvm.getelementptr %12[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %14 = llvm.call @strcmp(%11, %13) : (!llvm.ptr, !llvm.ptr) -> i32 - %15 = trunci %14 : i32 to i1 - %16 = xor %15, %true : i1 - scf.yield %16 : i1 - } else { - scf.yield %false : i1 - } - scf.if %9 { - call @print_array(%c2600_i32, %7) : (i32, memref) -> () - } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = subf %arg3, %cst : f64 - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/covariance/covariance.origin.polymer.seq.mlir b/example/polybench/split-and-merge/covariance/covariance.origin.polymer.seq.mlir deleted file mode 100644 index 7025a2b2..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.origin.polymer.seq.mlir +++ /dev/null @@ -1,306 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map2 = affine_map<(d0) -> (d0 * 32)> -#map3 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#map4 = affine_map<(d0, d1) -> (d0 * 32, d1)> -#set = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("cov\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.cast %0 : memref<1xf64> to memref - %5 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %4, %5) : (i32, i32, memref, memref) -> () - call @polybench_timer_start() : () -> () - %6 = affine.load %0[0] : memref<1xf64> - %7 = memref.cast %2 : memref<2600x2600xf64> to memref - %8 = memref.cast %3 : memref<2600xf64> to memref - call @kernel_covariance_opt(%c2600_i32, %c3000_i32, %6, %5, %7, %8) : (i32, i32, f64, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %9 = cmpi sgt, %arg0, %c42_i32 : i32 - %10 = scf.if %9 -> (i1) { - %11 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %12 = llvm.load %11 : !llvm.ptr> - %13 = llvm.mlir.addressof @str0 : !llvm.ptr> - %14 = llvm.getelementptr %13[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %15 = llvm.call @strcmp(%12, %14) : (!llvm.ptr, !llvm.ptr) -> i32 - %16 = trunci %15 : i32 to i1 - %17 = xor %16, %true : i1 - scf.yield %17 : i1 - } else { - scf.yield %false : i1 - } - scf.if %10 { - call @print_array(%c2600_i32, %7) : (i32, memref) -> () - } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %c3000 = constant 3000 : index - %c2600 = constant 2600 : index - %c0 = constant 0 : index - %c1 = constant 1 : index - %0 = sitofp %arg1 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.for %arg4 = %c0 to %c3000 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %2 = index_cast %arg5 : i32 to index - %3 = scf.for %arg6 = %c0 to %c2600 step %c1 iter_args(%arg7 = %c0_i32) -> (i32) { - %5 = index_cast %arg7 : i32 to index - %6 = sitofp %arg5 : i32 to f64 - %7 = sitofp %arg7 : i32 to f64 - %8 = mulf %6, %7 : f64 - %9 = sitofp %c2600_i32 : i32 to f64 - %10 = divf %8, %9 : f64 - memref.store %10, %arg3[%2, %5] : memref - %11 = addi %arg7, %c1_i32 : i32 - scf.yield %11 : i32 - } - %4 = addi %arg5, %c1_i32 : i32 - scf.yield %4 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_covariance(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg6 = 0 to %1 { - call @S0(%arg5, %arg6) : (memref, index) -> () - affine.for %arg7 = 0 to %0 { - call @S1(%arg5, %arg6, %arg3, %arg7) : (memref, index, memref, index) -> () - } - call @S2(%arg5, %arg6, %arg2) : (memref, index, f64) -> () - } - affine.for %arg6 = 0 to %0 { - affine.for %arg7 = 0 to %1 { - call @S3(%arg3, %arg6, %arg7, %arg5) : (memref, index, index, memref) -> () - } - } - affine.for %arg6 = 0 to %1 { - affine.for %arg7 = #map0(%arg6) to %1 { - call @S4(%arg4, %arg6, %arg7) : (memref, index, index) -> () - affine.for %arg8 = 0 to %0 { - call @S5(%arg4, %arg6, %arg7, %arg3, %arg8) : (memref, index, index, memref, index) -> () - } - call @S6(%arg4, %arg6, %arg7, %arg2) : (memref, index, index, f64) -> () - call @S7(%arg4, %arg7, %arg6) : (memref, index, index) -> () - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 0 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = subf %arg3, %cst : f64 - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @kernel_covariance_opt(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { - %0 = index_cast %arg0 : i32 to index - %1 = index_cast %arg1 : i32 to index - affine.if #set()[%0, %1] { - affine.for %arg6 = 0 to #map1()[%0] { - affine.for %arg7 = #map0(%arg6) to #map1()[%0] { - affine.for %arg8 = #map2(%arg6) to min #map3(%arg6)[%0] { - affine.for %arg9 = max #map4(%arg7, %arg8) to min #map3(%arg7)[%0] { - call @S4(%arg4, %arg8, %arg9) : (memref, index, index) -> () - } - } - } - } - affine.for %arg6 = 0 to #map1()[%0] { - affine.for %arg7 = #map2(%arg6) to min #map3(%arg6)[%0] { - call @S0(%arg5, %arg7) : (memref, index) -> () - } - } - affine.for %arg6 = 0 to #map1()[%0] { - affine.for %arg7 = 0 to #map1()[%1] { - affine.for %arg8 = #map2(%arg7) to min #map3(%arg7)[%1] { - affine.for %arg9 = #map2(%arg6) to min #map3(%arg6)[%0] { - call @S1(%arg5, %arg9, %arg3, %arg8) : (memref, index, memref, index) -> () - } - } - } - } - affine.for %arg6 = 0 to #map1()[%0] { - affine.for %arg7 = #map2(%arg6) to min #map3(%arg6)[%0] { - call @S2(%arg5, %arg7, %arg2) : (memref, index, f64) -> () - } - } - affine.for %arg6 = 0 to #map1()[%1] { - affine.for %arg7 = 0 to #map1()[%0] { - affine.for %arg8 = #map2(%arg6) to min #map3(%arg6)[%1] { - affine.for %arg9 = #map2(%arg7) to min #map3(%arg7)[%0] { - call @S3(%arg3, %arg8, %arg9, %arg5) : (memref, index, index, memref) -> () - } - } - } - } - affine.for %arg6 = 0 to #map1()[%0] { - affine.for %arg7 = #map0(%arg6) to #map1()[%0] { - affine.for %arg8 = 0 to #map1()[%1] { - affine.for %arg9 = #map2(%arg6) to min #map3(%arg6)[%0] { - affine.for %arg10 = #map2(%arg8) to min #map3(%arg8)[%1] { - affine.for %arg11 = max #map4(%arg7, %arg9) to min #map3(%arg7)[%0] { - call @S5(%arg4, %arg9, %arg11, %arg3, %arg10) : (memref, index, index, memref, index) -> () - } - } - } - } - } - } - affine.for %arg6 = 0 to #map1()[%0] { - affine.for %arg7 = #map0(%arg6) to #map1()[%0] { - affine.for %arg8 = #map2(%arg6) to min #map3(%arg6)[%0] { - affine.for %arg9 = max #map4(%arg7, %arg8) to min #map3(%arg7)[%0] { - call @S6(%arg4, %arg8, %arg9, %arg2) : (memref, index, index, f64) -> () - call @S7(%arg4, %arg9, %arg8) : (memref, index, index) -> () - } - } - } - } - } - return - } - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/covariance/covariance.split-0.polymer.par.mlir b/example/polybench/split-and-merge/covariance/covariance.split-0.polymer.par.mlir deleted file mode 100644 index 86af7e1b..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.split-0.polymer.par.mlir +++ /dev/null @@ -1,290 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1)> -#map4 = affine_map<(d0) -> (3000, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (0, (d0 * 32 - 2999) ceildiv 32)> -#map6 = affine_map<(d0) -> (82, d0 + 1)> -#map7 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> -#map8 = affine_map<(d0, d1) -> (3000, d0 * 32 - d1 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("cov\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %c3000 = constant 3000 : index - %c2600 = constant 2600 : index - %c0 = constant 0 : index - %c1 = constant 1 : index - %cst = constant 0.000000e+00 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = memref.alloca() : memref<3000xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<3000x2600xf64> - %3 = memref.alloc() : memref<2600x2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = sitofp %c3000_i32 : i32 to f64 - affine.store %5, %1[0] : memref<1xf64> - %6 = scf.for %arg2 = %c0 to %c3000 step %c1 iter_args(%arg3 = %c0_i32) -> (i32) { - %11 = index_cast %arg3 : i32 to index - %12 = scf.for %arg4 = %c0 to %c2600 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %14 = index_cast %arg5 : i32 to index - %15 = sitofp %arg3 : i32 to f64 - %16 = sitofp %arg5 : i32 to f64 - %17 = mulf %15, %16 : f64 - %18 = sitofp %c2600_i32 : i32 to f64 - %19 = divf %17, %18 : f64 - memref.store %19, %2[%11, %14] : memref<3000x2600xf64> - %20 = addi %arg5, %c1_i32 : i32 - scf.yield %20 : i32 - } - %13 = addi %arg3, %c1_i32 : i32 - scf.yield %13 : i32 - } - call @polybench_timer_start() : () -> () - %7 = affine.load %1[0] : memref<1xf64> - %8 = memref.cast %3 : memref<2600x2600xf64> to memref - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map2(%arg3) { - affine.store %cst, %3[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map2(%arg2) { - affine.store %cst, %4[%arg3] : memref<2600xf64> - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = 0 to 94 { - affine.for %arg4 = #map1(%arg3) to min #map4(%arg3) { - affine.for %arg5 = #map1(%arg2) to min #map2(%arg2) { - %11 = affine.load %4[%arg5] : memref<2600xf64> - %12 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %13 = addf %11, %12 : f64 - affine.store %13, %4[%arg5] : memref<2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map2(%arg2) { - %11 = affine.load %4[%arg3] : memref<2600xf64> - %12 = divf %11, %7 : f64 - affine.store %12, %4[%arg3] : memref<2600xf64> - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 94 { - affine.for %arg3 = 0 to 82 { - affine.for %arg4 = #map1(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map1(%arg3) to min #map2(%arg3) { - %11 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %12 = affine.load %4[%arg5] : memref<2600xf64> - %13 = subf %11, %12 : f64 - affine.store %13, %2[%arg4, %arg5] : memref<3000x2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 175 { - affine.for %arg3 = max #map5(%arg2) to min #map6(%arg2) { - affine.for %arg4 = #map7(%arg2, %arg3) to min #map8(%arg2, %arg3) { - affine.for %arg5 = #map1(%arg3) to min #map2(%arg3) { - affine.for %arg6 = #map0(%arg5) to 2600 { - %11 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %12 = affine.load %2[%arg4, %arg6] : memref<3000x2600xf64> - %13 = mulf %11, %12 {scop.splittable = 0 : index} : f64 - affine.store %13, %0[%arg4] : memref<3000xf64> - %14 = affine.load %3[%arg5, %arg6] : memref<2600x2600xf64> - %15 = affine.load %0[%arg4] : memref<3000xf64> - %16 = addf %14, %15 : f64 - affine.store %16, %3[%arg5, %arg6] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map2(%arg3) { - %11 = affine.load %3[%arg4, %arg5] : memref<2600x2600xf64> - %12 = subf %7, %cst_0 : f64 - %13 = divf %11, %12 : f64 - affine.store %13, %3[%arg4, %arg5] : memref<2600x2600xf64> - %14 = affine.load %3[%arg4, %arg5] : memref<2600x2600xf64> - affine.store %14, %3[%arg5, %arg4] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %9 = cmpi sgt, %arg0, %c42_i32 : i32 - %10 = scf.if %9 -> (i1) { - %11 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %12 = llvm.load %11 : !llvm.ptr> - %13 = llvm.mlir.addressof @str0 : !llvm.ptr> - %14 = llvm.getelementptr %13[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %15 = llvm.call @strcmp(%12, %14) : (!llvm.ptr, !llvm.ptr) -> i32 - %16 = trunci %15 : i32 to i1 - %17 = xor %16, %true : i1 - scf.yield %17 : i1 - } else { - scf.yield %false : i1 - } - scf.if %10 { - call @print_array(%c2600_i32, %8) : (i32, memref) -> () - } - memref.dealloc %2 : memref<3000x2600xf64> - memref.dealloc %3 : memref<2600x2600xf64> - memref.dealloc %4 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg4)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = subf %arg3, %cst : f64 - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/covariance/covariance.split-0.polymer.seq.mlir b/example/polybench/split-and-merge/covariance/covariance.split-0.polymer.seq.mlir deleted file mode 100644 index 768abaae..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.split-0.polymer.seq.mlir +++ /dev/null @@ -1,286 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1)> -#map4 = affine_map<(d0) -> (3000, d0 * 32 + 32)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("cov\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %c3000 = constant 3000 : index - %c2600 = constant 2600 : index - %c0 = constant 0 : index - %c1 = constant 1 : index - %cst = constant 0.000000e+00 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = memref.alloca() : memref<3000xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = memref.alloc() : memref<3000x2600xf64> - %3 = memref.alloc() : memref<2600x2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = sitofp %c3000_i32 : i32 to f64 - affine.store %5, %1[0] : memref<1xf64> - %6 = scf.for %arg2 = %c0 to %c3000 step %c1 iter_args(%arg3 = %c0_i32) -> (i32) { - %11 = index_cast %arg3 : i32 to index - %12 = scf.for %arg4 = %c0 to %c2600 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %14 = index_cast %arg5 : i32 to index - %15 = sitofp %arg3 : i32 to f64 - %16 = sitofp %arg5 : i32 to f64 - %17 = mulf %15, %16 : f64 - %18 = sitofp %c2600_i32 : i32 to f64 - %19 = divf %17, %18 : f64 - memref.store %19, %2[%11, %14] : memref<3000x2600xf64> - %20 = addi %arg5, %c1_i32 : i32 - scf.yield %20 : i32 - } - %13 = addi %arg3, %c1_i32 : i32 - scf.yield %13 : i32 - } - call @polybench_timer_start() : () -> () - %7 = affine.load %1[0] : memref<1xf64> - %8 = memref.cast %3 : memref<2600x2600xf64> to memref - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map2(%arg3) { - affine.store %cst, %3[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map2(%arg2) { - affine.store %cst, %4[%arg3] : memref<2600xf64> - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = 0 to 94 { - affine.for %arg4 = #map1(%arg3) to min #map4(%arg3) { - affine.for %arg5 = #map1(%arg2) to min #map2(%arg2) { - %11 = affine.load %4[%arg5] : memref<2600xf64> - %12 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %13 = addf %11, %12 : f64 - affine.store %13, %4[%arg5] : memref<2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map1(%arg2) to min #map2(%arg2) { - %11 = affine.load %4[%arg3] : memref<2600xf64> - %12 = divf %11, %7 : f64 - affine.store %12, %4[%arg3] : memref<2600xf64> - } - } - affine.for %arg2 = 0 to 94 { - affine.for %arg3 = 0 to 82 { - affine.for %arg4 = #map1(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map1(%arg3) to min #map2(%arg3) { - %11 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %12 = affine.load %4[%arg5] : memref<2600xf64> - %13 = subf %11, %12 : f64 - affine.store %13, %2[%arg4, %arg5] : memref<3000x2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 94 { - affine.for %arg3 = 0 to 82 { - affine.for %arg4 = #map1(%arg2) to min #map4(%arg2) { - affine.for %arg5 = #map1(%arg3) to min #map2(%arg3) { - affine.for %arg6 = #map0(%arg5) to 2600 { - %11 = affine.load %2[%arg4, %arg5] : memref<3000x2600xf64> - %12 = affine.load %2[%arg4, %arg6] : memref<3000x2600xf64> - %13 = mulf %11, %12 {scop.splittable = 0 : index} : f64 - affine.store %13, %0[%arg4] : memref<3000xf64> - %14 = affine.load %3[%arg5, %arg6] : memref<2600x2600xf64> - %15 = affine.load %0[%arg4] : memref<3000xf64> - %16 = addf %14, %15 : f64 - affine.store %16, %3[%arg5, %arg6] : memref<2600x2600xf64> - } - } - } - } - } - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map2(%arg3) { - %11 = affine.load %3[%arg4, %arg5] : memref<2600x2600xf64> - %12 = subf %7, %cst_0 : f64 - %13 = divf %11, %12 : f64 - affine.store %13, %3[%arg4, %arg5] : memref<2600x2600xf64> - %14 = affine.load %3[%arg4, %arg5] : memref<2600x2600xf64> - affine.store %14, %3[%arg5, %arg4] : memref<2600x2600xf64> - } - } - } - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %9 = cmpi sgt, %arg0, %c42_i32 : i32 - %10 = scf.if %9 -> (i1) { - %11 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %12 = llvm.load %11 : !llvm.ptr> - %13 = llvm.mlir.addressof @str0 : !llvm.ptr> - %14 = llvm.getelementptr %13[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %15 = llvm.call @strcmp(%12, %14) : (!llvm.ptr, !llvm.ptr) -> i32 - %16 = trunci %15 : i32 to i1 - %17 = xor %16, %true : i1 - scf.yield %17 : i1 - } else { - scf.yield %false : i1 - } - scf.if %10 { - call @print_array(%c2600_i32, %8) : (i32, memref) -> () - } - memref.dealloc %2 : memref<3000x2600xf64> - memref.dealloc %3 : memref<2600x2600xf64> - memref.dealloc %4 : memref<2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref, %arg1: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1)] : memref - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = affine.load %arg2[symbol(%arg3), symbol(%arg1)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref, %arg1: index, %arg2: f64) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1)] : memref - %1 = divf %0, %arg2 : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg2)] : memref - %2 = subf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg4)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 0 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: f64) attributes {scop.stmt} { - %cst = constant 1.000000e+00 : f64 - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = subf %arg3, %cst : f64 - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg2), symbol(%arg1)] : memref - affine.store %0, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 - } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 - } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 - %31 = remi_signed %30, %c20_i32 : i32 - %32 = cmpi eq, %31, %c0_i32 : i32 - scf.if %32 { - %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %42 = llvm.mlir.addressof @str4 : !llvm.ptr> - %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %35 = llvm.mlir.addressof @str5 : !llvm.ptr> - %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref - %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 - scf.yield %39 : i32 - } - %27 = addi %arg2, %c1_i32 : i32 - scf.yield %27 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str7 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/covariance/covariance.split.c b/example/polybench/split-and-merge/covariance/covariance.split.c deleted file mode 100644 index 9e6b2c76..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.split.c +++ /dev/null @@ -1,123 +0,0 @@ -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* covariance.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "covariance.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)n; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = ((DATA_TYPE)i * j) / M; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(cov, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("cov"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, cov[i][j]); - } - POLYBENCH_DUMP_END("cov"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_covariance(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(cov, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(scr_data, N, n)) { - int i, j, k; -#pragma scop - for (j = 0; j < _PB_M; j++) { - mean[j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_N; i++) - mean[j] += data[i][j]; - mean[j] /= float_n; - } - - for (i = 0; i < _PB_N; i++) - for (j = 0; j < _PB_M; j++) - data[i][j] -= mean[j]; - - for (i = 0; i < _PB_M; i++) - for (j = i; j < _PB_M; j++) { - cov[i][j] = SCALAR_VAL(0.0); - for (k = 0; k < _PB_N; k++) { - scr_data[k] = data[k][i] * data[k][j]; - cov[i][j] += scr_data[k]; - } - cov[i][j] /= (float_n - SCALAR_VAL(1.0)); - cov[j][i] = cov[i][j]; - } -#pragma endscop -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(cov, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(scr_data, DATA_TYPE, N, n); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_covariance(m, n, float_n, POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(cov), - POLYBENCH_ARRAY(mean), POLYBENCH_ARRAY(scr_data)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(cov))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(cov); - POLYBENCH_FREE_ARRAY(mean); - - return 0; -} diff --git a/example/polybench/split-and-merge/covariance/covariance.split.pluto.c b/example/polybench/split-and-merge/covariance/covariance.split.pluto.c deleted file mode 100644 index ffa453bc..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.split.pluto.c +++ /dev/null @@ -1,171 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* covariance.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "covariance.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)n; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = ((DATA_TYPE)i * j) / M; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(cov, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("cov"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, cov[i][j]); - } - POLYBENCH_DUMP_END("cov"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_covariance(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(cov, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(scr_data, N, n)) { - int i, j, k; - int t1, t2, t3, t4, t5, t6, t7; - register int lbv, ubv; -if (_PB_M >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_M-1,32*t2+31);t4++) { - for (t5=max(32*t3,t4);t5<=min(_PB_M-1,32*t3+31);t5++) { - cov[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] = SCALAR_VAL(0.0);; - } - } - if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - mean[t5] += data[t4][t5];; - } - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] /= float_n;; - } - } - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - data[t4][t5] -= mean[t5];; - } - } - } - } - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - for (t6=t5;t6<=_PB_M-1;t6++) { - scr_data[t4] = data[t4][t5] * data[t4][t6];; - cov[t5][t6] += scr_data[t4];; - } - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_M-1,32*t2+31);t4++) { - for (t5=max(32*t3,t4);t5<=min(_PB_M-1,32*t3+31);t5++) { - cov[t4][t5] /= (float_n - SCALAR_VAL(1.0));; - cov[t5][t4] = cov[t4][t5];; - } - } - } - } -} -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(cov, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(scr_data, DATA_TYPE, N, n); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_covariance(m, n, float_n, POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(cov), - POLYBENCH_ARRAY(mean), POLYBENCH_ARRAY(scr_data)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(cov))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(cov); - POLYBENCH_FREE_ARRAY(mean); - - return 0; -} diff --git a/example/polybench/split-and-merge/covariance/covariance.split.pluto.cloog b/example/polybench/split-and-merge/covariance/covariance.split.pluto.cloog deleted file mode 100644 index 66982f56..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.split.pluto.cloog +++ /dev/null @@ -1,237 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_M _PB_N - -# Number of statements -9 - -# S1 (mean[j] = SCALAR_VAL(0.0);) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S2 (mean[j] += data[i][j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S3 (mean[j] /= float_n;) -7 6 -1 0 1 0 0 0 -1 0 -1 1 0 -1 -1 0 0 1 0 -1 -0 0 0 0 0 0 -0 0 0 0 0 0 -1 -32 1 0 0 0 -1 32 -1 0 0 31 -0 0 0 - -# S4 (data[i][j] -= mean[j];) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 1 -1 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 1 0 -1 -1 0 0 0 0 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S5 (cov[i][j] = SCALAR_VAL(0.0);) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S6 (scr_data[k] = data[k][i] * data[k][j];) -12 9 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 0 -1 0 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 -1 32 0 0 0 -1 0 0 31 -1 0 -32 1 0 0 0 0 0 -1 0 32 -1 0 0 0 0 31 -0 0 0 - -# S7 (cov[i][j] += scr_data[k];) -12 9 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 0 -1 0 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 -1 32 0 0 0 -1 0 0 31 -1 0 -32 1 0 0 0 0 0 -1 0 32 -1 0 0 0 0 31 -0 0 0 - -# S8 (cov[i][j] /= (float_n - SCALAR_VAL(1.0));) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S9 (cov[j][i] = cov[i][j];) -10 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 0 0 0 -1 1 0 -1 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -9 - -# T(S1) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -8 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S2) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -7 - -# T(S3) -7 13 -0 1 0 0 0 0 0 0 0 0 0 0 -3 -0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 -6 -0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S4) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -5 - -# T(S5) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -4 - -# T(S6) -7 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -2 - -# T(S7) -7 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -3 - -# T(S8) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S9) -7 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -6 -0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 - -# we will set the scattering dimension names -7 -t1 t2 t3 t4 t5 t6 t7 diff --git a/example/polybench/split-and-merge/covariance/covariance.split.pluto.inner.c b/example/polybench/split-and-merge/covariance/covariance.split.pluto.inner.c deleted file mode 100644 index e57a3a36..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.split.pluto.inner.c +++ /dev/null @@ -1,188 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* covariance.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "covariance.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)n; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = ((DATA_TYPE)i * j) / M; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(cov, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("cov"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, cov[i][j]); - } - POLYBENCH_DUMP_END("cov"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_covariance(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(cov, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m), - DATA_TYPE POLYBENCH_1D(scr_data, N, n)) { - int i, j, k; - int t1, t2, t3, t4, t5, t6, t7; - register int lbv, ubv; -if (_PB_M >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_M-1,32*t2+31);t4++) { - for (t5=max(32*t3,t4);t5<=min(_PB_M-1,32*t3+31);t5++) { - cov[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] = SCALAR_VAL(0.0);; - } - } - if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - mean[t5] += data[t4][t5];; - } - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] /= float_n;; - } - } - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - data[t4][t5] -= mean[t5];; - } - } - } - } -#if 0 - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - for (t6=t5;t6<=_PB_M-1;t6++) { - scr_data[t4] = data[t4][t5] * data[t4][t6];; - cov[t5][t6] += scr_data[t4];; - } - } - } - } - } -#endif - for (t4=0;t4<=floord(_PB_N-1,32);t4++) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t6=32*t4;t6<=min(_PB_N-1,32*t4+31);t6++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - for (t7=max(32*t3,t5);t7<=min(_PB_M-1,32*t3+31);t7++) { - scr_data[t6] = data[t6][t5] * data[t6][t7];; - cov[t5][t7] += scr_data[t6];; - } - } - } - } - } - } - - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_M-1,32*t2+31);t4++) { - for (t5=max(32*t3,t4);t5<=min(_PB_M-1,32*t3+31);t5++) { - cov[t4][t5] /= (float_n - SCALAR_VAL(1.0));; - cov[t5][t4] = cov[t4][t5];; - } - } - } - } -} -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(cov, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - POLYBENCH_1D_ARRAY_DECL(scr_data, DATA_TYPE, N, n); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_covariance(m, n, float_n, POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(cov), - POLYBENCH_ARRAY(mean), POLYBENCH_ARRAY(scr_data)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(cov))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(cov); - POLYBENCH_FREE_ARRAY(mean); - - return 0; -} diff --git a/example/polybench/split-and-merge/covariance/covariance.split.pluto.log b/example/polybench/split-and-merge/covariance/covariance.split.pluto.log deleted file mode 100644 index 9f86f372..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.split.pluto.log +++ /dev/null @@ -1,3248 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_M _PB_N - - -# Number of statements -9 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -mean[j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| j i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## j >= 0 - 1 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -READ -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -WRITE -2 8 2 2 0 2 -# e/i| Arr [1]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 0 ## [1] == j - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -j i -# Statement body expression -mean[j] += data[i][j]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| j |_PB. _PB.| 1 - 1 1 0 0 0 ## j >= 0 - 1 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == j - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 3.3 Access -READ -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -WRITE -2 7 2 1 0 2 -# e/i| Arr [1]| j |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == mean - 0 0 -1 1 0 0 0 ## [1] == j - -READ -1 6 1 1 0 2 -# e/i| Arr| j |_PB. _PB.| 1 - 0 -1 0 0 0 8 ## Arr == float_n - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -j -# Statement body expression -mean[j] /= float_n; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 -1 ## -i+_PB_N-1 >= 0 - 1 0 0 0 1 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 1 ## c1 == 1 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 3 ## Arr == mean - 0 0 -1 0 1 0 0 0 ## [1] == j - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -data[i][j] -= mean[j]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 ## -i+j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -cov[i][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -8 7 3 0 0 2 -# e/i| i j k |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 0 ## -i+j >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 6.3 Access -WRITE -2 9 2 3 0 2 -# e/i| Arr [1]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 11 ## Arr == scr_data - 0 0 -1 0 0 1 0 0 0 ## [1] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 0 ## [2] == i - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == data - 0 0 -1 0 0 0 1 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -scr_data[k] = data[k][i] * data[k][j]; - - -# =============================================== Statement 7 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -8 7 3 0 0 2 -# e/i| i j k |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## i >= 0 - 1 -1 0 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 0 ## -i+j >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_M-1 >= 0 - 1 0 0 1 0 0 0 ## k >= 0 - 1 0 0 -1 0 1 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == k - 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 7.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -2 9 2 3 0 2 -# e/i| Arr [1]| i j k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 11 ## Arr == scr_data - 0 0 -1 0 0 1 0 0 0 ## [1] == k - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -i j k -# Statement body expression -cov[i][j] += scr_data[k]; - - -# =============================================== Statement 8 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 8.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 ## -i+j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 8.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 2 ## c5 == 2 - -# ---------------------------------------------- 8.3 Access -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -READ -1 7 1 2 0 2 -# e/i| Arr| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 8 ## Arr == float_n - -# ---------------------------------------------- 8.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -cov[i][j] /= (float_n - SCALAR_VAL(1.0)); - - -# =============================================== Statement 9 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 9.1 Domain -DOMAIN -5 6 2 0 0 2 -# e/i| i j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## i >= 0 - 1 -1 0 1 0 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 1 0 -1 ## _PB_M-1 >= 0 - 1 -1 1 0 0 0 ## -i+j >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_M-1 >= 0 - -# ---------------------------------------------- 9.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 2 ## c1 == 2 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i - 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 3 ## c5 == 3 - -# ---------------------------------------------- 9.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 0 1 0 0 0 ## [1] == j - 0 0 0 -1 1 0 0 0 0 ## [2] == i - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| i j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == cov - 0 0 -1 0 1 0 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 9.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -i j -# Statement body expression -cov[j][i] = cov[i][j]; - - -# =============================================== Extensions - -b0 i b1 j b2 k b3 - - - -# Number of arrays -11 -# Mapping array-identifiers/array-names -1 j -2 _PB_M -3 mean -4 SCALAR_VAL -5 i -6 _PB_N -7 data -8 float_n -9 cov -10 k -11 scr_data - - - -# File name -(null) -# Starting line and column -63 0 -# Ending line and column -84 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_M _PB_N -S1 "mean[j] = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S1): (0, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -mean[j] -Original loop: 0 -> yes - -S2 "mean[j] += data[i][j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S2): (0, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -mean[j] -data[i][j] -Write accesses -mean[j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "mean[j] /= float_n;" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S3): (0, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -mean[j] -float_n[0] -Write accesses -mean[j] -Original loop: 0 -> yes - -S4 "data[i][j] -= mean[j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -i >= 0 --i+_PB_N-1 >= 0 -_PB_N-1 >= 0 -j >= 0 --j+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -data[i][j] -mean[j] -Write accesses -data[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "cov[i][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - -T(S5): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -cov[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "scr_data[k] = data[k][i] * data[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 8 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S6): (2, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -data[k][i] -data[k][j] -Write accesses -scr_data[k] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S7 "cov[i][j] += scr_data[k];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 8 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S7): (2, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -cov[i][j] -scr_data[k] -Write accesses -cov[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S8 "cov[i][j] /= (float_n - SCALAR_VAL(1.0));" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - -T(S8): (2, i, 0, j, 2, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -cov[i][j] -float_n[0] -Write accesses -cov[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S9 "cov[j][i] = cov[i][j];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 5 constraints] -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - -T(S9): (2, i, 0, j, 3, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -cov[i][j] -Write accesses -cov[j][i] -Original loop: 0 -> yes -Original loop: 1 -> yes - ---- Dep 1 from S7 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 2 from S5 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 3 from S8 to S9; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 4 from S1 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 5 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 6 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+j' = 0 -i >= 0 --i+_PB_N-1 >= 0 --j+_PB_M-1 >= 0 -i' >= 0 -j-i' >= 0 - - ---- Dep 7 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 8 from S2 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 9 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: data -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+k' = 0 --j+i' = 0 -i >= 0 --i+_PB_N-1 >= 0 -j >= 0 --j+j' >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 10 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --k+k' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+j' >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 11 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 12 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --k+k' = 0 --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 13 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 14 from S7 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 15 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 16 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 18 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 19 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 20 from S7 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --k+k' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+j' >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 21 from S7 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 22 from S7 to S9; satisfied: 0, sat level: -1; Type: WAR -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 23 from S7 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 24 from S7 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: cov -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 25 from S2 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: data -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 --i+i' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 26 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 27 from S2 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 28 from S8 to S9; satisfied: 0, sat level: -1; Type: WAR -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 29 from S5 to S9; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 30 from S8 to S9; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 31 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 32 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 33 from S7 to S9; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+j' = 0 --i+i' = 0 --i+j = 0 -i >= 0 --i+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 34 from S2 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i >= 0 --i+_PB_N-1 >= 0 - - ---- Dep 35 from S7 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 - - ---- Dep 36 from S7 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 37 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: mean -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --j+j' = 0 -j >= 0 --j+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_N-1 >= 0 - - ---- Dep 38 from S5 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[6 dims; 5 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 - - ---- Dep 39 from S5 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: cov -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 40 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --k+k' = 0 -i >= 0 --i+j >= 0 --j+_PB_M-1 >= 0 -k >= 0 --k+_PB_N-1 >= 0 --i+i'-1 >= 0 --i'+j' >= 0 --j'+_PB_M-1 >= 0 - - ---- Dep 41 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: scr_data -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --k+k' = 0 --i+i' = 0 -i >= 0 --i+j >= 0 -k >= 0 --k+_PB_N-1 >= 0 --j+j'-1 >= 0 --j'+_PB_M-1 >= 0 - - -T(S1): (0, j, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, j, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, j, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (2, i, 0, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (2, i, 0, j, 1, k, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S7): (2, i, 0, j, 1, k, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S8): (2, i, 0, j, 2, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S9): (2, i, 0, j, 3, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -[pluto] Number of statements: 9 -[pluto] Total number of loops: 18 -[pluto] Number of deps: 41 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 5 6 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 8 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 1 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 1 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 2: max stmt dim: 3 - SCC 6: size: 1: max stmt dim: 2 - SCC 7: size: 1: max stmt dim: 2 -[pluto] parameter context from domains -Set #1 -[2 dims; 2 constraints] -c_j-1 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied - 25 dep(s) satisfied -h(S1) = 1, h(S2) = 2, h(S3) = 3, h(S4) = 4, h(S5) = 0, h(S6) = 5, h(S7) = 5, h(S8) = 6, h(S9) = 6 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 1; num_constraints: 12 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 2; num_constraints: 12 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 3; num_constraints: 12 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 4; num_constraints: 14 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 7 constraints - For dep 5; num_constraints: 9 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 6; num_constraints: 12 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 7; num_constraints: 12 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 9 constraints - For dep 8; num_constraints: 16 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 9; num_constraints: 12 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 9 constraints - For dep 10; num_constraints: 20 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 11; num_constraints: 12 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 12; num_constraints: 10 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 13; num_constraints: 12 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 7 constraints - For dep 14; num_constraints: 5 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 15; num_constraints: 14 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 16; num_constraints: 12 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 9 constraints - For dep 17; num_constraints: 14 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 18; num_constraints: 14 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 19; num_constraints: 14 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 9 constraints - For dep 20; num_constraints: 20 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 21; num_constraints: 12 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 22; num_constraints: 10 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 23; num_constraints: 12 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 7 constraints - For dep 24; num_constraints: 5 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 10 constraints - For dep 25; num_constraints: 12 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 7 constraints - For dep 26; num_constraints: 9 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 27; num_constraints: 14 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 28; num_constraints: 10 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 29; num_constraints: 10 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 30; num_constraints: 10 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 9 constraints - For dep 31; num_constraints: 14 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 7 constraints - For dep 32; num_constraints: 9 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 33; num_constraints: 10 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 34; num_constraints: 14 -[pluto] compute permutability constraints: Dep 35 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 35; num_constraints: 12 -[pluto] compute permutability constraints: Dep 36 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 7 constraints - For dep 36; num_constraints: 5 -[pluto] compute permutability constraints: Dep 37 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 9 constraints - For dep 37; num_constraints: 14 -[pluto] compute permutability constraints: Dep 38 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 38; num_constraints: 12 -[pluto] compute permutability constraints: Dep 39 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 10 constraints - For dep 39; num_constraints: 12 -[pluto] compute permutability constraints: Dep 40 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 8 constraints - For dep 40; num_constraints: 12 -[pluto] compute permutability constraints: Dep 41 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 7 constraints - For dep 41; num_constraints: 5 - After dep 3; num_constraints: 12 - After dep 5; num_constraints: 21 - After dep 10; num_constraints: 41 - After dep 11; num_constraints: 53 - After dep 12; num_constraints: 63 - After dep 14; num_constraints: 68 - After dep 20; num_constraints: 88 - After dep 21; num_constraints: 100 - After dep 24; num_constraints: 105 - After dep 26; num_constraints: 114 - After dep 28; num_constraints: 124 - After dep 30; num_constraints: 134 - After dep 32; num_constraints: 143 - After dep 36; num_constraints: 148 - After dep 40; num_constraints: 160 - After dep 41; num_constraints: 165 - After all dependences: num constraints: 61, num variables: 39 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_l >= 0 - -Set #1 -[39 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[39 dims; 1 constraints] -c_p >= 0 - -Set #1 -[39 dims; 1 constraints] -c_q >= 0 - -Set #1 -[39 dims; 1 constraints] -c_p+c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_t >= 0 - -Set #1 -[39 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[39 dims; 1 constraints] -c_x >= 0 - -Set #1 -[39 dims; 1 constraints] -c_y >= 0 - -Set #1 -[39 dims; 1 constraints] -c_x+c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[39 dims; 1 constraints] -c_| >= 0 - -Set #1 -[39 dims; 1 constraints] -c_} >= 0 - -Set #1 -[39 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[39 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[39 dims; 1 constraints] --c_ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_€-c_+c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 3 disjuncts -Set #1 -[39 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[39 dims; 1 constraints] --c_… >= 0 - -Set #1 -[39 dims; 1 constraints] -c_† >= 0 - -Set #1 -[39 dims; 1 constraints] -c_„-c_…+c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[39 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_ˆ+c_‰-1 >= 0 - -[pluto] get_stmt_ortho constraints S9 -Ortho constraints for S9; 2 disjuncts -Set #1 -[39 dims; 1 constraints] -c_Œ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_Œ+c_-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -Added ortho constraints for S9 -linear independence constraints -[39 dims; 9 constraints] - +c_l -1 >= 0 - +c_p +c_q -1 >= 0 - +c_t -1 >= 0 - +c_x +c_y -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ -c_ +c_‚ -1 >= 0 - +c_„ -c_… +c_† -1 >= 0 - +c_ˆ +c_‰ -1 >= 0 - +c_Œ +c_ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (39 variables, 118 constraints) -[pluto] pluto_constraints_lexmin_isl (30 variables, 118 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = j, h(S2) = j, h(S3) = j, h(S4) = i, h(S5) = i, h(S6) = k, h(S7) = k, h(S8) = i, h(S9) = i -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_q >= 0 - -Set #1 -[39 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_y >= 0 - -Set #1 -[39 dims; 1 constraints] -c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_} >= 0 - -Set #1 -[39 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[39 dims; 1 constraints] --c_ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_€-c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[39 dims; 1 constraints] --c_… >= 0 - -Set #1 -[39 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_„-c_…-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_‰-1 >= 0 - -[pluto] get_stmt_ortho constraints S9 -Ortho constraints for S9; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -Added ortho constraints for S9 -linear independence constraints -[39 dims; 7 constraints] - +c_q -1 >= 0 - +c_y -1 >= 0 - +c_} -1 >= 0 - +c_€ -c_ -1 >= 0 - +c_„ -c_… -1 >= 0 - +c_‰ -1 >= 0 - +c_ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (39 variables, 114 constraints) -[pluto] pluto_constraints_lexmin_isl (30 variables, 114 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = 0, h(S4) = j, h(S5) = j, h(S6) = i, h(S7) = i, h(S8) = j, h(S9) = j -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 7 -non-zero cst: skipping stmt 8 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[39 dims; 1 constraints] --c_ >= 0 - -Set #1 -[39 dims; 1 constraints] --c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[39 dims; 1 constraints] --c_… >= 0 - -Set #1 -[39 dims; 1 constraints] --c_…-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -[pluto] get_stmt_ortho constraints S9 -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[39 dims; 2 constraints] - -c_ -1 >= 0 - -c_… -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #3 -[pluto] pluto_prog_constraints_lexmin (39 variables, 104 constraints) -[pluto] pluto_constraints_lexmin_isl (30 variables, 104 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 2 hyperplane(s) found -T(S1): (1, j, 0) -loop types (scalar, loop, scalar) - -T(S2): (2, j, i) -loop types (scalar, loop, loop) - -T(S3): (3, j, 0) -loop types (scalar, loop, scalar) - -T(S4): (4, i, j) -loop types (scalar, loop, loop) - -T(S5): (0, i, j) -loop types (scalar, loop, loop) - -T(S6): (5, k, i) -loop types (scalar, loop, loop) - -T(S7): (5, k, i) -loop types (scalar, loop, loop) - -T(S8): (6, i, j) -loop types (scalar, loop, loop) - -T(S9): (6, i, j) -loop types (scalar, loop, loop) - -[pluto] pluto_diamond_tile - After dep 3; num_constraints: 12 - After dep 5; num_constraints: 21 - After dep 10; num_constraints: 41 - After dep 11; num_constraints: 53 - After dep 12; num_constraints: 63 - After dep 14; num_constraints: 68 - After dep 20; num_constraints: 88 - After dep 21; num_constraints: 100 - After dep 24; num_constraints: 105 - After dep 26; num_constraints: 114 - After dep 28; num_constraints: 124 - After dep 30; num_constraints: 134 - After dep 32; num_constraints: 143 - After dep 36; num_constraints: 148 - After dep 40; num_constraints: 160 - After dep 41; num_constraints: 165 - After all dependences: num constraints: 61, num variables: 39 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied - 25 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 1 - After dep 3; num_constraints: 12 - After dep 11; num_constraints: 24 - After dep 12; num_constraints: 34 - After dep 21; num_constraints: 46 - After dep 28; num_constraints: 56 - After dep 30; num_constraints: 66 - After dep 41; num_constraints: 71 - After all dependences: num constraints: 31, num variables: 39 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 7 -non-zero cst: skipping stmt 8 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_ >= 0 - -Set #1 -[39 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[39 dims; 1 constraints] -c_… >= 0 - -Set #1 -[39 dims; 1 constraints] -c_…-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -[pluto] get_stmt_ortho constraints S9 -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[39 dims; 2 constraints] - +c_ -1 >= 0 - +c_… -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (39 variables, 74 constraints) -[pluto] pluto_constraints_lexmin_isl (30 variables, 74 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = j, h(S7) = j, h(S8) = 0, h(S9) = 0 -[pluto] pluto_auto_transform: band level 1; 1 hyperplane(s) found -T(S1): (1, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (2, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S3): (3, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (4, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S5): (0, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S6): (5, k, i, j) -loop types (scalar, loop, loop, loop) - -T(S7): (5, k, i, j) -loop types (scalar, loop, loop, loop) - -T(S8): (6, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S9): (6, i, j, 0) -loop types (scalar, loop, loop, scalar) - -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 0; band depth: 2 -[pluto] pluto_auto_transform: band level 2; 0 hyperplane(s) found -T(S1): (1, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (2, j, i, 0) -loop types (scalar, loop, loop, scalar) - -T(S3): (3, j, 0, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (4, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S5): (0, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S6): (5, k, i, j) -loop types (scalar, loop, loop, loop) - -T(S7): (5, k, i, j) -loop types (scalar, loop, loop, loop) - -T(S8): (6, i, j, 0) -loop types (scalar, loop, loop, scalar) - -T(S9): (6, i, j, 0) -loop types (scalar, loop, loop, scalar) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 8 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 8: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 3 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 2 - SCC 6: size: 1: max stmt dim: 1 - SCC 7: size: 1: max stmt dim: 2 - SCC 8: size: 1: max stmt dim: 1 -[pluto] Cutting between all SCCs -h(S1) = 8, h(S2) = 7, h(S3) = 6, h(S4) = 5, h(S5) = 4, h(S6) = 2, h(S7) = 3, h(S8) = 0, h(S9) = 1 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 4 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied - 25 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 4 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (1, j, 0, 0, 8) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S2): (2, j, i, 0, 7) -loop types (scalar, loop, loop, scalar, scalar) - -T(S3): (3, j, 0, 0, 6) -loop types (scalar, loop, scalar, scalar, scalar) - -T(S4): (4, i, j, 0, 5) -loop types (scalar, loop, loop, scalar, scalar) - -T(S5): (0, i, j, 0, 4) -loop types (scalar, loop, loop, scalar, scalar) - -T(S6): (5, k, i, j, 2) -loop types (scalar, loop, loop, loop, scalar) - -T(S7): (5, k, i, j, 3) -loop types (scalar, loop, loop, loop, scalar) - -T(S8): (6, i, j, 0, 0) -loop types (scalar, loop, loop, scalar, scalar) - -T(S9): (6, i, j, 0, 1) -loop types (scalar, loop, loop, scalar, scalar) - -[pluto_tile] Outermost tilable bands -(t2, t3, ) with stmts {S2, } -(t2, t3, ) with stmts {S4, } -(t2, t3, ) with stmts {S5, } -(t2, t3, ) with stmts {S6, S7, } -(t2, t3, ) with stmts {S8, S9, } -[pluto_tile] Innermost tilable bands -(t2, t3, ) with stmts {S2, } -(t2, t3, ) with stmts {S4, } -(t2, t3, ) with stmts {S5, } -(t2, t3, ) with stmts {S8, S9, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied - 25 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 4 dep(s) satisfied -[Pluto] After tiling: -T(S1): (1, j/32, j, 0, 0, 8, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (2, j/32, i/32, j, i, 0, 7) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S3): (3, j/32, j, 0, 0, 6, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (4, i/32, j/32, i, j, 0, 5) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S5): (0, i/32, j/32, i, j, 0, 4) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S6): (5, k/32, i/32, k, i, j, 2) -loop types (scalar, loop, loop, loop, loop, loop, scalar) - -T(S7): (5, k/32, i/32, k, i, j, 3) -loop types (scalar, loop, loop, loop, loop, loop, scalar) - -T(S8): (6, i/32, j/32, i, j, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S9): (6, i/32, j/32, i, j, 0, 1) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -Getting loop at depth 3 -[pluto-intra-tilt5 {loop with stmts: S2, } -t4 {loop with stmts: S2, } -t4 {loop with stmts: S2, } -t5 {loop with stmts: S4, } -t4 {loop with stmts: S4, } -t5 {loop with stmts: S5, } -t4 {loop with stmts: S5, } -t6 {loop with stmts: S6, S7, } -t5 {loop with stmts: S6, S7, } -t4 {loop with stmts: S6, S7, } -t5 {loop with stmts: S8, S9, } -t4 {loop with stmts: S8, S9, } -t3 {loop with stmts: S1, } -t3 {loop with stmts: S3, } -e-opt] Score for loop 0: -8 -[pluto-intra-tile-opt] Score for loop 1: 14 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 14 -[pluto-intra-tile-opt] Score for loop 1: -28 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Total number of fused bands 1 -Band 0 to be fused with band 0 -Band 1 to be fused with band 0 -Getting loop at depth 3 -[pluto-intra-tile-opt] Score for loop 0: -12 -[pluto-intra-tile-opt] Score for loop 1: -84 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: 10 -Getting loop at depth 2 -[pluto-intra-tile-opt] Score for loop 0: 16 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied - 25 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 4 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (1, j/32, j, 0, 0, 8, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (2, j/32, i/32, i, j, 0, 7) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S3): (3, j/32, j, 0, 0, 6, 0) -loop types (scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (4, i/32, j/32, i, j, 0, 5) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S5): (0, i/32, j/32, i, j, 0, 4) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S6): (5, k/32, i/32, k, i, j, 2) -loop types (scalar, loop, loop, loop, loop, loop, scalar) - -T(S7): (5, k/32, i/32, k, i, j, 3) -loop types (scalar, loop, loop, loop, loop, loop, scalar) - -T(S8): (6, i/32, j/32, i, j, 0, 0) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -T(S9): (6, i/32, j/32, i, j, 0, 1) -loop types (scalar, loop, loop, loop, loop, scalar, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(3,7), S2(4,7), S3(3,7), S4(4,7), S5(4,7), S6(4,7), S7(4,7), S8(4,7), S9(4,7), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to covariance.split.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.003042s -[pluto] Auto-transformation time: 0.066145s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.005927s -[pluto] Code generation time: 0.035735s -[pluto] Other/Misc time: 0.264303s -[pluto] Total time: 0.369225s -[pluto] All times: 0.003042 0.066145 0.035735 0.264303 diff --git a/example/polybench/split-and-merge/covariance/covariance.split.pluto.noscr.c b/example/polybench/split-and-merge/covariance/covariance.split.pluto.noscr.c deleted file mode 100644 index b7e22d59..00000000 --- a/example/polybench/split-and-merge/covariance/covariance.split.pluto.noscr.c +++ /dev/null @@ -1,168 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* covariance.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "covariance.h" - -/* Array initialization. */ -static void init_array(int m, int n, DATA_TYPE *float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m)) { - int i, j; - - *float_n = (DATA_TYPE)n; - - for (i = 0; i < N; i++) - for (j = 0; j < M; j++) - data[i][j] = ((DATA_TYPE)i * j) / M; -} - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static void print_array(int m, DATA_TYPE POLYBENCH_2D(cov, M, M, m, m)) - -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("cov"); - for (i = 0; i < m; i++) - for (j = 0; j < m; j++) { - if ((i * m + j) % 20 == 0) - fprintf(POLYBENCH_DUMP_TARGET, "\n"); - fprintf(POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, cov[i][j]); - } - POLYBENCH_DUMP_END("cov"); - POLYBENCH_DUMP_FINISH; -} - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static void kernel_covariance(int m, int n, DATA_TYPE float_n, - DATA_TYPE POLYBENCH_2D(data, N, M, n, m), - DATA_TYPE POLYBENCH_2D(cov, M, M, m, m), - DATA_TYPE POLYBENCH_1D(mean, M, m)) { - int i, j, k; - int t1, t2, t3, t4, t5, t6, t7; - register int lbv, ubv; -if (_PB_M >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_M-1,32*t2+31);t4++) { - for (t5=max(32*t3,t4);t5<=min(_PB_M-1,32*t3+31);t5++) { - cov[t4][t5] = SCALAR_VAL(0.0);; - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] = SCALAR_VAL(0.0);; - } - } - if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=0;t3<=floord(_PB_N-1,32);t3++) { - for (t4=32*t3;t4<=min(_PB_N-1,32*t3+31);t4++) { - for (t5=32*t2;t5<=min(_PB_M-1,32*t2+31);t5++) { - mean[t5] += data[t4][t5];; - } - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=32*t2;t3<=min(_PB_M-1,32*t2+31);t3++) { - mean[t3] /= float_n;; - } - } - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - data[t4][t5] -= mean[t5];; - } - } - } - } - for (t2=0;t2<=floord(_PB_N-1,32);t2++) { - for (t3=0;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_N-1,32*t2+31);t4++) { - for (t5=32*t3;t5<=min(_PB_M-1,32*t3+31);t5++) { - for (t6=t5;t6<=_PB_M-1;t6++) { - cov[t5][t6] += data[t4][t5] * data[t4][t6];; - } - } - } - } - } - for (t2=0;t2<=floord(_PB_M-1,32);t2++) { - for (t3=t2;t3<=floord(_PB_M-1,32);t3++) { - for (t4=32*t2;t4<=min(_PB_M-1,32*t2+31);t4++) { - for (t5=max(32*t3,t4);t5<=min(_PB_M-1,32*t3+31);t5++) { - cov[t4][t5] /= (float_n - SCALAR_VAL(1.0));; - cov[t5][t4] = cov[t4][t5];; - } - } - } - } -} -} - -int main(int argc, char **argv) { - /* Retrieve problem size. */ - int n = N; - int m = M; - - /* Variable declaration/allocation. */ - DATA_TYPE float_n; - POLYBENCH_2D_ARRAY_DECL(data, DATA_TYPE, N, M, n, m); - POLYBENCH_2D_ARRAY_DECL(cov, DATA_TYPE, M, M, m, m); - POLYBENCH_1D_ARRAY_DECL(mean, DATA_TYPE, M, m); - - /* Initialize array(s). */ - init_array(m, n, &float_n, POLYBENCH_ARRAY(data)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_covariance(m, n, float_n, POLYBENCH_ARRAY(data), POLYBENCH_ARRAY(cov), - POLYBENCH_ARRAY(mean)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, POLYBENCH_ARRAY(cov))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(data); - POLYBENCH_FREE_ARRAY(cov); - POLYBENCH_FREE_ARRAY(mean); - - return 0; -} diff --git a/example/polybench/split-and-merge/covariance/perf.data b/example/polybench/split-and-merge/covariance/perf.data deleted file mode 100644 index 1798451fccaddc37ed5f643d8562be5bc37b06f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8915704 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 z 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�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�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⁢8NrKa77`W8u|L8|;5rpLKiu?dgYn!!vsw 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
    W2P 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
    mFF)i@-wy4iZnXMnjpYmtn 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
    Mbzg~DsTefQaXSr1c3#(QYPOT zHEca|z8)7A-YZ}71AY-+^WBAf$p_yqyw-o_ukHMDzRFw`Ui1C%?*}+EU(Q$W{H0yK zTK~Q9{sYHPd9SST^B1n~>_6FKmUFz9AI?|o#=>j94N}{DSwGME2(Lc3!zb%!)^y?3 z&%}E2e^5VMFRgD?^o^h6k9{e;u9uumZ2fTjWcw?*@ipI3HEq7+@7)z%559{ak@4~B}@aQLuXJh|r#!vC>iOqWF zdTG5>c=a;`zpvzcEext|{7i=*#vi9+O~-5ebMU-_^}MK$@Lu)Ld{<_!W%9jz-sa2k zJ69B5^F52}JM(=vL3pi)NywM+6n*x7E;nmMv_~H0V<2Q8Ud&N)xm2(QO^>ePSe}5SL zLU_%0U<8{l`|V$G8<~7_)RY9Yzj6J(ZzsIwJ261MC$~3o<7+*%MLn>7!afw<%Mbk* z57pF-uYOM8eNNWH%5}o4pLqKdoBqK0`uVi*S`SarALyr3y=E>R^)vQ=`T4(|hnC#h z!o(jMzfYu}eLIE!Tt6S0v~=TZzA>-Zd^!HwLBeakG5`Glz19Q$Hw)Ivdh0h!c&&%Y@WXtoSL)#6@rs}GwV;RaTK|>MKgnND-_hh-Honc5KIfGdUh_R$ zOA_$PckT}1b$-9W{L)W`3&N|P+3>^oUnlP3>xca5X=G!$`SK}we$;75V zFrLLpgjYXv1DuDv>LR@6J0?KB+p2eW@u<&t!R-Eu^^@wk@Lu&p{!q9cZhZ9<7SBiM zXWwSwwVzBqZT)cnQ{cSt>Sq)78|=oY2 z57&FIUVYs7n(z6iHedRg@{91A?_HcHaQwTQgx7o*AYay7$4kO%J^Y1wU_94H^>^`q zZobQR3$OJs4(HDtzh<8S#?OSmtsmxld$RDF?{efze)kID)n{tlkJC@z{DWLP>gPZJ zKL=|L_VvSl^?I1_>Zc=q@631x+z?*#U50$wuX=#_&K%K`r-HGp63=` z{Uj?Z6QI{G)?0>?qultK?`_N%`MYm~|J?PJJ;G==zUG?(`#sj%urtDI|5?1j=F9mi z{!Vz!HzoF~^#5(hF)kjRujQC8j{n2{agO)Om-W^<)OeHckSex6(`TJ1!mIyR@XvT= zrJCTzS3j#ySwD>DKr!Lf&u(0g=;vs{iN?<_@Wc5UJZaJw`Dwmhc+Hpf#`t3%7hdb9 zGx`tXd3blS@sl9H_W>@2p5l1*^8^0g3dg_JdaCg=27WldkxNW-yyp8j!2Hf>AiP(- zv474QFTDDhjqi~%{w#B+8$V0&y+p>peZTPP=RThQvj4YSHN*HB5x~!y3^N_?l`rGp zQc8Huw=T}d7=Pi(!mIzc@XzsM7nx=J{L$I2FXo%4weaevT4DJIwBK_5J_JTy!t6p$-n;``cruIa}$2pA3_wFXZ)O<@tSYy0ybZc-{42#)n_mGWdFIdPk8lnB7mQK&xP0ioVvF4!+MAqZIO## z{lqFL|A5vH^Ibnz>aUj6g;)a0KvU+(LNKK~djy!wfX_dnSm{>s0?_~`~eSqt$N8*09SkX0Ze9iaQ z8#Z6gSA?d*Yre-TNdj8`^z*TY@LHdp;h*F8{~)~jSpq+dzjC zn;frxUg7&T51*`` zv-7w5`eFR{&kC=8w&3ptGoF7YZgbxcDrbDHq#r#HSo#(ut};U42B%sA_Z{Q3UEtDiC@ ztRL1}{5pG$pEd#f-0mj4`uPQZIA4pS?DzG~GdJN=q_LW1ve&};}tiz61KS9_Za{U%OA-wjV zgBSh%JbNO%`niqkJI61*`l#{4dSJb+J}SKWX^nbgzMYmH`yxMI$2o5NEJFWbJilc= z;du2^=DzjA{$Hi0@apG86)6bqKlBr_%1Psg-*03;xxG?&_0tr7SZ^7+o$~d=d{3p?|vZz5K8r z_9}AL*AL^lJym%1(;EGU<0oBm&iF}Q&-&r~hCd*@`gw}`N7nz~Lg(H1>W9}O`X5vO zg0COuJ0a#pUq2i_byeZj&sdy?lYdb0lJQe}fc3+8hHn&J{hY=541LB+d)fHm^9%CZ zD_t>unqYk~{+_pl_d4(5^{8mQt8RSt!}qD!PmZ^|X8a_bYW=Vt!gLm1>mktnQHJrt ztIwSrhXaD9c}anIKe$3Iy5zONtl|828`S3fOre@Z{GyFM^} z)=c#G^K6Xp>Zdb)U&DCP%zJ43Y=s}z|Hw0sjGt!cKODbF{Kvk2IDY!+!mFRfcwd74 zH+Oqt{OrX2JAJmCF1-5bj^|Sg@%}^IDNl``K=OaYDcO75&`r&$PuvvI7 zKa3}K+?U2r9ejV4^|1Do@VbBgYL)fF@v}S;Uj0nR`55{2ZC)EcbKr;dpDWKBV}w^f8S#4`uE&tggT4FD z_hIzG@&7$Xc=gjG!2Q>R93fmhT0aFJ+xp@7dFu$T zem>&;F7}g&dqVp9;d)GTDwOdPsD4sB7v9Sc*KeiTq22iEr#JRLj3@dF;nmN}*VYfm zZx$_#8(;mz!24RPpB$UR8b5shllAb^!f?hYJKhNhw()GQ+UmH4E8gO zXY>`}wZAn+eKMYk=b{=viH6wq#d;h4N_h2C2>Tz_^YE+DjUS%>aQxJ%zVY?Ld|Qtf zUi}oq_qbRO@wN!><%jilc~A`FC&L8mhy3;V!mFP+C8Z$rew_JEIuy(J>4W;=`WpOJ zc(3(EK70AtZhZA~4EGC+e@$EAz5Fo#l^Nm~KLfT~KlHz6y71~J2KI-X-)#Hix$(X7 zWxXAU@~!dN5kARxEHAwJ`4jJNbAMH~lkne=5B8=f5ZW`*{^E zp^HcTPO=bLaduaV|z2xjJy!si3{WIh5zafpOpLVDp`rmg^%JOm(tnrE_-Xf>zn|X<39o)KVSUk0$wogJKi%Pn`R1G{yq6#L+y1dK z7(d1EJd5kA<#OS@{E#pCOnB`-ua8?loZmB%GP-!wPduC-GT&DbGaEmB;fFpOv=rXU z5Bcb4h1dG2i|1KfFH6T~aq*}hUf=0|$wuMT&$c7h57*bLNLh`aOYp<^-z~^y{EUPj z`cIxcyW_q5Fy8|wg;zh@@jRXJ3|^YU*AK_vvQ2pPGwqc1!+O|qQ+TbPfAD?_;dA-=VgHXZNqF_M9{V58@1eoD-T0dCrU3T~%V!F&^~U=(j^B8Z@apHQ z0Di8&&tv@Xe1m>6oXzX&hy9^*`FxI7KVxwJ#rS&`%WwRg`Nh@)`44r4*L+K2zsGp8 z3>4nWC-Y6Sq=50WC_w!@Tu{*059@zX>_Wy*RGe2Zp5yrn8$Tl!TR-eSQ5p!Zev;#U ziheHl72eAa*H?|MMU0;{0sO>mU)0wRO_-pgCk*AK_vbWV6(U$Jmr%KC}4zLXnZ z{iK@a?`O?X;nhzZ{C<=5oFrXoH@^B|zheAT8kI4AmZN@H&pEy>>+6R;t4%Kio+jxoy!u&%-!n3vfnm#kk)Mp^D;PiQKOBGP72&YyCKU`n2B2+Sd+T65$IKQ>h2(Nx};CTe&e;vH?7x`(|t%~t83-!bJ!!Hxw%MbfQ zoeEWrpCZ`*Y{&EN&B3b~KS!hbpSSOdFTDDR65#t4+fN9u>nl+IDc`t;@iPv7=>Kgu z;l2EDJywiW)A%`$zbC@}FmjFX+J9o>dFUnhOnppv^>YNzLmB_QIkj9oUVa!)j-quO z@0Bm>xkF{)_5OVne6pWBJR`iWuRrm76V}^|`gL7A>gQBM|N2QaM0oYn4)sGn!&}tz z^+UcutOmY*=yOzl;nmMD_~H0hCJL{9j^g}><8O=K(D-Sb$@<}XU!OyG^|Q8~1fxc2r`zXBDPoVe7!^LXj##cX)(SKM! zeO3sseh&R${cwJJoEBdFB&%!dhwa`r&%-`ls;f zrwIBF>tTL}4lW+`b2Gj5!~RokyzuJhDf}?sMrS+v`e8gD<9GJ;!+gIvBE0513Huq& z*TOTxtIw|R$#|l+>SFx#K!4`=heipnetxZQ>xc2L-_X_gVSncMFCTXE^|KKBjVC?2 zJ6`i`iF`S~2PO%xKBwig@9T1Yo8|3c{L~9&>xcXEu62Z0KTT`+`^hn&r>`H5zjsS7 zUq8(E_tL!`ulY_wKcWBVJ%v}FeBQx+QZqsyxc2wOd-7b$p$~{w>c{JHGbHi z8ULc8{e1n9-xjsM@$)^N*U*L^^-86^~3tPenWWmv$mpL zU-Y@Jz)<6d{fGRkB*T3Duz%)1F1)U<%6R{leEi$Os~M6YXIe_0wGT#i>#uz{BKjeq(9P4;5Kdgr*S;iSZz2S%T(6o;5>L(_? zM?{~iD~&gP^4_q17=O#Q!mFR3aQ?%1hTNIp>xc6-dh|qJKjfd6ndErQ_a4r>7=OI_ z!fU+^fKQHpGTdb2r`cxfhxx8gCA|7cjOWE%Uqd%eF@D&8czroiYpSmw&hP7J(~O^{ z0nU>fmK9$8a6K}fH#>#b{`2OV^+TTpt_rVy-e7&vPuWqw`1-ko{ob2YGkpE>ZeA4>wEI@vwi*WdRqRS@Lv6g z^Y#0=)k456AB^eu43G2j@AAKSu6_j#oc?|BC&p)k@*jPxoYY|3g0SVd2$JIqZL! z@2bg*T|8d-vL2Sq6<+W6>j!w>IAP@_#?J+uC(}=~tiKvR|9&3+)9*J~KbblUuYN}N zu3iK6xHX ze%WQ=)z4Mzf5;!GxZe2Tc}Rpvxt*}n|MMM{|NQsWBPy<2JeR)z8Cr)(`hH zaTW`&ex4MTe?XsKu>Mca+~Vtp<5ylQy!v7N(9d@@wi-Ww2iPA*nj^gWX&=DPq|)1r zpGdQZsX@B&d10f>mq3%~D+{1ojby!v7Pq5oy)gxCI)1N$HPX`6Vz zi%0!%eKFs#+lANu6MDM8pMqzES3l!RT0b2Bz}bUe(mln{frE7|J63kY2&9(fclwQLwNObbfWb`pEr95uYPt0cwe`5{y%;Fus+j&eb)F1 z)PLqB6kh#o$L~qme=2PdUi(jD_+fpPO>)k~qkcM!vVJ)J<)4LDKk;#Y!Fo9P^#xx) ztj}A23h&i_$p3vsc=a+RwO;nioLepPVxRpW=x2kA3K$ZL*QKiStJ8(k2l@%euNLX1<3HC=wZXz`{rvlQ+%x_J=Y&^3 z<%?QB>_6YW5nlZa$z%P{f9>wKzsS$|8h4DJEcksE{WN(gy!xq!`!&{o@+^1V`09uK znek_vA-wweE5E;=zH5b7KPPhg`?+28p06L)XUDkrjh_d2-bX)I*9hgU^X)(`7{bUoqK&!+s=5A)3!`;o67?&o)(7hd~Mg#f?Ly1MzX z8(;nKypi=Vdynwyr*!~7d5brei(oFTEeTJ=(vBU|FO59`ubt~Coep6y!r`+ z_jy=9J4gL(`~+HG_qPkLewxD%>)}<1=f+R{%+?R;n zXLEgYh#d!21IOx(Tm-24cOiesUE0=gQr>>xc7o<+AXa@7w~m9_aJNZQ;Fqa{O(Tqxkw^JzTB)wed3-?;Ft1 z+VWA2A70wL`@)e)v8r`6j7^S3lM2_}9-r`Gr?M{R-OpVLjv?A-wuw|7Sd#{)y@9hy2AW zv5cQL_&x^Xxw|5^@zX)V_q?Cl{ZV-JQ>(Z2!}{5jAdVYf{T#;g2*w|_i11#1IDXSz zaee);KU|#^&-i(c_X8PEwf)~3Ki%Pn*SkKA<2zpcH0|W?XJl{T)lY2PPqF`GTOz#r z;q{U0rSX{WeEo3zlCu*SKO+J>Pj4BN(D-QsKO8?gRDbe?O(-CO3X+qkcGFN8SnVb$`M5yWdJ-{0zqL z_Zfev>Zyz$K96AkNk3M2^%M3R>xcF5VzKb*r*U@chxy)1liJr0iQ=V!I~(r5a3!t4DV z-xp%N4cjKX`eA>j{{f9M`TAk}W2*r3dpMCw%f7uW@ef=>07zuJ2Kg;kw595haC%5A@->~m& zKOx_>v+$a4*ew3*>*!qJz5LT>xI%e+{V?BhCxrjp{*&r@UgPH!_CM_B@1o~7epY0% z^}u>=mRxxClMMC1dTw4`c=f~eNdHkn6fk~xe@dUzX9@4+hvVO!QPB8FkM{}bKmF!H z#?P{<)(_)JcuIKnGa2U<^fNeLVK=_|;rRgl-#99~_8;D#a((S-S;UR+<%jW9uUXXi zc^}~ZYyGBT#?OJt)(^+8eMWfovnjy)C&RNAH-1<@^q=Ug@al*6UyLVtjuO6p=znCj zlE%+0oc~k-k9^n0-`-!U=KhbwtKb+s}g@so? z^~>A(;d-wWwYu@c{>=D?brjw!U&gaxl<-<_{Cx`NH`BBl#!m$Ny&J}VDrzm`r(90! zhvVl=A-ww8kNq(7-BU++t)G974?nFh##1|gZ5Pky`gv4Dc=f~mHskNoxQ_AD75#_) zpB%1h{0xof@2AyG;nmL)Jinu#^AYR0@zoFCr(!>89<{!&ANJc#F@;w@+%M5j?8FU> zpZhqUXa9NJx1sS96ySNpys5&gpQG3xGM=Jag;zh#WI2ASA6~yYUTNgw(R_LRBH#43 z@Lu)C`h0V(vGKD5zqjT1vHLVNe#T|D^~2w{E|?^|`uPFxzp;K&2W#fWS3i88lkvP* zCcIa^V0~6wEWG;p z_vgr;>WAZp?9s}_6_VdDzn)eq~9;~!Yq+W5(m)t*0dep{byWBf$TVEwRu+PxND z{nW`R3&v~zbEt4zH@^C5AowRg^qH|(yD#!{q=WEYepnBU>a{n14x#_BAKseY!T6b9 z&-&r`71s%`exhOjOuo`<;nh!|=Z~FYclshfEei;*ez?9^4^hAGZ2ZK;^LNJIcvKhT zCtQ2$hd$FU6kh#Y#q%t#_oWwvS3ez4Ka4;1ovyxq7=OJg-5l@bhxIuxes|+1DxQCF zJ@(Jr!}uwK--j}u;Z-iH$S&GX);MLCummTQq zhw+SDE4=#Q{TkQT`FewlpWy+Xf2CeL*!UR-KiqF*IV-&S$%lGlJy(4qy!z>adgJ(C zB^c`KhxL$PnebkI_ToHedd*?R&tN?NqW|-ih8sU)0{9s_MtJp8B!6P_{GItGTq3;s zNt@Tde%?JA;p>Ov$LcfE@#=@yFZPFJ-;FYU?%@2H^`Ac9Xvb^5W$M^`>2p_2;dMPu z4&bw3W8u|LM!f&Se3NV)^F@9VRvG(6ei~d5Ui;5h^dI`^A9B3$(-!@N^}HgH@S1Pi zBL4Lds)g|Cb94Zo?T1b9^~3%-Fv&z;KV0uErUro`jjw)Mzz^pu?F-?(?oYSldQ>Ia95=q^dkp8vjQ^LU z!fQXLPuAPT0dtL?B?YV>&hNHq!mFQxxE^u7B7~f0{P24M9Dl(s;l2FO=ixK+jh{|< zUPJ!mRpCF^Plo;rP5j*7GXBw1h1cs{fn3%n=j*Rk!mH0oI4|P(x5g}T@qDhIxW^Vd zUi0Ptne%nzlJHt@1@ZeY)=#J0zZyToQU4tO+or;+pCM1}^LqB5b3=t!KXo$6KcMT8 zKC9PR>g$L7r_79Hj@Nuw;(m(p-##Y1mrus?F#QTQzUF)Ina!8;`=O}tn(yljHedRA z-$i)sKfJzkzPhDZ>FbB_zo@p#_}P#5dFXT4Na58F?`O&Hxw+c-$%6Mc=%>mX;nmNd znXMn@yRpj}H@^Dmjryd|9PfqqT3;MLY}|FmPx1iIvldJcUj1-AGM<#D)*C-P<0kgK zes#Ssy!x3D;Q2+WMjMQu&hW$j+4`XHUVb=Vr(*tQ{3HmlpE*@Wc=f~jVSVQBw#oQO z^3tv^^0~(euYNKIsGp2sHyb~^esRAMVyf_7epo-d&Tlb(7UH~=>!nTdt&UeetRK$T z!?fFspQ$Nq{c!xNg@ji>Jp!CRms~5nuCE@bALiS=@$W7kFF&lGB9pcoKa22t3ijus zkA+u1yq{$}(=P5Xeu|f{et14#JLnI`tDp8bKcxQ^wS`wdyuTpdDAP_~Kg{=3#a+hF z=m5`al0Ft*{RFxnS$uW3@lzGQH(@+QUkR^%h6Om!=~ZZt8(;nK_nY+7E#zKbKjfcO z+GqU4!uK>7|H&o7s~^@6$8WoIzwwg`=Q-rh>=a)8e8hf_{lDi;;nmMztS^p#?8E_I zKdk=;aSjzZBg6eW!fEj~M^)@O_f0xSt9a zOL+Bv8}~2#{$!YR!mIzW@Xvgw%@*FPzj3~Pe{t0Kzl#3G>&wyKj+=a6Zt}n0?wg*K8%cmml);*Pk?gBI0`jjKA%p)5cG| zRn`yJdy|M~9It-Pr?7s=AI%}WSN!yot*P+pC(!;O%#uG%zG-m3&+FrzDd$YSZS&iF z>2u{~;Wgjo@oc_~KY4`nZhWtNIsUGg!fU<_P!HUXC9ZS9ymvL8OIaovrt{rum{-KX~x=(ENN;q`v}F`mDW z-*M!o@zeg1zn>4+g;zg&aGpRvi{1;bet7@L`aIv^mW#*B57$fc!?zu;`L3&I>!11V z>3Y}XdvlwAzKzBRukmyLz0-C~bSzIjp4^nYaFW0UV% zuuiEgNCvJSrw?Rfbzs$GBHQ~MLne#R8rSQ7mD}=QBH^yHw;xpqX zANJ?uYYzF__}LCWjOWc;;nmO0sEN(_3H=|7{M`7-jo)LEKf6MBFF)k-hk0T0ja$X8 zclMJhBVU?)HzHrw^N*{9*L(|IvGvdU*@=6F*LtXh`e!{K>G8_N zHz5C8-nWj|_)7<~^Tl{>RuNv~-+7hd~+8$7>Yz5`!;Fn->ZwSHI+VIzEWy!!b*za*^tf9CsWu<+_;{<*1 z`@R$V$=jU49IyFqs$}b*`-gj%gF9a9VQx>GFUODlLU_%$&%ZCMYrgc^zF7!2zUKQ2 z@@4<&cSm@y`lrvFIYOCytJk*qvi|>`8rtOB1HUI?zQ;BRulfFj_aB(=`50kLzSEE| z>-kAy;kBNlqn?@XUO=bKDTs@YW(b&WBoAxqT_^DKkf1R zDXzyBFN9Y=i%<_7|4@QxzJ6E_CHh4-`TmT2IlonN#W49+4QcZwU%8_2n(rUDKC&KG zJr>?;ewpu}SHi2G3Gl;uNWM9yi(l)ZH|l}ok1ia`_&I|2r8$14>#>cWLD=uHANG7D zy!wfQ{T}Bl&bByid@n!rf8&nu>SrYUu-^Iyi)ZrPkMn%S^JDLCO}nIydC z%jXyTJz(@M@!j}3Uljw)SDhikYraE~FXMSUN_a1y%=hUZ-x)uZuzx;@^WIS1zBhiV z^|I@Q^-yiJ@am^6`X}SrQ6-@p-z$FRJ9(Gz>Sss*Kc%+)VDe2>)4v}!4VT#QI$z&n zzSuv1PA3>20AB~^Pc>d0K z+FwoTc+Gbqz7NLnqXs2&yyiO`?_1L6vKPX8)x&?~`&Du`zUJEp^}zlx;H2<6zrh2{ z?~MW}jGv9TzhL|o7o{|QZsUDR`uXE`;nh#a;*x;ww^{$8*QGM~@_8TmQ@e!s^2zwi z1f?FMdJ8_lp>gNFV8_YNOxO6TauY9>4 zug()*>xbuK9RGRvpNyZzwQN7({Dx|r!SR|e|GpvpL>nZ$=9?b_${`1$@4 z>wiie;l2EDKX81Q@H)Q-F~6*zQ%5ryKaB#MSFHabi}CZOkF5vBe?6P<>ZdCD3H_u> zo7Ii)l`rSFa2Da!=XCTF=3Bc%HaEWd*#?AdjCEI{g(NLy_ntj$uQmeVLZ{E z39o*7l#~R#`bn1aIo$Y~FZZAH^Ur(Xy?iqM`bBfP@ipITcps8}YSzhRd@g}c&Tr@) z!t454vd;S9`fC5D@apI1vepmR@34cpT|8d-GM>)i@)(~pWO&c#HNo@cHGXPW_3tOc z+vIb+=KBKmz>RdY%dYtcQkE^ZWW?eMSmZ!1x&zz)#e$1&yC! zxPM{36S5UDe)jFQ^}zVgml0n5JVHH?pH-}|8(;lQfgi>*qOtH^^+P{BgNhhGf%dlz z_Y1G-03$K1!R)8PI&b>6h7%E-f-d7PXhEG#vc@;obfZMiuJ?!T98tB^^?1R^~3%- z?4^Fn$`~{F(VSej~j4=>k8D ze|*oH#!u{F)(`oAei2^%)WZEE<1hMiEnh$68`h|8{ItjVV*R{1F1)UiPO%{X_{{-}q?_Kb)`cM+>ih z3gG<>j$iRz12?|ro4JOq2lAOBH8eik!6)Ns7DssXGZp=Z{^y?;-mCwxzYSi~$oT0L zz)$RwjUBIkTA=?ho*tW<7(aP%KFRv5bwYT}Hxuq38GnKhO^wgC@JaurmI&|Vhy0fM z&5WO(@I$_1spiH{LG&Ny`*w2+G@gI37yzUSC!Vl|V+R=8#&oTTSjXp1@?_m5aXm9;6o@9lES3mrI4*PST zXdT`7pPTQKSiW9x$*bn!O5MKMw2=pKNX&kbP@e^gJ^~3QG#uZ-u zmw`eoF8b7Qb&hLwH-5jreuHpOA+wuHpbmSh!PYpbO zr_a%;gjYX@aQ=A!YXFM}{_HpBT`C-4E5Uj89(-if?dU%&xc=a;?emK9m zzUgQD{Db$m8Be6H{f(c)W$gN*pSGigS3d~?^yluy2l)D-&t|uU*ZQF!@@Jk1uYUOa zn)T5B#6aU`E6%$({x2B@8$VV0`TJR1M0oX6yqK*Y`rj32h_4^6uUqSd|6D(*E(@=I z`22$B!9*wDHsbM_WIP|GON*tDlxRZT-+s-3`Kf`62(? z^)bdzL-ZfcSM2a(9j|^mN;sd+e;EJ#^1`d1OZYt$`&;@;P7z-Hw1OXwU-Y8zT0e2oe>h(`D$X>1 zYGks0*sl_`6JGr^$Nq=)R{V+ZpS!+Fr<(2J(R|rYm~Z;}!fQWgzapP{sqpG23idzz zeL>xC=Ndo7aNfmwE}U6-^%Di}7qNa8{4PBG?- zah?mc7hXM8hbQK7?D_)Z=?Tus{;RIv2(O;9;@pelM;fuvjsK;dl4e=_MV>Cz72eAe z^H|nac=c2ufTyD8mKaYr>)Z9ldVTgpc=a?8{hIR}x!SM)rzgEXA)oU5WscW;`FnWI zL&EgJYrc6?+2?uWkK__w*K-^6FZPRcZcI;5$EgsWGj6AF#e>M zS2|wfZ-V$aeuf9atDl`2tRLpPC}@@O&%dugzDxeq#!svA)(`tvm`1{@pE|f7WB(fZ zQh2U2tsmwaW!733kLJ4>=Y6cVsmF!adSkwfXX7K`)j#(KoUgcH*Bd{t@cRn(xjEkn zuYPV8k_py)IsSsZ!h884pK{tp<0l^WbL2~06<+ggjCx~#xO+!&q+Mr ziV`WeyYiea6DsIG|20e_y!wfT^D@@wxpBgK`C5+8Sf zH>>cPZ*}BLzFlwOy?ip?fs=O_KfgAzemK8t*9)(Hp5XdLKTXsA;p>O}Vd#~e#?MiF zuaZcj}aK1`^6yB?T$S=LP z*Z9eR{zE?r^6WEy*l)SM(he71{ji^Ne(O%!Z~TNDWBoAxR?CD}Kl{;tIDWE2!hf!x z)Uyv7KZi2e{=@OV3x3G>VSlEdlqH2%Kl~mX^F37Xu<`Rel=Z`SO4Sfv{qTFZ96!=D z;l2E@9x7KqYW&>Cc{=0ydWG=1zW6>6$4~IXF*m;Y;rHO!Pu{#0UZ2NLNMrqQeU*=T z+>Nh(QsVDLG5*?3g!l48pKoKGG=7@keJ1kfrU|cp_&yN%ZWo33^26)J_F1P~JnH8j z&dca$@&@76PlN#b!{0KWcH@7ppFh6&)A;Fv=XuOG-hAQJPoVD+M|mo|`r&?n;|Hxj zYy6yRW9x_Y8ReAl>Zfgh_n(4=I`>6>%AY-N{G`fe`w!#KQRaf<)lY*^_V@X$=Q}%v zS3m4Ote<;5FB(7J{$TyEeol=SUj5|FApv>qpYxs;-m88Xf0&7vjh~-zf6e*2ALfej z(;R--p9@bG-pdd3eVz5H@zW=z^~3opTv~Yb69WB*`;F3bg!l5pewei8b>n9!{vH_P z$vIbetsmZx(@*p=H{AGMemH*Gpqs`|u|n1l>n+wd!mFQ6IIrjUTUrb6<%d4c)VOW@ z^uzv#;}@JOy!zpJJ>S0>SLu%N!|NCG?H%T>@$+{P>xc7OJF)QUCqK>;xn3^)EWDQ= z^4;R!Gk(Hi|HFF7R7`mF(*f&?<8MfM-}qtw;rfbyP6`C!Bw1{M^O&wHg2RzlB#ne4mwmMm~7t>xcC`xWi+|tDk;xtRL2M)#1Xc zpK9pO9RJ4)!h88)zwJ8dsqynZ!2aj%T;bIZ-&bHfiMKv8ez?9E&!yyl8$XANT0dNm z8S)CRez?9kzs(m5|G9qFjQhv@D@(u7kFUAw1^J_C- zF>$}c`q`cGjpKE`SkGMVn+m>lyq6#5`@EO%y54)Fv-QmQdrlHw=j&F0{YIFy?@hkr z)BEo~|Gq4|=F9VNuE(m;Kl?8qVa~P=^2XoR;+*)GNGizFaS7_6V=}4lLoHZ~n`| zYre_9v-xs<$5o18@=YAzesla~;l1jg^_jS2q%X=hY8Bx%-~Il zT#w-+Mlty&!SCT2e~Zk*YrfquzpS6@ufBHUYy9zV+4vdH=4eqJukrJHg&hA;9N|BA zz5Epv-Q=4UzxQUoHRB4e`A$Z@-U0sp$Mvsb7(W}c+xcZY zQ#QwRyv9Ef@zZDRUBYYsZ-w9gaJ~+Xj_t1BDq^!@63xwDC{VAi3pYgoeAiS4P z=6gCx92bvXU;2c$*BA1?G>B{b%z_{Gs|0<8S3fa}+I~nre}Qj}pVT-Hq0bl9g;zgk z@%|#?e?LHYFF)-6UBZ25@?C^{IbTI{2(S6J#_xGp&-p$kF!?qumDo*y?l%~JP|WWg zulWwg{X65SU0!&ve7XOe@GzmtcNOyeuXr;4;CRjV8+@;gSOhuk*VRzqe=qSs5jz8(;g$zmFe3?Ps`td-N1u z`(fh(wjNkNea8#0enR4WkNzKR6W+@Y{qHH3+W1)sKjb5I6<+=D`)jP9#~IR^dbm-? z=F9P?6&GIf?eMQq?GN<1ZG`ZjoA1%4>0LY;|F<=4f9Ck9`w6f0vlf0hUv*<=F!^5T zVe_S*`ssw%d}HJHLafinRfYG;m**k1lV>vdPQ~9-XMbMQPI%3CUVwbd{E^w@`?P_7 zzN0S+ulX*;{PO#KA(Cft<9p@H`gw6HtI0P6zW+u47usZVyyna6JJ(mE8N%y&uN2aM z{}8-?cH?IxzNf}|3o%D{_0zJ1On}xu`%m;&!h88){7IJlZ2Z)%ZR`KP_!c>hpDCyZ z#&aPD{ntTJD&twQ$$njeL zv++G>=9{IU@Or(gP{{gWJWcBf@8yT}cB`fEpZs9|!12!|FJk=Uuk2qBU5XSnewv{k z=>MPa#T>8so~&i_Wj_y@Sa^;98|-h{AGW3y-pddB;pIogO}>5b{ZQ81)oCS6zI-p9 z{LND(O}=Yd+I;Ch&R@c7zI$*U&hf8)5Z)_a`kecqw8{6EI(B|pKb<3%alF=ZpzoW{ zKP$XmFMdHiu>MCMD(lAgil6cPdRlm`pNG|~PtI?p`@*ZwSh$|DK5MKkZ~W}V_qI4+ zv$|ApyynZ_4>R9*ohmwBgP4yFJk=%Zz{Z(AJ*G} zwAGED5xAda{Ao(oaJ=R_2Kmy@fj@-TdMG)?)-&hp(x1X>zPGXeA)hl#O&5<>zO2uv zscV~jr(plXe%m}^9mi`u^uhOb8Be6{!mA&y7y8V-LU{F)@~rhk{?$(5)lVaQuZ{D2 zGE`k(Kg>7lKlO~C&;j~G*pv+%ule>wJ+PijwH03T9lqW_-}Hlp*L*kP`-ZHyEvJP4 z+J-!D)KS!Pjuk}zB^}zXRkgkdG(;t2qfB$^KtDnw${rz07BE0&!U0(hH z?VpUN=Um~v{E)BOwwdvBwwk@3GXC4wnwxz2{tx-fVOuy}^PRKD=F9$;FoE!z?>gkm z@#D7<-YZ}Bhf{f5x_EScvtfQ&4@-NsGJd86I8PY2tF`gN?|n1=g0b2dKP7kg`#G3R zc=hu~Ia?3(xjm2YUVhl$g5_*y^4*B@f8M`uYu?`E+e^anJRch}MtJof4*nTWj%&he z{S@qM{cwIuz7$^l{Eq!6{fvv)!Nu?8hwCNN`;NxX)Bx}6wy4?J_!$(yPwf%HYrf0+ z*nHV<@68cj^DS3Q{sHX|yk5M#AiP(;|5g8qy1MvvzMcknpJd-Q;r0Bj1peL|;~yBV zyYa*O5w4d-d4yL#Kd!WXSU<(92(Nygm9c)9Z^wB7d*pI(g!SO3x?qz%) zgHN9Cy=vdv@tW@{oIj9H+g*6C`04YP5yI>Bo$u#xy_cRXy!woT{R!u{f6u>u291;nff8 zhxv|sJHq695a(C)S$FhEu2K`;Wc0WzJT>S z?w0WCe|~XWpY-!_{}|)v8@#W=^|kK)SmS3xfO?DGah&5de!joQc<%KQ-peQB$+T2> z^%=ad^~v#L?Gj%7)D3X{nSSU5rN9%_^>kSZI{e;5%oaFy5JjM8ljpt>I|G}SAji0Vko}c!&^bC*L+u^9>_OcAiVk?2LI%96#B*ZDH`DYs78OyaJ*Oi><=X( z&oq7};QQmOhu4XO*Y(K#A^Umf?82*`x&>sybU(~|*TX$%>ZP^yM*k__3a@_d;P(#nb1lm}E2QOf7jdME#^ z`Xb|}EBvq?ZVnV){d5a({uU|2662>|Lw`T*N(is{HpKle=W9`U;k|s)|M)(_tDlze z!}^@xd#Q_G^G$^JZFoK(alY`n9y`J(>-j{&ZzsRP_U&h8_;mmkJ+^Y?YWez+evyI**XzaiqM z|KK--SDyxcP9 zm@K^J8@r^~D_~G~B>8D<` zt-gN97d$Dv`YD6=xX=ovBImL;rH$D1z10St`=VXM95^<3&-#F)gQ)B(*S;wl-gyybi%8j zhgq#3#xpIz9f7O{4B)xyXdn|y<@(9=(FKc;Wght&nr*w6khZF=eq4b z96$Ua;nja*tatK7uL-Yy9%iuh!})DL77G8le%kC3UgxVH>XSbA7CvMAWXAb9@aiWj?l)O)lV1w2ez+fIJw(lY)5Y)Qhu6F0LvI;BrSU$% zCHy^@gIVtQ`l0`*xrJ9hBXC~IeD72dUj0l8aQ@lxFX7b>_XCV)d$ha0ei%=-!G9S) zrO*L-<@!SVZl^~Ct( z_vpDEr-plK{3OTsbGRM{&3*Poe%fypUj5{6X6uLf_Pipz`ZZf)|Nm$SK$X{Rm*7#vP(9eJn?;P*thxvvdBfOr^uMW_EGDP~|>xbk2-bZ-# z(>9Xz!}`xYPk8lHI-9?rT;)F+Kh*{Id|oqUxA5wR-^2W`dM*_d^z|?Q|9dz)asI>k z+H*0OTdQ?T8f8@mfD;@I3_X2evK=<#;bY0(r4Pap^YED zpTmA0XJ!~*Kdhf+;lmm~6L9`R{_D=+eEo2~&Ri2-{q(MF{gChUMtJp85$DP5Cr7V` zH-5OEVLhK{^_B4xXnkEfB)ry7JDmS;zLNgW`z-&dPp|r6{C#H#uYS_v`7+1Puu*vR zQyKSP^f_;IB;$wci}8fYAKBLr>$%}j;nmM>od0k=HvZ=8FY*(us_^RPK>=GojOTJY z;nmN4JfC7cbjcmn_-T&*!}$Bhi012u<8Le?y!y$4{SWySH=_IcVZQZ3eB*falPZd%`7su~%LwN1a{N6SFG>9M5*AMISyF$XNpGUa=;`O)Us#v~$SkH;x39o+I z;dwgyTb%D=yYbaeLOf6B_zR8-uYNkAemK9u-o`P0_&rRxX>leZs4s+j!o`{`2m-@apGl+#gwndZ3l$@SZJgYfF7dIf(!Rd;4Fez?9kUrh#QHGaC`?*}vAiSLA0Kin^IzKTD~ z=Ie+3vt5Jij#oc(%UeH;e{gT%)lUO_FNN{6ZJfjS;r#{q#sz;ier5!CKl$bk;l2E@ zJ}Ym}>FbC7o5as${A8?P{c!xmS%g`%KEGtF^}J}f>n9w}=L^plUi~agZ~f5c$KQolKa+9( z!+O|Np_uW*{WJa47*gE$IfeZX{ntoV!uVnRus>vZExgzDi}7!-Q__vEezN4VemGyv zx(Tm-isJl-@y`z`W&8|6{qTBmt8i)Kr#7CabNnpth1dF_AI@+6y=C0^UVb=!&iG}G zp90mbAJ%8ytir3Gx43_2J-qoKysod2@Wc2o<}Yvjl*D-s=c{Ry3XcC=KM%$W@8yT{ zl_`Ej<0mb?f6IK6<`G`~)WY{~$uEB>y!sgeKb)_S;VK(H6>*+JKQ%83uYP#_qW?$r zs<`pJ{4oBAH-*>rwK=nY{mcof>c&?;CD4Dk-kVMnUi}P!AM(5QR5O021vt+sIKH~$ z)erkK^Zhw}4PQU(KP!d^uYUf?@9!tZeBsqk5%eF%Gbcw)7mxZG4nO2q53FVU{Dbpk z?tjA6scro5{(|+{AgGS7ANG^U1%y{W`?^^_tj`*CgjYYgi%Phlk8nuxcJr2m;ipNA8Kj*L=5nIite{t`TAizd9${5yq6#PJk(!!^;4{`tsnY) zG)s8(QxfN^T#wMr5c z&x1+U59{adRpHf72E6~n`MMUiqwy1{ei955Ue8x+}TuA z`6O3AUq9SWo>?xu`r&??>WBQd$A#DR zbsW#L=szg(AYVVsH(E2{)eq~3>*efR;nh#Wg4Pe?X}n)}^|KlG7wkXfj}10{_&l4HX zw%+r7{jh$vRa#*D+>K)W(0}Q6!mFQ1+5P<#nI^pY;oqZY{Dr?==;HZYK1N&1_YLs< z=Ued?8UNLAUQIuthYPR%n@GB!p64?D1PK?L_z!|-{SPlC{O6vZd_8}OnXeQn{O7Cx zKH+t~&g8W7#eCoH{?(1I`Bp{z}lKbZy?$;G2U%n5_c;?*{Ui00F>mAoiuX`(f^QF%Z*;kuE$v4n`@B5M)9IyG7#{DMqy*+5-7v)(f|2tcTuHHW@$M?=j!D;WryU7x4Ww^0{kl@%6*&@AwQ`9k2P8 z`P$5`{;WgjyGuwRWr^vu~GUk{0X4|{phx|`z z4;epW8(Kf)+m{qx{lqII0qOpnek%QX*!UTb_?d5xj7N;0l(p>jj{NEBM}70eYC%;P3s_BYmB{^!DL{clJ8)BlDPCw=oJ-}F!6wVxlX zX7gqLZ~Bk$nr{lckIMKD4LEJ`9fA3!|6R+3*L(-!`;Dxh(QnT9=F9O*cm31xn(q>v zS1|r3lZDrOyJ3D=Z*lUTb>r)LOc&CA-+=LFNp;Tn845p)r+RDQ)z3-%{U*i}wC}vH zANJc^IWHJLqkgybKt8C3@akuMIY~g*JL3r+^ODJz^-n) z^X2%Vvs^Lx#y{qtZ^c@|YrZcl_~)A=+BK7Jp!41i$%WT^_v3wR*2C!f*M0M4zpC+4 zc&-0#hx-z#7G9QgAylkc|8Hec35^?Jf1W;#&)xVM zKkJ$PZ=@4m`@<>xJs|oy((E7Kd|7Ynj|;E$vlr)+^tthc@LCU*S6e^i-$sAo;!!^v zabC@Metq=P@tSY`s&>6_{5MHo8J~f!FQc-(_VvU5b7`IMn(ytSHec4m+mpg;zC|iZ zfqLx+D&Bc(@_mhd$b1u5cxUou{ji?Pg?aCrFY714XyLUU+Myme{*pz)tDnK>pX5*P z5&n}O^iTRPvizg*lLNm$qMysbgM$6%dnvlUI*R^J*GKYQ&Is?-9~jT;X2IO}ns3{6 zwjNl|UyT=D^X-A_BmGQl62gtI^8#DfabA;D?*$+9t=Zb`MzOHmn=p zD__o6^asLgJ!HFN^QF(8;lsJ{HQ&3HBp~e%oUcKr!aH8)D|&$Wik$i@<7W%*7Z^|d z-omRNp1+arlqZ6(pS^gWr^j94)z8Iy)(_`vXq1S?&ok^F=%>!ZNG9Kocz=)Mr%N8$ z@tSWh)C22zW8^5l`Lccn_7Ps^>kYm)%keL-5?=jmT5tW#h0o{5gxC6sT*lT9^NqP7 zs__#q!2Y4?Y2npRp!IU&QZ!#bj3>%~=#JNX7vuh#^>*f0;Wgj;=nt%ip4Yx{{eD%K{{#pOEy9n>qZ@Ip1=8k9lggavW zFyFzogjYXzabCgr6Xb|*{Di~b6Quu5Glf?_JinsP!-cwNu&`QrEk-+gcVR7St${LU(!(DCYLfV8Vm`!VJ_F2)aE zq6Gwk9@y`e6S?|M7ArF@AWz&wAT? zQ+TiXVLe}N{G%IR{cJd8>xcd)3>IGf1jBk^{GF#JGk*B@SXuv(b_%ckCl>zREA!2f zI=S%^=zXo>tA+RS!+fhYOJV#x$N2_-Umtp?@akt`RVirQzj3{s@0H4puleT3`_J@Q zI818eb0X@Ee#(9)ysj_qXXyV%AK|_HFrF|;(ilJYaURHgla&!({WQn=BHuDsI^!oC ze*eXMo5e`)c+HpJhaum;l<=RM?~4|~>w4$kZ>7%+Ia^rjXVf>S(39o+m_f@&R)~^>{{UkhZ`wz#z zeo=V!^CRw$IKS~jWi@^Z2iVWdo+Z5c;dv3qZ+l;OFF)K*KH8Se#iRMwMZV;3UlLyP zZH4n9*29`e+1>c+zd!l|>!Hj39LCRjeD9ik(F#91Uj6WWB*tHBlklJGC;PCR#?QUU zwjLPI(8a>5pBg3YdSU(CFP_Wz=?OpNuMf&?{5-+$;}}o85P6Irp1<+>yKJ!VUVa$Q zoRWEspENV9AMUTZwh&(ZWGm(GCsnI_#t;8~E9du7!TiS08|?S!r{p~0wSKstVZKo+ z6>#Hw`C-00!xS`rW-qsX*nd*|B)s}*kNaiL*RJ0R89)4ctn3fLN)|SL24TNPKXtDN zuYUNx2ge_osEDs0&R60vMU9_{JFFk_%aaPPexe1qUdLQe%=qEoV`cpRL@93kdx=z4=af=kY;dOub z7W+fiPln#5-T3N2vwgbt!}XGMq44S_B>E5I&oZc-8(;Iy ziv1qvYs5U^^?Dbm-qL0$Z~XB5it&UUE&S*DX_B*o@e^gM^~3s^(@1#r6CCS{{i@M` zO2*G|?Dy!u@bAK_pVk4cck{AVHh%d20PCS<4dFl6PpyhojGrb)tsnY-)n0h@QxE%L z=3BQ+HRI~ z&U>3?5MKQ>C@KNz{U+mi5T%y!vj^}0laDk)crQP!=LM^U*Z$KNet3P!{YLoD^)viv zZR4i`zSqk42Oc~WUj4Mjc^B8$Z%6AIKPB)!A^oH(ThH;DFVFWlzZ07Z@8y&6^w}r; z=laRkzrOL4ZH28L`mZxvc=gjC`ybBl;sXthpNe?@isxgk+ck2$SHAQayqECma~$f2 zKA%qz-pdc;pW3#u@iXv{^}~2xj22$~?8A8%`3=LG8bAEKKl{(H3eAk47U)0hZ-p8N z@0Bm(c`!hD^~v*9)x2=sp<%?eg@( zWoI4rRn;_X8lz(WQ z&N;wZ{CBN=&s=-#Q`T2Q;_wvK~iB(H@txx*r_#MM^GJd9RwtiS|B~uBn zerCWAsAeeUE$SFE!@AO{~n=x7(WLC_CM*53-9HJ@$XFB(~YlwdWW~qCv(1Xw-#Rg@b{(} z|G_=NtDgzGtRM2J9|*60UcnFNH|yjT5je(OaX;^I+1k2YC9thY_sg;zg!asI`AeyQXz9D zc(4A<_0p%zC^x?P;rSQi33F0-&G%++TMy*d|0=xt$eqN{cOX2k3JiY72eAa z$8SGuit#fZ`ycvzTy*LO`8j`6c=f~jVSTQx5@P)H{K?L2r`7+@8&%KXle2|}eQ-xPQyno96*(T9U<0r!a>xcOk&nLY4SsTz#Li!4? ze%P-VPwNP?ji0LMKdhfOSB3ZLKU^;b2G4Qhs~_%vIDW`u;kExP9AW)%ew)Uh>&90< z53%3l`BBs&!h88)JQt78Gk!Xt|1jSU-_Ccum!EHNy)NDh;nh#C@b>(I@r>HKz>Tkd z!sC0h%=d?j!mFRoW#td(evkEbp!PyHzWU+%V!ok{E;4==;`$H!)$87ief==s3Hg^e zUj6WU4veSHHsRIJmtWcX;rK@`2(NyMV||fto^Pq~!|zAY=j!p_7(Y>PKa2AfrtC6b zKU}{}3NJT)x}$!$|KHnBc=dCmg!RMqwSJcH>SrRpXGs4Y;;-=a!+82vT50^G!~HDQ zPnG!J`ubt~PyZBN>!&^ZF#frPR=M%j&u?}7{S0g(y!vTXQvQIhFV;`3$HMFSV*Ril z)7k;rR7WZgAskzO9ij$KQQNc&(qjcwU9)*Q+9Y zZ~U~x@r(6YbHDKFhu=$N|G9N&qw$kC;QZ_NL7N=^zJ9)3vf1&P@2G~hez+cc>=9n; z;U3lt>vPX7;njaj_-Fl8nDK*)=Y9Q@8M(#yX^rQ3=(A9jt-gN9mu$Yx_$lAR`eFUl z9W1>1X^Z1E>oe(0;nhzA_+dOd`)v31!+3r#y~FsqkL%B@&w0sqevqH*X?Gbv$wym1 z96w40;nmMDoNv<4tHZ*ppGNS*e7g_&(bo^h|E|(*b!! z{IH*deX`&9iBZ@3Vf~DbcEIuKr(Qt+sh>u8^;0*Xep<#pX#B80GoE_Kh1cg>u3-Pe z`7QDFAveC4ANnu%?P25RO&jZng>@tZd|W&Bh||Jjf8*}i>*S3j@NpXsww*we<( ze;?<0*MC@_oev7HeuCE5k;-R`pJV~wr@j1#@LubS_0v51IpZfi_Rrk!9m*uU`biS- z`vO~63a{(yzn2f+`C)%vFz>vJ$IB1rcVV;(#?SSD{*!ID@Lqm6Usn!ZG=4sv;=jHY z-4R~>tjF<-^|QM2B{#nM30hyxdR+GP!}voT6JGmICiEYk&kmk&#f|UfhyIt2y=wgI z!}H0^cfow&HQz7MPdNVD9m1>6=6Ifm{o$*Q*M0qvZ+1v{_0uk(|NPzH7hgZjH`>4( zj@Nv7{gCy4V1e*@KGJ)Otv9aUL_397KY!zSRF2;=$1UTB`ycWJrU;q`gu+kMclZhZAqGoW83TPD2viI0B8df1%yuJObE%>CP;s=}+ESol6C z*JF+e!fU?EQUB!g{VlxLdSt!DsdeA@iC53RezJWfy!!d4xCG?2Uz&XWfg4}rKZp2P zKPkdK^!3Sl7!+T4_1Oo%55jurc~E#SKb+t8jUO35sY+Qt?1z*439o(%d~W?P-;SLg z8$S{8Jz>_*vM5g+ulfFg^HYxBDUR@7$4B~UJWY5nKdiTrsedStJf z>xc2INb`sB6B~XwUyF_iuYN+~`VZ^BQ`l#2eD%ZMFJr#gOh||1h4bPlfmLL;vw|zi{Kfub;E4 zUm8CXlUYAp?^6y7uYQ^ovVJ(f{b#&#St_W>xcZf;ctzf)bK<95la4J{H(?OclxQZS9mW!tmmf3 zh4-o-_S-uZLWlYHdscdUuZ{0fbNt6$g;zgg^7;GuzSd82_+h@&BZYOmuCLH| z{*Ziv@xpug;re?Z}+L^3{qsB3+4{NJw&uRcF6 zVe5_K?@axX8(-r&i|64v{*>{NjsMzMkL2&q5MIY`i0@@Fo?f3tapS+Q&#ile*ZF!T z>ApLE=lbo^F{<$y9`~<#J#FwH;WhsAh@an2n-(gX8(;ko!1YfauPaQ8ZhYoL|0nAe3v3$@@tL=ul=@59{as1_J>2~gn!?94l_Nr zi9ZVBVLzYVIF6aG^ypXg`FGa1X8d6Re7n}d>-_G*{YUyQ^Na90zbkS`0(!p2c)FL1 zXW|bN(f|3JG}DDw|2Lxh`(L(1`1kd{v|4=QXF1~G{2r*Ez{LLxc=|c`Lqaot>qs_V z`gy)rc=dmyg#G;s_J;|16S?u#fBb0HKkK^nY?{3gc%dc>1aKFs0)){zzeM{H*`U zF;Y3+%Mba_stB+C$9$8@_-8yz>Ikp>|1RQZ{jAt6y!s4(()y&I^5aq)KiMO@aNgA$ z`9@vRI$q-`1D@-#>U`nVXNh>$C;8degnwV359_6K@u<%kHLXwjudrEo^;7wPzn`MJ zh1c~v7WvZu_f;~ucr@RKscgPiuzzU3N_ek)Sr2)?&S>WA7~XR@ zjvpaXZpUlBi;yql-#SNlt>=*3Heasalkq?G&6o4LHG3Y%Yd>j+csO7C1_-b9y!J^7 zQxB}q&ijSedN?}E`XOJcYCac_=GzbVE4lyw@viV*^UL^q=FD&Ww+hJjj~@y+Uh}P%{S3Zn=j*8RV{QKscJy~HBfBOzLe%8Zxm4(;%Z;bJe z|9ZtD#^(hbA31*6m_<##j{j$YuOZ8{>O=jK9`J;WhrVUG4FX<0lDK#*MG>_q^aA|LtVLd->#gTpyvl$@g3A|LJpZ zN8z>qOv3LkF#b~mh1Y!7_p`fXD_YdlXQ+Vi#l@$;GR>L(_i2VguSwhHeRKl@vxpM}@@ERXr3&z$S4nS7&$OJj~l z9RJ}Z;Wghkv2DHsu|It9r|_C@ih$o=%QLFFi^nTp`b@Mzcs>3O$N4+wYx+kuO+Ckh zACAAVaV_H~V;+A$i-!xZezqsHemMT-O~R|6C-{99_J`-SYk!cRS6Sga z7GComo89Ki@w=sNV)DI+`sDF(-frQ&@+BYcyJjZe#K@O?)Z4;qf3A`ut#7}29ICk+ zU-Qk2`&0CD{JQWuzl)pM^9Ax3C$wu#Gb z$L~;Bc+IyozAwRg+uXdf$+sc;E$ipx-@<#JT}{5*ezy6N zkMTr!&G!#{PmJ}PCT(|>ns4+`&e|D#z$u}&1uZQ{8Yw?xiz4GOHd6Hy+<2C-NuWbCR z=S%s7*ZALlVdsnWwqmL9y1w{48`tB~MFUN~`_bRXFU~#4H(&A_FAO&MHp!jNx8C~y zDZJ*Jw3*G9^>FCM5I4T&`$q70>xDk2=O5~LU0?CBz8L@BR>JG?E;)|x^q)KIFke69 z+w321{IsfV{g97*OL+D3QETgm{D^oXji0OVLwdlkKg#4= z0rkN7Io-fS}i?zkSse2bnJ-mCr@|7UaOn0))CvH7yzl5P=R^Ig!`)<65nz6|r+_!@sGTu){^ zS4#`8>xJu`e5G%M_sW;g*F{-7-^HW#upRZl_(#`TVEptdY5j1%+Vl}#{jh(M-+y_b z8(;I?hxNkxum4PV^_jMbT`!FPK(|G1d@nyd9;NTO#N@lBuFaR@H<~QG=9{pUtq11& z)19Sme2sqr;^+L9%=L}&a}s{Y$0{zoSHAR_t;aGqzScu~)B}&FT}muBen!1XYxa{I ze{dt=)lWv8?~ot5dWG?G3*R5ukL%T+TohjGXFL4Rf6tgJ-S}R9SP%1GeQWaF5X#mA z`8M%ZIbQR9ihS9x*0o)2^39LmgQK5tJ%rbMxn7v>m}|m&<;!@Yyb)gOp)~4&T^C;SEsgUj`oC59dpExNj|KnqGr8bK$7{X^kuQ&5_e%(`{U<%nr|73( zU*Wy{u>VvWx!L$hde`;`j{oUm;nh!;|9+4{>w$jizWKq8ukl~P?~^j$N!hj-Kl|Z_ zJ|C48-YZ|mljW@NI$tmGJU`bi<{x=X~WI z_@nW&wyyvFVdysDHD4ZISkK|^2=C>S@jOqo*ZAq3-TI;b=Xr!zKXq|F{y*{b`^n^6 zy1swDE9MEWKKc8_^nZW7@Lu_{KfFo4&&8uY*{>M?^{e}hpY+G=dZC}%uZ34Xt8l%M z@$~-upz)I|;Cpl(h6w+@`Q8e1$mF{Y>xJ=bYa_h+=kF1duRr0i@iY3W^~3r4bEWX= zXIa4SOZEwK)c6UD`==a#R8`@<{BXXC&lg_nVGaCny;OT~%*CUAz6)6I=ZhaVei}uv z>x=y-q>=FN{4|h&^mxR4@9jNd{M^O)9qV~}@}C{=<%jdTxtQ?kXAAr={$8Cu}WMhTbeA@?{&nA8-y!xLH|BUC#!PCaiG4xyddGS#A_x1B?))_ax`q>FTS8%?t zH19d%C+oVj=KO{6RI4Yv`sow!y^;7O&%5!}&s6x~{-noL;dMU~BjA1QDBFbh^271h zmbhU2tbiZZbN}ZTji1WftsmBBt|XTnuYO|U{wDd86)!tp^DT|{Nx6UMGfH@`d>Q}L zsluy&{(dq2q|STA_+fwMdO5S^s_|0>_rDm=Uq^&jKP&P3ZuFBR`gP+cBCdBao|$!o ze_ua44hXM)`1{2iKS8QrjGtAgAI869`wio#$1k>ixE=>w5MKS%{qF~lwBNFy#EW^$ z_^F2bgN*05w8DG&;qfI|#oKOt^)nRfm;Cu&!fXFo3_q;5Q~iH6e(KM%e&|2cV&T+`s|tMsqr%$ekR~} z{ryzo)lYBuq5u46gjYXbzxDU?$y4Fg&jnnsW4;}#|6%-;#D0%HH#QXB%Ma^wSB5{0 zpJDJrpLJ&luYUM@&5VEV65-X)H5|Xl_t_=9`e}svVf?G(JvV+5;QLqXKbx}%|Gs{% z9C%^;@b}p{{(_1x9k2ObLB5=??k$B^pWRV!?B^#s3a@@b;D^5e4!uldfzdSQJ=swBLZPv#qS=3C=uDZWog ze!wB&z5Fo#et-UB{Di;{>*4Plp~L>)@6YUsZv8Od@|A>FKUo{fAJF49`JPLJS3liQ zZ;U5oS{N6P?w=zCoR3eLEByQVY4kd*8()uK^WcZ^H+&S%_&K^ZtvR1!fBrIhc*m=s z?g8gh;b#f2e)#*&9KTt;2*yuYyl=(&IoU#ZFF)*W^Y2GAex|_><4LkSlJT?PkoCiU zm3Oc3>ZcLT7wCUf|Bu}GUVd2r@#04|ern-;L)P1a+`@bL;rPd9L@|CQ!w-GdXcN`= zsrak)!+g696JGsf4!B>Ct4}mvKdguPXN1@Fl`f$FEDRgnjql}$`Tl+KW8;VQ!+gVb zjA8tI^u+pM{UjPCy!shhPbNV75BKwD=EgLB`1|0jhqot$f8Tufo)unwR>S=W`q{lZ zw(&Cp^}~7#mpP8{GiIH?pJJtjS3jrGf0*x$-f@i|{yr?@sUIS|<{Jv%CnW!Bp735i z$zN$2-}o556A!Xx$x?z46dK^edN*Q6S{ab-w^C)IKNG+3$Oi( zKIuPn2jSn>Pu8l5jh`{_!+1`P5nlaV{nPqkKOeD7c=eMN_v6@4Qp8MZ{QQLLIb4r> zlL+tShw&FED7=>+@`)NIH-5OjxW5fKF1-3#7}M^5$Uk`?y!uJpNG3r05B=QuD5ZL=kO|N05FUU>Brp`!Kk zKlOhqjj5mY=qKchUKHNTC;h}Jl-7-}e)xSn`p;7!z2i0CZF6kCj3<3%;dMXROVWM! zeE5Ex@6T)@y!u&->s_qprxQLgenN0Pnf00E8{xhDF#fg?Gx+*pJVkD1biC%<75TD1 zkA5z^`iy(t`lSE;u`{{x)z2^0gcirt0x@y@4{>Sw8i-g z{m=d_tBXhTy?oQ=%k{M{QZ|$C5L_RopYJ~rUj4J)$Zsi@-Hrdg`Sz$Ly!M}N0oR{H zy%t{maD6e~$@6m>KkYYJKa4-cPT@7*mQoJy)))7O&5j7K_0tgdYgnJ7V&r!5Xucb8 zJ(+ys1j2jyBwuZp@am^E>SsUuLybJf&xXs^5A*%Lqwt#VQk+lGXX4eutIsY0KIW9xOvLDVZC%pRU z06+Xb$)T~I89#aPd*bxpWVP_`>t}wQg1&y(pP$4jZ2Y9d^EQm9eNN%k&t^PtL!YlF z2(Ny6zz^%;eBUB2p7+f+#Vp}U`bCW&_Givlq<=m)e%ju)>x(`QCn)B4 z^)n9rnf&KPgjYZReH`*#zoP#-<%|3J;d)=tPi@$i^8j)|Gr-H&JX$3@k+aRG~c?oo8M=;;|nS|H<0DsS#>$h*(n#ND4an=v}XTy@htDm~?!+dX7 zt@S~E64e%7{d`m0|9R9(^=lhHd_ITy{uQB)^Y_gr}VJ(XN|ul2}&8!^%s#?P_v?)J;O;|2M*1?qp0pRO?*I9~lk znc?pzRA%ATPfqw@J)itdc&~g}Z}Z|cG(P`8|Ka)OhJ=lbpX>0$`I;B6vGK#-d)kll zk>MwWS3jroSwF0|Do=%1KMRUVKzjbp`P#PaOBauqACAA~g78{zv2eYJ{IYFLjGr^` z!+6HuXzJ^S{Eo%V9It-DSFnEAe-7;wUj0nN@3XUiJ{i^A*AMHh&;sGrPZ&IJNj_G~ z7RJxD06z;?wKRVCd!ScPKe=nSGJe98vwm35D?1CXe*S;C5+{P6zBg!)~5{cyf|tr1@PPlmGA5Btd<=Y&^3 zH?Y3w|LmS_E*>vGjHl-X;nmME{C*I94u9RgDT)`5u}ky!zRI_i@+{%Vgxcbe-+1BG zPrHEq;oIfHtDn`_|8V?mjr#fe;dR+vZd=}7yZ0=ExcF%;e0)gH`I-@E-pdbtX4)dW`nfvA`XPVlwD9WZYurDj&%%dCxOlw$u)j^cD!lq>6>xlC zSzwg$vp&Gj#`(glAD+K6{xLrauYQK%{xavQ*k$3>PaOCmzjXR&Uq7tp{8xonKmBn( zk>jr{JkI!;4?pB<^%P$7?OV;(!({BAOAZiTee!t6<9o&#!mFR?B_tr-|9pe-r?(vM z>xcEfZLaX@=Qr$sxE}W!mFPi0nZ6!|!ek$j* zemK8l`wFjq-r#(J<0n}wy!z<|KU|M}eiq)VKSzb1ElFp&eAUl1^k>%pg$Q#Uulas= z-hOYH>-S7j;kDkl|Ka$D(h9GBR_Bz2wV%-ExcS0+L=W1 z_WXYo3$_rgQnlJAUa{OK$g!l4E z|G8%huYM8*+%N0ZdWrGVC9m}}0mq9OgM?Q<5pjKw^ObLx@bBxV@EhUPPdn5D*Vn^> zOI`e4ei%=$I>M`;Lg+uN|0CU(oB8UBcvx>2`wOq@F?BubljFabD!lp(jq5p#zv@Qe z)hGAo9DjA>6~2C0pUvtBuYPvnc}}k1l8IIsKSA$v&G}S#_0ueh^+TV>%L}i5A{CGc z(Eh`C)(sHe%MbZp7lik!ANskQXtm2%{lo}3|4OxMjqx)M^~3d^=$7#6XMQH@hwDAt zYvI+;b{xN0KVOtz>*7&A+)vW~_-};w@7vB(G{mdz4>xcE9r}thrzWVtZei;Ad)xvxE;qj>L zG2u1e&vCxM_$!?i-peQJxyz6Hjh}oIZ2ho4H=P$={jA0F6&!zT;{(P|(DOoR`U&sl zhwJ_EA>q|e9DIM9^L72a@LqnnUMh_}Z2a_SYW>jvsMW%2Jq$!W(9iA7!mH1A0reKC z;t>~*mmkK{CPaAkvl-8;&`-H#!mFRAc%GT{`DDX!GrzL~@*TWOcs<_TYvu1V|2g5+ z&)(wl2ehBl=cJ8#Q^wB}_~H7>`?c`u=g(L6 ze18}E+pF2atDib~tsnNETX%%_svpj8Nc__-e)ZD{`x*KgP-JAJ#+OS67XnBKSQr`nmV22-X+#z4JhL^)m|f!1%YMxas2Y@IkoXj^lnh$4?UZmhsaB^~3R3^!(NF8b8-N$G^HtcgTJ|w%*7W=qkMW zse$Xy^j~Yc@LqoC^M?cvjGwo7o|%3Q9TncI|FC|Zo&L@ESqVQ}FD+s|a=iL^^4j|0 ze&D0@!mFQaIKDIfW}}7o^271to)uo}=V`$HaL2I6E`IeBw7!mwcxwFc`>6Dp{jTup zr(;UHzSys7zZG8nJjVGx>+MX3}$C zKO8^uhL;^JJS8*>xc38{U=no|NH%`;z{g!q0evPhIYLADTaQ+c-Bu6{(b$-Tq3;gH%3c& zzI)$+@f`-o@;*yuRbThC+F+f?-7h2_Gj{;Hbydj_GYwxSkLVb3$OLl0QYM+ zUwN~ASL_;-FIy!zq!9pia5FS@TE*5~yM zF^r%1^{pTBIm!sHesbV`G3R&pVd1^}aQxX(V;Vo91MdIctS!9y=_k|mu3v4y{H~r6 z%hwP6U#%3!_*vG)-_N9G!mFQHcpi-TrkWwVmmjX**YV>TKZo#sI^!=?NqF@$2!2?f zE4supet3Lm{0X8ZFn;R9_V+V9mGJ847u-*0J*RCYyq6#L^E;P>*Y!0X=TnUT@*CmR z59^118W&CE>xcEfVP9h7=S>Fdhx5Dcg7E4m6Z$j9uahT<8{f+h<4-k1c=eMcpg%7S zlhlo`e%OEb{z&QQ$&4TNXT~3@U2@}RPATh$^VMpk@akuF!1L{+!=>=`L;q3h2(NzD zVn4(9XD<<6{qzl3Uqj=k^7X_0;kXW|jh}oytRKen)ezy;&o1;I_J>d>h4-o-`l(zi zjf+S9{DkW{oUiCNg;zi9KV0vpucS48*nf7RpU+O0-uSunnf1f^-;rN<^|K!Lml;pO z1;TszAwNICC&tfK^dI_6GER8)(;4+cpUu`~Fn+kc*bmno&uIJ%!}DOQhhsN|S3mV| zd?!DyVZcd{aDK1%$>QsW<8L0H)%dwK#@5e% z)Z6;S!mFQ(0r!`W7Ru)9hx1!2M0oWx9M^L=zp=7pH-7j$F#Gez%W@b$Jip-lUivPl z@zZI(^~3nP91&jqJP3H+J6@DrzJ55rIj0G)e!dRaA10WR+xTIBX1<3Td}{pg{tn;2 zJ2Nm}nw;l0)u4yHp`D%1ucwJx3vA*bM zUW)w2Pf-8qm7{?1bH14M!+ax@6kh$D#rYR~7G5U2mmk(o+hm^^KUMJke2yREjPUBG zKm5>VsQU$tpP==X=6oUJXJdQohvUDwFTDE6iRbHhJQ~-dup8gY506KkE(@>qa})2U zlP`6wh#O!1aDCDLqUS}8A3i@!|1 zTX^-89^Z%Oe2qL>-1zB)`k|lPJ4+ZptRKb`W=TooCwgV;hwC@p7U9)TIqaXgzlsyP zlpFtj{UrQGc=dBCuf4v(_|F|EZTz$j@H2RB8RLib!}^cWxUBJ$2ha1+PqA*otDk1r zKXbnN{35)UAI9^0lX5N|^)mp^Pts3F+w#Uw(*Qq(TUPM(!|`85tZ4jX8Di^)>-}O9 z;nh#0@)D3Mvl!odWc#*5{jb?9y!v@m*VYf~E$$`Z)lZ24KRFWBb@6!lVLUI^3$K0# z;(N37`Rkr~#!nOY;rxF4=NHBg`!nk&PRII=S3fh`SU()U*bw2>PfhsYeD%01yq6!2 zzol~n7mxax3_tYQU{yoohwqCqo=+k*_VvSlII@lK>gRYL>xcZZ;lit*tmS0FwEr;Q z>)#9S<%jcix#O3{&(whP_kCY9F@D&e>1XJzrp6EZ59@P4?q-fxKefyF`&n03c=dAv z=NF9U^-$rx{IDKcW@~QzEYD&45BY{QS{Oe;`@>DETKf9o{Kk1Gy!z=`#rom?xk%_% zZhZBV1@}+6U&>NlcrQP!pEdV{*Y%YS{h9N7{-4&yPa7#`&;Goue_P{+`)9`UaE9>e z=P}-I;(VR|R(SO@3+G?-IVNR07mt@8&R4M|!mFQ%0oUjMh}6OO396q6(>nV4;qhqZ z4&l{L_-VF&=(Eg8;nh!PoPW{ht4G4Wub=RXJGuDP&rLjU$?>B{>tg)03aFniT6Z;m zc>S6EA^BIrtDnVqf0;gipDw)mxr*yQ?B_4H3-9HJ>!nePZpP25fb*}+ySp1djRX87 z&(+h{5B*mvD7^ZKRms*5>wi^M;nmM{oS%|UGDdhWKaA&o%3j9L!+`5!S2y-HezvpV z%3m2jUk21qlI#5)ulaI+$oU=cm+t~4!tV8 z`q_s2gY@}p*+Irn(Ec#{%E7*V82_?O!mFQ6`K=!wkGh-^Uj6)y{zL!g{u18H5BtyG zbBDP2)z1?g-|6#krD4WT3)Bzm`HwEc9k2QRT*2nc{(Qc_@LF#?-)B5!CJ3*7czuk1 zqWvVimmkK{t=BMZocWOu4bfPtf`4?pjKPmaGY?s(&;PQd-I&qGZ#e*XLO-S76#{613Tm%{7%%7FV>^wT)% zBsaeL`4-1(*8hoY!h88)z165Cy!zpOp5uo*FTD1j(E-<2%dVPY{QURlBi{L8|5>(v zs^itq_!_o;7GZv8{w%!uIgj%x`h4<6crQQ9w^@M@7mt@8`aC#Qc=dB0=kMgtHJNVw z@cJ126dp9g_=(iX`eFa9Fim*%b1Gmzlm3YCUVb?Kv@|n){jmQGts%Vn$r^BdHF<~G z#t-{5z{k zg)V;e^E{yc{Izb8@x%Qy$1f3WiSctajrBu*KxW}J-(rPi0=%vVhRQ3vmrwSed~1YP zKkU!kA8x%Yy!wfX_bC|v_g{Wv{P6sp{DkAnjGyY|tRL2M=3j+ZKh1DGkmE-Wzub-g zzJBfv5MKT8e23#NnJK*bX^Z_2>%Yg;mBvp;ncjEni}~(8`K@pK96v>jRmNviTt6h= zIF0b?b5n6!Z>)z!(}dT2?*`mYPrO-pFQ3de_t@`@A70;}|0E07e2|~c`-Rv2z=$*U z{V$GR>ay_aXCvMxCBL=qS{IM{X^iU?T#tFi39o*F`c=vt>x~~C-#K4Lzue$>&3ErJ zn=k!u>?pj~dg1to`wFjqBI12g9`72*``-B3iR-2GbGV}L@9XF4m5s(vGpsMh6DiSV z(IewD~!mA(lANo9d_n`4J5cR`;IJd-M$9u)k`fTu(@anT) zaqE-$UY{hq`b>=LA>{WaK4SdbM}MZD9!rH+KiqG#9*%_^HGX=)5BVQrANTb`{{uf0 zUj6iaZ2J#=HmNGS`iY%K0@Cvl<~!?(@Y;VW;(PD(d9Cva7r*-9{^t_jHlQd;l0)`{Uok)&c&mCQsaDz zzjtt})OlY&tcRN!E*L-k1NZ0Sl;^+DrFkE=`8Md9j&z}|vuRgEi`BnOyQtOiO z^CIAVuD)?E8$VoMT)(^0UNL_9zz^puYw4?w*L=_5emeQam4x^5$$XPH5nlbo#(tar zk0iKe{G7)AhxyjHD7;tyVLbH{{9^p@{T)6(u>CjT)z854wjNlYGeX~R<7>XfaXeyw zn4L&?FP~iRXU_?*>njbeCv*I}%Wt}P)DQa)=XdF*TgDHsZ_t0o9k(5?ezFa+ei(nh zQ^KpCOn9D|^-$rS@Lqm6zaK65)y1QJ9^!s6b+VLZdWerWu(g&)rE z;$gq}`r+}b!wTWm&(_4&5B-xcET zJN*;mr!)L;{B9MWI$rag_KD4xe9oG}d)3?j_-P@$`Wb=!0R0qB_Pg=Z3(xDael~~w z!}#I;nSM5&7T)XqCe}leuzwmq-!-v*82?WRgx7qt;{F%oKbcZ^FQ1I3(q-Ybej4L_ zF4lkjyw8oFpzGCLa=dW7`WcM+q0h~ah4+eo7xw3$r+aC9X6S8w^8EeSXTqz`D`h1h zU0>|C4W9|Geh%UHwph<)lmBh}1nqy~-4I^=v=8v}-Hz98d@n!rIrqNsx*oqp|6x6x z3iZZ~uYT6x`UcnI!A-)epB;FfnLcm4efvRvzMJ%q*w|3v|NUN;mmlWa zYJu?TXIDmBKlB-6m+@YC0 z@x%Jzd>z^^yw*=&)DPE7$nz*4Y>|c$}}%&!&|z zTs-P06ZVI!=XTL!89zL}Gv8KigjYX7>uXex*v8L@f&PBVjT2t;jfnL^pLwPV@8y$z z8nldK{7l622K2uq|eIqbKYZ^~3SgKNDX4@cJ|Bv)9dJ#?LRKte;)j zKks=Vyym;Syi9=ZhspQ+M|dxvj3>s8BfR=)^xp?$)erf_M}+tC!+N_sH?{GT5%<67C-jxHj`zx!{q17J zbjIfxnO@K5e`d}U{(a;B=A!Vr9$$QCeKMZckAzpBd*GA%fg20b8$a=I{zX3}zRO_p zWj|p(#Mvag`V87Hy=|S*jql}$^^jt&@aku4A?t_nXI>|~`Y98ze=gBFlkt-|;P}3$ zRuG{R$o7y-#6`qS3kEaT0iWcA)|y>KXU_~--!E3HsdEJ`VZG* zlyEtWpJ7-ptmj%~g;zg3A7Q2256AyKhw$p>CBEOn_$!wdUj3B8{*d!E<+kv; zKa7Om590Y(tlFQt_%+|4{d3`_!fQWg|KWP+a!Pow^~HS4<;~;bQ9l*S*!m%VxUBH% zXHkHkJiiF9e&*o*Am^)0XY?DKSLG@@8xF~j_;p56<+0yPFHIeqLjJG2d_h^8n1h*Xz_zcAQ_(=aTPB7(c8Z*5}G+ z!mA(lEBbjErKGPP^4Z!7uYP*s`VZqDIZ$}@lMmOQ>F0XlQpV3DJpWAppT;X={Pe*3 zV*T_vF1-2)+W#cIB)nJs&`;#-WnDb#=X@%=zSw`7mlR(8lqn<$=zg1iGF}y4>t{E9 zpMv=&-%;N984EwGpNh*WINr+-`9a?a@8yT{HTJ&n>Ze!^e?MhHRdn&FpDK7hfj&ph z6kh%CeG10kre$U0XDa;g`oM`!Reb%B|D~t!UVd0VOSTEGe)d+de(1B;N#WH`3hWP= z@07+>UHs}N4DP?Pe$LdZZv4!HAM&qD)^NO6zU&Vv8VRrU#{B@}FY%*4&v-6{tLfrV zpH%~%KR=s5c=b7;s3ffGk@I_|qwwnUZ``kE{9_B%cJXMwPr}&uzvySxO5t@sITQX_ z4=3Z)`5^z(*9)(HYHYU8E3*G=IxW2VX`R*jq5mYg>biK;Pvu?|+5`r-4vjOXDR;osNKKcO2NKNsVsHTkmNK29pU`k900GZ|0Ag~F?!;<&%V z`oCSTsi_BEZ|8iy`bv1OeCfYV@@6LA>V<8-tpBFDgx7o%qCb#tA0oWwI~M(c@xO@F z(&WqgoAmQZMd7{j<$QHGC%o2wpMc+Qy>VA~%{R=aw*DFah2*VV{94aP(cjpw2GRnp(fOSzVM&_{L^@5ZR=wEj0^CydcW{q ze(1B>PhE|lN=0owaDLaF5MJ|LU(X)z*nd91F1-5egX^D+XJz9aCf`2Dm+`z9CcIa^ z+|PVcwWk|j{a5`z{=@voKl#~xgxC5xH^LrISr6f+3a@_3;r=7n?~A#@tDnW`Bw^i; z(a-D1eT<(W@WcLDzlQK$ei%>V_mkJh>xVvXToqpZOw4WlFrIa> z2Do_CPjd7V`i#7PkmEJq$;g-dmdC<-<;(b&T^#Jj*L*X*wD~grW>19Id>`hq`EvZS z9}hA4cBo`vjm{BXaKecEv2r}ql$hy0(* zgjYZPGh07=Uuoe<;k6zjqMy)D+O%Jrd?z4Z_O}APgjb)x!Y9X1F;;jlKjgR78fE;1 z$M2=G9+I^dUj3}hZvAll`xAs$Kj+a;$d5iX#`u{Q;Ah$wV;%36?*?3-@AyV|T`zaf z*?M3+8Dflc<7>VHbNT1{tc>uQ?_aon$o^UN58-uw_XW)Fo|_YlpSkeE^`0riL|;Fw zx1NzFIbQt~kCfJ&e{ua@Oe(zk$%y+Gte>OhgjYW`>)L)oKd~-NcJZj6jRAf(UYKJ1 zOo1Q9pYVn7UiCwtt+q`yem=o^A^-5W@am@u)(iVvNP-YIzWVtY`*Zqv-Eq3{vl4!o z@1P;V>+xtj{4kz&`-J!M!};CPd4};*>z-X-jDO-#;nmLyoZqoNZ=Dlf{Y1n0JJ)Z7 zEVEranlJkazYlg}itt|fa{MI;<{1Br;GcdbWDs807w->p{N;s&S3i>i*4O3`;nmM7 zd@qas2R51S;(yRSTUUsfE>m^LoB`zNI^97DaTraJv z39o+Q;(2ezlegqjH@^BA13&ct=KeR1*L=C3r~k-tImUZ$nH@^D0_T2j6e6?67 zy!si2{Vms5o|wzs`0D4=fc;6C!7GfP5%9AM`;GZWS32G+U&i0#vGD4X_k$RJ%yQov zKkahc<2CoIxmyUYe&XW#3Fqs{3E|aG{DA$;@IO`?KLg;0JJnCm&d|N-9uVP7rS3j@uz9jkSlZ975tAHQ%0DZN40T{xRV--%7auOMdek;nn|ufa7DL>YH7@>L)k)5B;18zt#BZ z0YBs`L=*mf{jBLPy!!c}ru9RgIVTIRe)g7-guSkheZN3>_0t`GSpQEFZZm#591lVLwL=X>yh=d`k3(QvpAlI=lJ~- z?lOLg;Cd9t&#-8>uOISby6thi<~!gId;H~m4IUx9#y=bTdDhS8lZ4m(MhEz3KhJwy zc=g#4^~3nPUlLx|*LMZ&`6lDZ*?FI@ANtSz$$sPKK{#6v^po*3;nmMx+^=E$GkXiK z`L;m5tmo?^g;$^L;FIyBnI^pY;qQ;L{s$B}*r_-;l2Ej5B0V1>c2hwbH3_DJN7|-4qgym{iF!0x_?JK` zKl@7I)lWyPFV63@D5s2{-2vBIGPV|8^KFfM8BhB`!mG~)@X7v@YsDE~KlFLF_*vs; zYcjjOIA5FU2(Nw)<9$z#AL_91y1usKc~REel=SCZJeqIKfPCxM6yD1x<0;we!Uy?D z@JM*ApDtysACBK9>P0uc`iT_qJlopQ!mFR!_+BOJVah?_)eq}|{P&A4xp=(%aDJ1O zy5j4H^%gPpRmZEJY+qSFMX< z58p@QdJh%%7hga8enpc@!mFRA(X1bi|NRr;)lYU@uOt7c#tj#b`q_Z*#jzen^$=eD zuzu)gVELQI58t2V@ifWJTfTl+5A6orcD(u-k;(eu`noYic=a<8$9MX<9P3x(CpWJ5 zvfef%7GC`{NB!`9hdc@I`1)bKUDn?HAV0fO-!p#dG_!uVAM2H0c=a;@`+v??$j`!S z{q)575$or{YvI)o_cNTY4JjTNKP_>*W4$F9@X*%}=eKdn-;AH!Q~dpOEF`@8DN|7< zSkE^(ew!1*tDi{$zmJgTH{sP!JJb*TYSt;P z>xcC}e~Iwwrw5K-T<`0u{Av8uK>y+R?S~4lemcMp=Qrh&zkK~Lo^1D@e~_QQO1^Ns z`pGxf-%pz_gjYXLD@g)g>nlx+m&VV}=s#SKm9h!1e%c23DRKIhuOIsVWz*lje(1kj zhu6kWkL}hE>#gf};nh#x>edhY^Q({F7(az^eVFmLDl5GD=^EfC=kmA458q#4{67r; z$JY4C{EW>xYcz{43$r&)Z`DeoDs(=f+n*?QwsB@xL4-n6o@K0m<`e8kX8yCy*UVhlmpB0I1{7fii z{g7W)OL+BjA)x;ZJ1xBWiHUx~`MP&kc=f~Ym$LqA?2Bvsus^fEm8l=k*AL^#@J4uD zUx@?GzpliN@5Wa@AvphHJZYu~uYR)Nc^lT}&3VGBpP=s*RN0cy*AMIMY=%U>epnB? zUka~&7IwAu!}WV3Mq=Y<7xvGb-wBh2S3jBYd=BU9!WrS!PrrbEo@+!>Uq2i_#!KPf zcYS@oJeeC`{X8yW{c!v?2Zh)A`OoY5=K0B8cs?X!t>kWe^)oHt_vx|?5MKT8{GIji zqIyc>hsSr;=Zk&9d--9$VF#o#ep0lyepqk)LWEa8i%MEQj3;)Y)NXvum-mYqPpZ_y ztIzG|R~$cg?6k%YuOE`{KUH`yKg>5)k#xpSv!>P$`+uF9!mFR4@1gZMD!lsP`)KS} zS#Aige#+u}mi1G=S_b2X*EbmdtR}*H`JvA??K2ub*}7OioZl-$gjYXbqyKRH3YUe~ zd>;k8Zyvc!CKr$T94_Vg?tM4<+>|4W$ok><>52%i zem3C#7yW!aTX^*|Ibi>@^_lSMhy91gi@X11{~$lHW8`qWmmk*K{p-SOfBq)5zn?zO zg;ziA@q8)$jI5K>#iM@q;rS*09z@-5gjYY^P(PgCCC766`XT?r3*o)|kWVr9Q#Zc) zdGopTL;mzS;nmMN9KYD#cE`(O{M^R(n&|VV$ax*Fe)zo<`W!zipRXV8H?Bp`@A&ui zGkSyY>Zg81>xc1oJuJNX;qTe8J|D&|VEl{?xIb8bjqvKHaX|gdX;aYG5ASzGJtw^S z;qRT%=Xae8x$)J{syF`6{~Q@9y!r`~PZH4Uha5lDS>bhk{f_+)eO`@G*u|rMTEP$N z^PhZ0ef_Zhzgi)@`r-L3`|aDbpBq0L;@bLQKRi`Xc=b~s&rkAw=l+w0S3lM9y*SqA zs))smAD-`%&m6IYuOH?+p_lMpet3LLcT#w*pP2crAFlU@cZF9!ZE*h1cqUaV>Ec&E z2LsN(o}Lw6>xb8iSf3M4m;N9>o4S>8yq6!=+mT;{S3iRqSU=>KJr`d6jKThy^%lNP zS>tCM?tgKgQP;>xcQ)S}eT!>5lcq z@e3ucX#6b0_aEp#YhK~i5BJ;bKiRuf_VvT@r`#9*ed{Mx(JF3y_0yub^~3Q))fQg; zoWt>*^)UB>@VdT+*abMCH4t9?g#SPN=il$2(0`6N&5WN% zxSvHozb+MC{qXosKTArr_#i(6>a{d}*nc?w_sxV?KXE!+Kjdfh6<+~Qx-%>M#S3f23yxcWd-+u4lc+EFkOq(zL$M{=#?dR-Q z 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
    {ugR62@qJB{{%(BrlMB}?*nhg_9pHGc{=<5^ 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… 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%0AG^J9y!tth^9lRE)lK2G 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 z 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≶; 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 z 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 - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -#ifndef _DOITGEN_H -# define _DOITGEN_H - -/* Default to LARGE_DATASET. */ -# if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(MEDIUM_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET) -# define LARGE_DATASET -# endif - -# if !defined(NQ) && !defined(NR) && !defined(NP) -/* Define sample dataset sizes. */ -# ifdef MINI_DATASET -# define NQ 8 -# define NR 10 -# define NP 12 -# endif - -# ifdef SMALL_DATASET -# define NQ 20 -# define NR 25 -# define NP 30 -# endif - -# ifdef MEDIUM_DATASET -# define NQ 40 -# define NR 50 -# define NP 60 -# endif - -# ifdef LARGE_DATASET -# define NQ 140 -# define NR 150 -# define NP 160 -# endif - -# ifdef EXTRALARGE_DATASET -# define NQ 220 -# define NR 250 -# define NP 270 -# endif - - -#endif /* !(NQ NR NP) */ - -# define _PB_NQ POLYBENCH_LOOP_BOUND(NQ,nq) -# define _PB_NR POLYBENCH_LOOP_BOUND(NR,nr) -# define _PB_NP POLYBENCH_LOOP_BOUND(NP,np) - - -/* Default data type */ -# if !defined(DATA_TYPE_IS_INT) && !defined(DATA_TYPE_IS_FLOAT) && !defined(DATA_TYPE_IS_DOUBLE) -# define DATA_TYPE_IS_DOUBLE -# endif - -#ifdef DATA_TYPE_IS_INT -# define DATA_TYPE int -# define DATA_PRINTF_MODIFIER "%d " -#endif - -#ifdef DATA_TYPE_IS_FLOAT -# define DATA_TYPE float -# define DATA_PRINTF_MODIFIER "%0.2f " -# define SCALAR_VAL(x) x##f -# define SQRT_FUN(x) sqrtf(x) -# define EXP_FUN(x) expf(x) -# define POW_FUN(x,y) powf(x,y) -# endif - -#ifdef DATA_TYPE_IS_DOUBLE -# define DATA_TYPE double -# define DATA_PRINTF_MODIFIER "%0.2lf " -# define SCALAR_VAL(x) x -# define SQRT_FUN(x) sqrt(x) -# define EXP_FUN(x) exp(x) -# define POW_FUN(x,y) pow(x,y) -# endif - -#endif /* !_DOITGEN_H */ diff --git a/example/polybench/split-and-merge/doitgen/doitgen.origin.c b/example/polybench/split-and-merge/doitgen/doitgen.origin.c deleted file mode 100644 index bca0b2be..00000000 --- a/example/polybench/split-and-merge/doitgen/doitgen.origin.c +++ /dev/null @@ -1,168 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* doitgen.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "doitgen.h" - - -/* Array initialization. */ -static -void init_array(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np), - DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np)) -{ - int i, j, k; - - for (i = 0; i < nr; i++) - for (j = 0; j < nq; j++) - for (k = 0; k < np; k++) - A[i][j][k] = (DATA_TYPE) ((i*j + k)%np) / np; - for (i = 0; i < np; i++) - for (j = 0; j < np; j++) - C4[i][j] = (DATA_TYPE) (i*j % np) / np; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np)) -{ - int i, j, k; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("A"); - for (i = 0; i < nr; i++) - for (j = 0; j < nq; j++) - for (k = 0; k < np; k++) { - if ((i*nq*np+j*np+k) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, A[i][j][k]); - } - POLYBENCH_DUMP_END("A"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_doitgen(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np), - DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np), - DATA_TYPE POLYBENCH_1D(sum,NP,np)) -{ - int r, q, p, s; - -#pragma scop - for (r = 0; r < _PB_NR; r++) - for (q = 0; q < _PB_NQ; q++) { - for (p = 0; p < _PB_NP; p++) { - sum[p] = SCALAR_VAL(0.0); - for (s = 0; s < _PB_NP; s++) - sum[p] += A[r][q][s] * C4[s][p]; - } - for (p = 0; p < _PB_NP; p++) - A[r][q][p] = sum[p]; - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int nr = NR; - int nq = NQ; - int np = NP; - - /* Variable declaration/allocation. */ - POLYBENCH_3D_ARRAY_DECL(A,DATA_TYPE,NR,NQ,NP,nr,nq,np); - POLYBENCH_1D_ARRAY_DECL(sum,DATA_TYPE,NP,np); - POLYBENCH_2D_ARRAY_DECL(C4,DATA_TYPE,NP,NP,np,np); - - /* Initialize array(s). */ - init_array (nr, nq, np, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(C4)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_doitgen (nr, nq, np, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(C4), - POLYBENCH_ARRAY(sum)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(nr, nq, np, POLYBENCH_ARRAY(A))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(sum); - POLYBENCH_FREE_ARRAY(C4); - - return 0; -} - -// CHECK: func @kernel_doitgen(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: memref<150x140x160xf64>, %arg4: memref<160x160xf64>, %arg5: memref<160xf64>) { -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: %2 = index_cast %arg2 : i32 to index -// CHECK-NEXT: affine.for %arg6 = 0 to %0 { -// CHECK-NEXT: affine.for %arg7 = 0 to %1 { -// CHECK-NEXT: affine.for %arg8 = 0 to %2 { -// CHECK-NEXT: affine.store %cst, %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: %3 = affine.load %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: affine.for %arg9 = 0 to %2 { -// CHECK-NEXT: %4 = affine.load %arg3[%arg6, %arg7, %arg9] : memref<150x140x160xf64> -// CHECK-NEXT: %5 = affine.load %arg4[%arg9, %arg8] : memref<160x160xf64> -// CHECK-NEXT: %6 = mulf %4, %5 : f64 -// CHECK-NEXT: %7 = addf %3, %6 : f64 -// CHECK-NEXT: affine.store %7, %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg8 = 0 to %2 { -// CHECK-NEXT: %3 = affine.load %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: affine.store %3, %arg3[%arg6, %arg7, %arg8] : memref<150x140x160xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.c b/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.c deleted file mode 100644 index c91fc0f6..00000000 --- a/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.c +++ /dev/null @@ -1,189 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* doitgen.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "doitgen.h" - - -/* Array initialization. */ -static -void init_array(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np), - DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np)) -{ - int i, j, k; - - for (i = 0; i < nr; i++) - for (j = 0; j < nq; j++) - for (k = 0; k < np; k++) - A[i][j][k] = (DATA_TYPE) ((i*j + k)%np) / np; - for (i = 0; i < np; i++) - for (j = 0; j < np; j++) - C4[i][j] = (DATA_TYPE) (i*j % np) / np; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np)) -{ - int i, j, k; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("A"); - for (i = 0; i < nr; i++) - for (j = 0; j < nq; j++) - for (k = 0; k < np; k++) { - if ((i*nq*np+j*np+k) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, A[i][j][k]); - } - POLYBENCH_DUMP_END("A"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_doitgen(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np), - DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np), - DATA_TYPE POLYBENCH_1D(sum,NP,np)) -{ - int r, q, p, s; - - int t1, t2, t3, t4, t5, t6, t7; - register int lbv, ubv; -if ((_PB_NP >= 1) && (_PB_NQ >= 1) && (_PB_NR >= 1)) { - for (t1=0;t1<=_PB_NR-1;t1++) { - for (t2=0;t2<=_PB_NQ-1;t2++) { - for (t4=0;t4<=floord(_PB_NP-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_NP-1,32*t4+31);t5++) { - sum[t5] = SCALAR_VAL(0.0);; - } - } - for (t4=0;t4<=floord(_PB_NP-1,32);t4++) { - for (t5=0;t5<=floord(_PB_NP-1,32);t5++) { - for (t6=32*t5;t6<=min(_PB_NP-1,32*t5+31);t6++) { - for (t7=32*t4;t7<=min(_PB_NP-1,32*t4+31);t7++) { - sum[t7] += A[t1][t2][t6] * C4[t6][t7];; - } - } - } - } - for (t4=0;t4<=floord(_PB_NP-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_NP-1,32*t4+31);t5++) { - A[t1][t2][t5] = sum[t5];; - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int nr = NR; - int nq = NQ; - int np = NP; - - /* Variable declaration/allocation. */ - POLYBENCH_3D_ARRAY_DECL(A,DATA_TYPE,NR,NQ,NP,nr,nq,np); - POLYBENCH_1D_ARRAY_DECL(sum,DATA_TYPE,NP,np); - POLYBENCH_2D_ARRAY_DECL(C4,DATA_TYPE,NP,NP,np,np); - - /* Initialize array(s). */ - init_array (nr, nq, np, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(C4)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_doitgen (nr, nq, np, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(C4), - POLYBENCH_ARRAY(sum)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(nr, nq, np, POLYBENCH_ARRAY(A))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(sum); - POLYBENCH_FREE_ARRAY(C4); - - return 0; -} - -// CHECK: func @kernel_doitgen(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: memref<150x140x160xf64>, %arg4: memref<160x160xf64>, %arg5: memref<160xf64>) { -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: %2 = index_cast %arg2 : i32 to index -// CHECK-NEXT: affine.for %arg6 = 0 to %0 { -// CHECK-NEXT: affine.for %arg7 = 0 to %1 { -// CHECK-NEXT: affine.for %arg8 = 0 to %2 { -// CHECK-NEXT: affine.store %cst, %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: %3 = affine.load %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: affine.for %arg9 = 0 to %2 { -// CHECK-NEXT: %4 = affine.load %arg3[%arg6, %arg7, %arg9] : memref<150x140x160xf64> -// CHECK-NEXT: %5 = affine.load %arg4[%arg9, %arg8] : memref<160x160xf64> -// CHECK-NEXT: %6 = mulf %4, %5 : f64 -// CHECK-NEXT: %7 = addf %3, %6 : f64 -// CHECK-NEXT: affine.store %7, %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg8 = 0 to %2 { -// CHECK-NEXT: %3 = affine.load %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: affine.store %3, %arg3[%arg6, %arg7, %arg8] : memref<150x140x160xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.cloog b/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.cloog deleted file mode 100644 index 8c4deb34..00000000 --- a/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.cloog +++ /dev/null @@ -1,102 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 5 - -1 -_PB_NR _PB_NQ _PB_NP - -# Number of statements -3 - -# S1 (sum[p] = SCALAR_VAL(0.0);) -12 9 -1 0 1 0 0 0 0 0 0 -1 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 -1 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 0 -1 0 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 -1 -32 0 0 1 0 0 0 0 -1 32 0 0 -1 0 0 0 31 -0 0 0 - -# S2 (sum[p] += A[r][q][s] * C4[s][p];) -15 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -1 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 0 0 0 1 0 0 0 0 -1 0 32 0 0 0 -1 0 0 0 31 -0 0 0 - -# S3 (A[r][q][p] = sum[p];) -12 9 -1 0 1 0 0 0 0 0 0 -1 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 -1 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 0 -1 0 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 -1 -32 0 0 1 0 0 0 0 -1 32 0 0 -1 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -3 - -# T(S1) -7 16 -0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - -# T(S2) -7 18 -0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 - -# T(S3) -7 16 -0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -7 -t1 t2 t3 t4 t5 t6 t7 diff --git a/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.log b/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.log deleted file mode 100644 index 00d27518..00000000 --- a/example/polybench/split-and-merge/doitgen/doitgen.origin.pluto.log +++ /dev/null @@ -1,2750 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 5 0 0 0 3 - -# Parameters are provided -1 - -_PB_NR _PB_NQ _PB_NP - - -# Number of statements -3 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -9 8 3 0 0 3 -# e/i| r q p |_PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## r >= 0 - 1 -1 0 0 1 0 0 -1 ## -r+_PB_NR-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NR-1 >= 0 - 1 0 1 0 0 0 0 0 ## q >= 0 - 1 0 -1 0 0 1 0 -1 ## -q+_PB_NQ-1 >= 0 - 1 0 0 0 0 1 0 -1 ## _PB_NQ-1 >= 0 - 1 0 0 1 0 0 0 0 ## p >= 0 - 1 0 0 -1 0 0 1 -1 ## -p+_PB_NP-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NP-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -7 15 7 3 0 3 -# e/i| c1 c2 c3 c4 c5 c6 c7 | r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == r - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c4 == q - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c5 == 0 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 ## c6 == p - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -2 10 2 3 0 3 -# e/i| Arr [1]| r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == sum - 0 0 -1 0 0 1 0 0 0 0 ## [1] == p - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -r q p -# Statement body expression -sum[p] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -11 9 4 0 0 3 -# e/i| r q p s |_PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## r >= 0 - 1 -1 0 0 0 1 0 0 -1 ## -r+_PB_NR-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NR-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## q >= 0 - 1 0 -1 0 0 0 1 0 -1 ## -q+_PB_NQ-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NQ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## p >= 0 - 1 0 0 -1 0 0 0 1 -1 ## -p+_PB_NP-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NP-1 >= 0 - 1 0 0 0 1 0 0 0 0 ## s >= 0 - 1 0 0 0 -1 0 0 1 -1 ## -s+_PB_NP-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -9 18 9 4 0 3 -# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == r - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == q - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c5 == 0 - 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c6 == p - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c7 == 1 - 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c8 == s - 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c9 == 0 - -# ---------------------------------------------- 2.3 Access -READ -2 11 2 4 0 3 -# e/i| Arr [1]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 7 ## Arr == sum - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == p - -WRITE -2 11 2 4 0 3 -# e/i| Arr [1]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 7 ## Arr == sum - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == p - -READ -4 13 4 4 0 3 -# e/i| Arr [1] [2] [3]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 10 ## Arr == A - 0 0 -1 0 0 1 0 0 0 0 0 0 0 ## [1] == r - 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## [2] == q - 0 0 0 0 -1 0 0 0 1 0 0 0 0 ## [3] == s - -READ -3 12 3 4 0 3 -# e/i| Arr [1] [2]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == C4 - 0 0 -1 0 0 0 0 1 0 0 0 0 ## [1] == s - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == p - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -4 -# List of original iterators -r q p s -# Statement body expression -sum[p] += A[r][q][s] * C4[s][p]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -9 8 3 0 0 3 -# e/i| r q p |_PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## r >= 0 - 1 -1 0 0 1 0 0 -1 ## -r+_PB_NR-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NR-1 >= 0 - 1 0 1 0 0 0 0 0 ## q >= 0 - 1 0 -1 0 0 1 0 -1 ## -q+_PB_NQ-1 >= 0 - 1 0 0 0 0 1 0 -1 ## _PB_NQ-1 >= 0 - 1 0 0 1 0 0 0 0 ## p >= 0 - 1 0 0 -1 0 0 1 -1 ## -p+_PB_NP-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NP-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -7 15 7 3 0 3 -# e/i| c1 c2 c3 c4 c5 c6 c7 | r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == r - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c4 == q - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 ## c6 == p - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 3.3 Access -WRITE -4 12 4 3 0 3 -# e/i| Arr [1] [2] [3]| r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 10 ## Arr == A - 0 0 -1 0 0 1 0 0 0 0 0 0 ## [1] == r - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == q - 0 0 0 0 -1 0 0 1 0 0 0 0 ## [3] == p - -READ -2 10 2 3 0 3 -# e/i| Arr [1]| r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == sum - 0 0 -1 0 0 1 0 0 0 0 ## [1] == p - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -r q p -# Statement body expression -A[r][q][p] = sum[p]; - - -# =============================================== Extensions - -b0 r b1 q b2 p b3 s b4 - - - -# Number of arrays -11 -# Mapping array-identifiers/array-names -1 r -2 _PB_NR -3 q -4 _PB_NQ -5 p -6 _PB_NP -7 sum -8 SCALAR_VAL -9 s -10 A -11 C4 - - - -# File name -(null) -# Starting line and column -84 0 -# Ending line and column -94 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 4, npar = 3 -Parameters: _PB_NR _PB_NQ _PB_NP -S1 "sum[p] = SCALAR_VAL(0.0);" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[6 dims; 9 constraints] -r >= 0 --r+_PB_N-1 >= 0 -_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, r, 0, q, 0, p, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -sum[p] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S2 "sum[p] += A[r][q][s] * C4[s][p];" -ndims: 4; orig_depth: 4 -Index set -Set #1 -[7 dims; 11 constraints] -r >= 0 --r+_PB_N-1 >= 0 -_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 - -T(S2): (0, r, 0, q, 0, p, 1, s, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, loop, loop) - -Read accesses -sum[p] -A[r][q][s] -C4[s][p] -Write accesses -sum[p] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes -Original loop: 3 -> yes - -S3 "A[r][q][p] = sum[p];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[6 dims; 9 constraints] -r >= 0 --r+_PB_N-1 >= 0 -_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (0, r, 0, q, 1, p, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -sum[p] -Write accesses -A[r][q][p] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 2 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 3 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 4 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 5 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 6 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 10 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 7 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 9 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 8 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 14 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 9 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 10 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+s'-1 >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 11 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 10 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 12 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 9 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 13 from S2 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --s+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 - - ---- Dep 14 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 14 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 15 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 16 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+s'-1 >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 17 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 18 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 19 from S2 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 20 from S2 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 21 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 22 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 23 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 24 from S2 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 25 from S2 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 26 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 10 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 27 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 9 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 28 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 14 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 29 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 30 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+s'-1 >= 0 --s'+_PB_N-1 >= 0 - - -T(S1): (0, r, 0, q, 0, p, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, r, 0, q, 0, p, 1, s, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, loop, loop) - -T(S3): (0, r, 0, q, 1, p, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, scalar, scalar) - -[pluto] Number of statements: 3 -[pluto] Total number of loops: 10 -[pluto] Number of deps: 30 -[pluto] Maximum domain dimensionality: 4 -[pluto] Number of parameters: 3 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 0 1 2 - - - SCC 0: size: 3: max stmt dim: 4 -[pluto] parameter context from domains -Set #1 -[3 dims; 3 constraints] -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -[pluto] find_permutable_hyperplanes: max solution(s): 4; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 1; num_constraints: 23 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 2; num_constraints: 19 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 3; num_constraints: 23 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 4; num_constraints: 19 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 10 constraints - For dep 5; num_constraints: 17 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 12 constraints - For dep 6; num_constraints: 21 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints - For dep 7; num_constraints: 17 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_n) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 31 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 18 (c_r) from 10 constraints - For dep 8; num_constraints: 14 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_r) from 8 constraints - For dep 9; num_constraints: 10 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 6 constraints - For dep 10; num_constraints: 6 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 12 constraints - For dep 11; num_constraints: 21 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints - For dep 12; num_constraints: 17 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 10 constraints - For dep 13; num_constraints: 17 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_n) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 31 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 18 (c_r) from 10 constraints - For dep 14; num_constraints: 14 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_r) from 8 constraints - For dep 15; num_constraints: 10 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 6 constraints - For dep 16; num_constraints: 6 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 17; num_constraints: 23 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 18; num_constraints: 19 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 19; num_constraints: 23 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 20; num_constraints: 19 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 21; num_constraints: 23 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 22; num_constraints: 19 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 10 constraints - For dep 23; num_constraints: 17 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 24; num_constraints: 23 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 25; num_constraints: 19 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_n) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_n) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints - For dep 26; num_constraints: 14 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_n) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_r) from 10 constraints - For dep 27; num_constraints: 10 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_n) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 31 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 18 (c_r) from 10 constraints - For dep 28; num_constraints: 14 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_r) from 8 constraints - For dep 29; num_constraints: 10 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 6 constraints - For dep 30; num_constraints: 6 - After dep 1; num_constraints: 23 - After dep 2; num_constraints: 42 - After dep 3; num_constraints: 65 - After dep 4; num_constraints: 84 - After dep 5; num_constraints: 101 - After dep 6; num_constraints: 122 - After dep 7; num_constraints: 139 - After dep 8; num_constraints: 153 - After dep 9; num_constraints: 163 - After dep 10; num_constraints: 169 - After dep 11; num_constraints: 190 - After dep 12; num_constraints: 207 - After dep 13; num_constraints: 224 - After dep 14; num_constraints: 238 - After dep 15; num_constraints: 248 - After dep 16; num_constraints: 254 - After dep 17; num_constraints: 277 - After dep 18; num_constraints: 296 - After dep 19; num_constraints: 319 - After dep 20; num_constraints: 338 - After dep 21; num_constraints: 361 - After dep 22; num_constraints: 380 - After dep 23; num_constraints: 397 - After dep 24; num_constraints: 420 - After dep 25; num_constraints: 439 - After dep 26; num_constraints: 453 - After dep 27; num_constraints: 463 - After dep 28; num_constraints: 477 - After dep 29; num_constraints: 487 - After dep 30; num_constraints: 493 - After all dependences: num constraints: 104, num variables: 19 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 3 disjuncts -Set #1 -[19 dims; 1 constraints] -c_m >= 0 - -Set #1 -[19 dims; 1 constraints] --c_n >= 0 - -Set #1 -[19 dims; 1 constraints] --c_o >= 0 - -Set #1 -[19 dims; 1 constraints] -c_m-c_n-c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 4 disjuncts -Set #1 -[19 dims; 1 constraints] -c_r >= 0 - -Set #1 -[19 dims; 1 constraints] --c_s >= 0 - -Set #1 -[19 dims; 1 constraints] --c_t >= 0 - -Set #1 -[19 dims; 1 constraints] --c_u >= 0 - -Set #1 -[19 dims; 1 constraints] -c_r-c_s-c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 3 disjuncts -Set #1 -[19 dims; 1 constraints] -c_w >= 0 - -Set #1 -[19 dims; 1 constraints] --c_x >= 0 - -Set #1 -[19 dims; 1 constraints] --c_y >= 0 - -Set #1 -[19 dims; 1 constraints] -c_w-c_x-c_y-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -linear independence constraints -[19 dims; 3 constraints] - +c_m -c_n -c_o -1 >= 0 - +c_r -c_s -c_t -c_u -1 >= 0 - +c_w -c_x -c_y -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (19 variables, 129 constraints) -[pluto] pluto_constraints_lexmin_isl (17 variables, 129 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = r, h(S2) = r, h(S3) = r -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[19 dims; 1 constraints] --c_n >= 0 - -Set #1 -[19 dims; 1 constraints] --c_o >= 0 - -Set #1 -[19 dims; 1 constraints] --c_n-c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[19 dims; 1 constraints] --c_s >= 0 - -Set #1 -[19 dims; 1 constraints] --c_t >= 0 - -Set #1 -[19 dims; 1 constraints] --c_u >= 0 - -Set #1 -[19 dims; 1 constraints] --c_s-c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[19 dims; 1 constraints] --c_x >= 0 - -Set #1 -[19 dims; 1 constraints] --c_y >= 0 - -Set #1 -[19 dims; 1 constraints] --c_x-c_y-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -linear independence constraints -[19 dims; 3 constraints] - -c_n -c_o -1 >= 0 - -c_s -c_t -c_u -1 >= 0 - -c_x -c_y -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (19 variables, 129 constraints) -[pluto] pluto_constraints_lexmin_isl (17 variables, 129 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (r) -loop types (loop) - -T(S2): (r) -loop types (loop) - -T(S3): (r) -loop types (loop) - -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 12 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 1 - After dep 2; num_constraints: 19 - After dep 4; num_constraints: 38 - After dep 5; num_constraints: 55 - After dep 7; num_constraints: 72 - After dep 9; num_constraints: 82 - After dep 10; num_constraints: 88 - After dep 12; num_constraints: 105 - After dep 13; num_constraints: 122 - After dep 15; num_constraints: 132 - After dep 16; num_constraints: 138 - After dep 18; num_constraints: 157 - After dep 20; num_constraints: 176 - After dep 22; num_constraints: 195 - After dep 23; num_constraints: 212 - After dep 25; num_constraints: 231 - After dep 27; num_constraints: 241 - After dep 29; num_constraints: 251 - After dep 30; num_constraints: 257 - After all dependences: num constraints: 78, num variables: 19 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[19 dims; 1 constraints] -c_n >= 0 - -Set #1 -[19 dims; 1 constraints] --c_o >= 0 - -Set #1 -[19 dims; 1 constraints] -c_n-c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[19 dims; 1 constraints] -c_s >= 0 - -Set #1 -[19 dims; 1 constraints] --c_t >= 0 - -Set #1 -[19 dims; 1 constraints] --c_u >= 0 - -Set #1 -[19 dims; 1 constraints] -c_s-c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[19 dims; 1 constraints] -c_x >= 0 - -Set #1 -[19 dims; 1 constraints] --c_y >= 0 - -Set #1 -[19 dims; 1 constraints] -c_x-c_y-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -linear independence constraints -[19 dims; 3 constraints] - +c_n -c_o -1 >= 0 - +c_s -c_t -c_u -1 >= 0 - +c_x -c_y -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (19 variables, 103 constraints) -[pluto] pluto_constraints_lexmin_isl (17 variables, 103 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = q, h(S2) = q, h(S3) = q -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[19 dims; 1 constraints] --c_o >= 0 - -Set #1 -[19 dims; 1 constraints] --c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[19 dims; 1 constraints] --c_t >= 0 - -Set #1 -[19 dims; 1 constraints] --c_u >= 0 - -Set #1 -[19 dims; 1 constraints] --c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[19 dims; 1 constraints] --c_y >= 0 - -Set #1 -[19 dims; 1 constraints] --c_y-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -linear independence constraints -[19 dims; 3 constraints] - -c_o -1 >= 0 - -c_t -c_u -1 >= 0 - -c_y -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (19 variables, 103 constraints) -[pluto] pluto_constraints_lexmin_isl (17 variables, 103 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 1 hyperplane(s) found -T(S1): (r, q) -loop types (loop, loop) - -T(S2): (r, q) -loop types (loop, loop) - -T(S3): (r, q) -loop types (loop, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied - 10 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 2 - After dep 2; num_constraints: 19 - After dep 5; num_constraints: 36 - After dep 7; num_constraints: 53 - After dep 10; num_constraints: 59 - After dep 13; num_constraints: 76 - After dep 16; num_constraints: 82 - After dep 23; num_constraints: 99 - After dep 30; num_constraints: 105 - After all dependences: num constraints: 42, num variables: 19 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[19 dims; 1 constraints] --c_o >= 0 - -Set #1 -[19 dims; 1 constraints] --c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[19 dims; 1 constraints] --c_t >= 0 - -Set #1 -[19 dims; 1 constraints] --c_u >= 0 - -Set #1 -[19 dims; 1 constraints] --c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[19 dims; 1 constraints] -c_y >= 0 - -Set #1 -[19 dims; 1 constraints] -c_y-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -linear independence constraints -[19 dims; 3 constraints] - -c_o -1 >= 0 - -c_t -c_u -1 >= 0 - +c_y -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (19 variables, 67 constraints) -[pluto] pluto_constraints_lexmin_isl (17 variables, 67 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 0 hyperplane(s) found -T(S1): (r, q) -loop types (loop, loop) - -T(S2): (r, q) -loop types (loop, loop) - -T(S3): (r, q) -loop types (loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 2 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 4 - SCC 2: size: 1: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 5 dep(s) satisfied -h(S1) = 0, h(S2) = 1, h(S3) = 2 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 3 - After dep 10; num_constraints: 6 - After dep 16; num_constraints: 12 - After dep 30; num_constraints: 18 - After all dependences: num constraints: 6, num variables: 19 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[19 dims; 1 constraints] -c_o >= 0 - -Set #1 -[19 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[19 dims; 1 constraints] -c_t >= 0 - -Set #1 -[19 dims; 1 constraints] -c_u >= 0 - -Set #1 -[19 dims; 1 constraints] -c_t+c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[19 dims; 1 constraints] -c_y >= 0 - -Set #1 -[19 dims; 1 constraints] -c_y-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -linear independence constraints -[19 dims; 3 constraints] - +c_o -1 >= 0 - +c_t +c_u -1 >= 0 - +c_y -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (19 variables, 31 constraints) -[pluto] pluto_constraints_lexmin_isl (17 variables, 31 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = p, h(S2) = p, h(S3) = p -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[19 dims; 1 constraints] -c_u >= 0 - -Set #1 -[19 dims; 1 constraints] -c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Added ortho constraints for S2 -linear independence constraints -[19 dims; 1 constraints] - +c_u -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (19 variables, 27 constraints) -[pluto] pluto_constraints_lexmin_isl (17 variables, 27 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = s, h(S3) = 0 -[pluto] pluto_auto_transform: band level 3; 2 hyperplane(s) found -T(S1): (r, q, 0, p, 0) -loop types (loop, loop, scalar, loop, scalar) - -T(S2): (r, q, 1, p, s) -loop types (loop, loop, scalar, loop, loop) - -T(S3): (r, q, 2, p, 0) -loop types (loop, loop, scalar, loop, scalar) - -[pluto] pluto_diamond_tile - After dep 10; num_constraints: 6 - After dep 16; num_constraints: 12 - After dep 30; num_constraints: 18 - After all dependences: num constraints: 6, num variables: 19 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 12 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied - 10 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 5 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 12 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied - 10 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 5 dep(s) satisfied -[pluto] dep_satisfaction_update (let7 {loop with stmts: S2, } -t6 {loop with stmts: S2, } -t6 {loop with stmts: S2, } -t5 {loop with stmts: S1, } -t5 {loop with stmts: S3, } -vel 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (r, q, 0, p, 0) -loop types (loop, loop, scalar, loop, scalar) - -T(S2): (r, q, 1, p, s) -loop types (loop, loop, scalar, loop, loop) - -T(S3): (r, q, 2, p, 0) -loop types (loop, loop, scalar, loop, scalar) - -[pluto_tile] Outermost tilable bands -(t4, t5, ) with stmts {S2, } -[pluto_tile] Innermost tilable bands -(t4, t5, ) with stmts {S2, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 12 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied - 10 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 5 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 3 dep(s) satisfied -[Pluto] After tiling: -T(S1): (r, q, 0, p/32, p, 0, 0) -loop types (loop, loop, scalar, loop, loop, scalar, scalar) - -T(S2): (r, q, 1, p/32, s/32, p, s) -loop types (loop, loop, scalar, loop, loop, loop, loop) - -T(S3): (r, q, 2, p/32, p, 0, 0) -loop types (loop, loop, scalar, loop, loop, scalar, scalar) - -Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: -6 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 10 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 12 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 12 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied - 10 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied - 5 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (r, q, 0, p/32, p, 0, 0) -loop types (loop, loop, scalar, loop, loop, scalar, scalar) - -T(S2): (r, q, 1, p/32, s/32, s, p) -loop types (loop, loop, scalar, loop, loop, loop, loop) - -T(S3): (r, q, 2, p/32, p, 0, 0) -loop types (loop, loop, scalar, loop, loop, scalar, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(5,7), S2(6,7), S3(5,7), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to doitgen.origin.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.002986s -[pluto] Auto-transformation time: 0.055313s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.004104s -[pluto] Code generation time: 0.019537s -[pluto] Other/Misc time: 0.278643s -[pluto] Total time: 0.356479s -[pluto] All times: 0.002986 0.055313 0.019537 0.278643 diff --git a/example/polybench/split-and-merge/doitgen/doitgen.split.c b/example/polybench/split-and-merge/doitgen/doitgen.split.c deleted file mode 100644 index 62d83c91..00000000 --- a/example/polybench/split-and-merge/doitgen/doitgen.split.c +++ /dev/null @@ -1,174 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* doitgen.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "doitgen.h" - - -/* Array initialization. */ -static -void init_array(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np), - DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np)) -{ - int i, j, k; - - for (i = 0; i < nr; i++) - for (j = 0; j < nq; j++) - for (k = 0; k < np; k++) - A[i][j][k] = (DATA_TYPE) ((i*j + k)%np) / np; - for (i = 0; i < np; i++) - for (j = 0; j < np; j++) - C4[i][j] = (DATA_TYPE) (i*j % np) / np; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np)) -{ - int i, j, k; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("A"); - for (i = 0; i < nr; i++) - for (j = 0; j < nq; j++) - for (k = 0; k < np; k++) { - if ((i*nq*np+j*np+k) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, A[i][j][k]); - } - POLYBENCH_DUMP_END("A"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_doitgen(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np), - DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np), - DATA_TYPE POLYBENCH_1D(sum,NP,np), - DATA_TYPE POLYBENCH_2D(S,NP,NP,np,np)) -{ - int r, q, p, s; - -#pragma scop - for (r = 0; r < _PB_NR; r++) - for (q = 0; q < _PB_NQ; q++) { - for (p = 0; p < _PB_NP; p++) { - sum[p] = SCALAR_VAL(0.0); - for (s = 0; s < _PB_NP; s++) { - S[s][p] = A[r][q][s] * C4[s][p]; - sum[p] += S[s][p]; - } - } - for (p = 0; p < _PB_NP; p++) - A[r][q][p] = sum[p]; - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int nr = NR; - int nq = NQ; - int np = NP; - - /* Variable declaration/allocation. */ - POLYBENCH_3D_ARRAY_DECL(A,DATA_TYPE,NR,NQ,NP,nr,nq,np); - POLYBENCH_1D_ARRAY_DECL(sum,DATA_TYPE,NP,np); - POLYBENCH_2D_ARRAY_DECL(S,DATA_TYPE,NP,NP,np,np); - POLYBENCH_2D_ARRAY_DECL(C4,DATA_TYPE,NP,NP,np,np); - - /* Initialize array(s). */ - init_array (nr, nq, np, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(C4)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_doitgen (nr, nq, np, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(C4), - POLYBENCH_ARRAY(sum), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(nr, nq, np, POLYBENCH_ARRAY(A))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(sum); - POLYBENCH_FREE_ARRAY(S); - POLYBENCH_FREE_ARRAY(C4); - - return 0; -} - -// CHECK: func @kernel_doitgen(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: memref<150x140x160xf64>, %arg4: memref<160x160xf64>, %arg5: memref<160xf64>) { -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: %2 = index_cast %arg2 : i32 to index -// CHECK-NEXT: affine.for %arg6 = 0 to %0 { -// CHECK-NEXT: affine.for %arg7 = 0 to %1 { -// CHECK-NEXT: affine.for %arg8 = 0 to %2 { -// CHECK-NEXT: affine.store %cst, %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: %3 = affine.load %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: affine.for %arg9 = 0 to %2 { -// CHECK-NEXT: %4 = affine.load %arg3[%arg6, %arg7, %arg9] : memref<150x140x160xf64> -// CHECK-NEXT: %5 = affine.load %arg4[%arg9, %arg8] : memref<160x160xf64> -// CHECK-NEXT: %6 = mulf %4, %5 : f64 -// CHECK-NEXT: %7 = addf %3, %6 : f64 -// CHECK-NEXT: affine.store %7, %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg8 = 0 to %2 { -// CHECK-NEXT: %3 = affine.load %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: affine.store %3, %arg3[%arg6, %arg7, %arg8] : memref<150x140x160xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.c b/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.c deleted file mode 100644 index 2303dba8..00000000 --- a/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.c +++ /dev/null @@ -1,202 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* doitgen.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "doitgen.h" - - -/* Array initialization. */ -static -void init_array(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np), - DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np)) -{ - int i, j, k; - - for (i = 0; i < nr; i++) - for (j = 0; j < nq; j++) - for (k = 0; k < np; k++) - A[i][j][k] = (DATA_TYPE) ((i*j + k)%np) / np; - for (i = 0; i < np; i++) - for (j = 0; j < np; j++) - C4[i][j] = (DATA_TYPE) (i*j % np) / np; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np)) -{ - int i, j, k; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("A"); - for (i = 0; i < nr; i++) - for (j = 0; j < nq; j++) - for (k = 0; k < np; k++) { - if ((i*nq*np+j*np+k) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, A[i][j][k]); - } - POLYBENCH_DUMP_END("A"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -static -void kernel_doitgen(int nr, int nq, int np, - DATA_TYPE POLYBENCH_3D(A,NR,NQ,NP,nr,nq,np), - DATA_TYPE POLYBENCH_2D(C4,NP,NP,np,np), - DATA_TYPE POLYBENCH_1D(sum,NP,np), - DATA_TYPE POLYBENCH_2D(S,NP,NP,np,np)) -{ - int r, q, p, s; - - int t1, t2, t3, t4, t5, t6, t7; - register int lbv, ubv; -if ((_PB_NP >= 1) && (_PB_NQ >= 1) && (_PB_NR >= 1)) { - for (t1=0;t1<=_PB_NR-1;t1++) { - for (t2=0;t2<=_PB_NQ-1;t2++) { - for (t4=0;t4<=floord(_PB_NP-1,32);t4++) { - for (t5=0;t5<=floord(_PB_NP-1,32);t5++) { - for (t6=32*t5;t6<=min(_PB_NP-1,32*t5+31);t6++) { - for (t7=32*t4;t7<=min(_PB_NP-1,32*t4+31);t7++) { - S[t6][t7] = A[t1][t2][t6] * C4[t6][t7];; - } - } - } - } - for (t4=0;t4<=floord(_PB_NP-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_NP-1,32*t4+31);t5++) { - sum[t5] = SCALAR_VAL(0.0);; - } - } - for (t4=0;t4<=floord(_PB_NP-1,32);t4++) { - for (t5=0;t5<=floord(_PB_NP-1,32);t5++) { - for (t6=32*t5;t6<=min(_PB_NP-1,32*t5+31);t6++) { - for (t7=32*t4;t7<=min(_PB_NP-1,32*t4+31);t7++) { - sum[t7] += S[t6][t7];; - } - } - } - } - for (t4=0;t4<=floord(_PB_NP-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_NP-1,32*t4+31);t5++) { - A[t1][t2][t5] = sum[t5];; - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int nr = NR; - int nq = NQ; - int np = NP; - - /* Variable declaration/allocation. */ - POLYBENCH_3D_ARRAY_DECL(A,DATA_TYPE,NR,NQ,NP,nr,nq,np); - POLYBENCH_1D_ARRAY_DECL(sum,DATA_TYPE,NP,np); - POLYBENCH_2D_ARRAY_DECL(S,DATA_TYPE,NP,NP,np,np); - POLYBENCH_2D_ARRAY_DECL(C4,DATA_TYPE,NP,NP,np,np); - - /* Initialize array(s). */ - init_array (nr, nq, np, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(C4)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_doitgen (nr, nq, np, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(C4), - POLYBENCH_ARRAY(sum), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(nr, nq, np, POLYBENCH_ARRAY(A))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(sum); - POLYBENCH_FREE_ARRAY(S); - POLYBENCH_FREE_ARRAY(C4); - - return 0; -} - -// CHECK: func @kernel_doitgen(%arg0: i32, %arg1: i32, %arg2: i32, %arg3: memref<150x140x160xf64>, %arg4: memref<160x160xf64>, %arg5: memref<160xf64>) { -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: %2 = index_cast %arg2 : i32 to index -// CHECK-NEXT: affine.for %arg6 = 0 to %0 { -// CHECK-NEXT: affine.for %arg7 = 0 to %1 { -// CHECK-NEXT: affine.for %arg8 = 0 to %2 { -// CHECK-NEXT: affine.store %cst, %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: %3 = affine.load %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: affine.for %arg9 = 0 to %2 { -// CHECK-NEXT: %4 = affine.load %arg3[%arg6, %arg7, %arg9] : memref<150x140x160xf64> -// CHECK-NEXT: %5 = affine.load %arg4[%arg9, %arg8] : memref<160x160xf64> -// CHECK-NEXT: %6 = mulf %4, %5 : f64 -// CHECK-NEXT: %7 = addf %3, %6 : f64 -// CHECK-NEXT: affine.store %7, %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg8 = 0 to %2 { -// CHECK-NEXT: %3 = affine.load %arg5[%arg8] : memref<160xf64> -// CHECK-NEXT: affine.store %3, %arg3[%arg6, %arg7, %arg8] : memref<150x140x160xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.cloog b/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.cloog deleted file mode 100644 index 284b90d1..00000000 --- a/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.cloog +++ /dev/null @@ -1,131 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 5 - -1 -_PB_NR _PB_NQ _PB_NP - -# Number of statements -4 - -# S1 (sum[p] = SCALAR_VAL(0.0);) -12 9 -1 0 1 0 0 0 0 0 0 -1 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 -1 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 0 -1 0 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 -1 -32 0 0 1 0 0 0 0 -1 32 0 0 -1 0 0 0 31 -0 0 0 - -# S2 (S[s][p] = A[r][q][s] * C4[s][p];) -15 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -1 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 0 0 0 1 0 0 0 0 -1 0 32 0 0 0 -1 0 0 0 31 -0 0 0 - -# S3 (sum[p] += S[s][p];) -15 11 -1 0 0 1 0 0 0 0 0 0 0 -1 0 0 -1 0 0 0 1 0 0 -1 -1 0 0 0 0 0 0 1 0 0 -1 -1 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -1 0 0 0 1 0 -1 -1 0 0 0 0 0 0 0 1 0 -1 -1 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -1 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 -1 0 0 1 -1 -1 -32 0 0 0 1 0 0 0 0 0 -1 32 0 0 0 -1 0 0 0 0 31 -1 0 -32 0 0 0 1 0 0 0 0 -1 0 32 0 0 0 -1 0 0 0 31 -0 0 0 - -# S4 (A[r][q][p] = sum[p];) -12 9 -1 0 1 0 0 0 0 0 0 -1 0 -1 0 0 1 0 0 -1 -1 0 0 0 0 1 0 0 -1 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 0 1 0 0 0 0 -1 0 0 0 -1 0 0 1 -1 -1 0 0 0 0 0 0 1 -1 -0 0 0 0 0 0 0 0 0 -1 -32 0 0 1 0 0 0 0 -1 32 0 0 -1 0 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -4 - -# T(S1) -7 16 -0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - -# T(S2) -7 18 -0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 - -# T(S3) -7 18 -0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 - -# T(S4) -7 16 -0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -3 -0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -7 -t1 t2 t3 t4 t5 t6 t7 diff --git a/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.log b/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.log deleted file mode 100644 index 79c49fc7..00000000 --- a/example/polybench/split-and-merge/doitgen/doitgen.split.pluto.log +++ /dev/null @@ -1,3453 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 5 0 0 0 3 - -# Parameters are provided -1 - -_PB_NR _PB_NQ _PB_NP - - -# Number of statements -4 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -9 8 3 0 0 3 -# e/i| r q p |_PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## r >= 0 - 1 -1 0 0 1 0 0 -1 ## -r+_PB_NR-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NR-1 >= 0 - 1 0 1 0 0 0 0 0 ## q >= 0 - 1 0 -1 0 0 1 0 -1 ## -q+_PB_NQ-1 >= 0 - 1 0 0 0 0 1 0 -1 ## _PB_NQ-1 >= 0 - 1 0 0 1 0 0 0 0 ## p >= 0 - 1 0 0 -1 0 0 1 -1 ## -p+_PB_NP-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NP-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -7 15 7 3 0 3 -# e/i| c1 c2 c3 c4 c5 c6 c7 | r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == r - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c4 == q - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 ## c5 == 0 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 ## c6 == p - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -2 10 2 3 0 3 -# e/i| Arr [1]| r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == sum - 0 0 -1 0 0 1 0 0 0 0 ## [1] == p - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -r q p -# Statement body expression -sum[p] = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -11 9 4 0 0 3 -# e/i| r q p s |_PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## r >= 0 - 1 -1 0 0 0 1 0 0 -1 ## -r+_PB_NR-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NR-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## q >= 0 - 1 0 -1 0 0 0 1 0 -1 ## -q+_PB_NQ-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NQ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## p >= 0 - 1 0 0 -1 0 0 0 1 -1 ## -p+_PB_NP-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NP-1 >= 0 - 1 0 0 0 1 0 0 0 0 ## s >= 0 - 1 0 0 0 -1 0 0 1 -1 ## -s+_PB_NP-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -9 18 9 4 0 3 -# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == r - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == q - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c5 == 0 - 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c6 == p - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c7 == 1 - 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c8 == s - 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c9 == 0 - -# ---------------------------------------------- 2.3 Access -WRITE -3 12 3 4 0 3 -# e/i| Arr [1] [2]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 10 ## Arr == S - 0 0 -1 0 0 0 0 1 0 0 0 0 ## [1] == s - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == p - -READ -4 13 4 4 0 3 -# e/i| Arr [1] [2] [3]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 11 ## Arr == A - 0 0 -1 0 0 1 0 0 0 0 0 0 0 ## [1] == r - 0 0 0 -1 0 0 1 0 0 0 0 0 0 ## [2] == q - 0 0 0 0 -1 0 0 0 1 0 0 0 0 ## [3] == s - -READ -3 12 3 4 0 3 -# e/i| Arr [1] [2]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 12 ## Arr == C4 - 0 0 -1 0 0 0 0 1 0 0 0 0 ## [1] == s - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == p - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -4 -# List of original iterators -r q p s -# Statement body expression -S[s][p] = A[r][q][s] * C4[s][p]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -11 9 4 0 0 3 -# e/i| r q p s |_PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 0 ## r >= 0 - 1 -1 0 0 0 1 0 0 -1 ## -r+_PB_NR-1 >= 0 - 1 0 0 0 0 1 0 0 -1 ## _PB_NR-1 >= 0 - 1 0 1 0 0 0 0 0 0 ## q >= 0 - 1 0 -1 0 0 0 1 0 -1 ## -q+_PB_NQ-1 >= 0 - 1 0 0 0 0 0 1 0 -1 ## _PB_NQ-1 >= 0 - 1 0 0 1 0 0 0 0 0 ## p >= 0 - 1 0 0 -1 0 0 0 1 -1 ## -p+_PB_NP-1 >= 0 - 1 0 0 0 0 0 0 1 -1 ## _PB_NP-1 >= 0 - 1 0 0 0 1 0 0 0 0 ## s >= 0 - 1 0 0 0 -1 0 0 1 -1 ## -s+_PB_NP-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -9 18 9 4 0 3 -# e/i| c1 c2 c3 c4 c5 c6 c7 c8 c9 | r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == r - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == q - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c5 == 0 - 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c6 == p - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1 ## c7 == 1 - 0 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c8 == s - 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c9 == 1 - -# ---------------------------------------------- 3.3 Access -READ -2 11 2 4 0 3 -# e/i| Arr [1]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 7 ## Arr == sum - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == p - -WRITE -2 11 2 4 0 3 -# e/i| Arr [1]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 7 ## Arr == sum - 0 0 -1 0 0 1 0 0 0 0 0 ## [1] == p - -READ -3 12 3 4 0 3 -# e/i| Arr [1] [2]| r q p s |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 10 ## Arr == S - 0 0 -1 0 0 0 0 1 0 0 0 0 ## [1] == s - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == p - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -4 -# List of original iterators -r q p s -# Statement body expression -sum[p] += S[s][p]; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -9 8 3 0 0 3 -# e/i| r q p |_PB. _PB. _PB.| 1 - 1 1 0 0 0 0 0 0 ## r >= 0 - 1 -1 0 0 1 0 0 -1 ## -r+_PB_NR-1 >= 0 - 1 0 0 0 1 0 0 -1 ## _PB_NR-1 >= 0 - 1 0 1 0 0 0 0 0 ## q >= 0 - 1 0 -1 0 0 1 0 -1 ## -q+_PB_NQ-1 >= 0 - 1 0 0 0 0 1 0 -1 ## _PB_NQ-1 >= 0 - 1 0 0 1 0 0 0 0 ## p >= 0 - 1 0 0 -1 0 0 1 -1 ## -p+_PB_NP-1 >= 0 - 1 0 0 0 0 0 1 -1 ## _PB_NP-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -7 15 7 3 0 3 -# e/i| c1 c2 c3 c4 c5 c6 c7 | r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == r - 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 ## c3 == 0 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## c4 == q - 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 0 ## c6 == p - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -4 12 4 3 0 3 -# e/i| Arr [1] [2] [3]| r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 11 ## Arr == A - 0 0 -1 0 0 1 0 0 0 0 0 0 ## [1] == r - 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == q - 0 0 0 0 -1 0 0 1 0 0 0 0 ## [3] == p - -READ -2 10 2 3 0 3 -# e/i| Arr [1]| r q p |_PB. _PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == sum - 0 0 -1 0 0 1 0 0 0 0 ## [1] == p - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -r q p -# Statement body expression -A[r][q][p] = sum[p]; - - -# =============================================== Extensions - -b0 r b1 q b2 p b3 s b4 - - - -# Number of arrays -12 -# Mapping array-identifiers/array-names -1 r -2 _PB_NR -3 q -4 _PB_NQ -5 p -6 _PB_NP -7 sum -8 SCALAR_VAL -9 s -10 S -11 A -12 C4 - - - -# File name -(null) -# Starting line and column -85 0 -# Ending line and column -97 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 4, npar = 3 -Parameters: _PB_NR _PB_NQ _PB_NP -S1 "sum[p] = SCALAR_VAL(0.0);" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[6 dims; 9 constraints] -r >= 0 --r+_PB_N-1 >= 0 -_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, r, 0, q, 0, p, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -sum[p] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S2 "S[s][p] = A[r][q][s] * C4[s][p];" -ndims: 4; orig_depth: 4 -Index set -Set #1 -[7 dims; 11 constraints] -r >= 0 --r+_PB_N-1 >= 0 -_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 - -T(S2): (0, r, 0, q, 0, p, 1, s, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, loop, loop) - -Read accesses -A[r][q][s] -C4[s][p] -Write accesses -S[s][p] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes -Original loop: 3 -> yes - -S3 "sum[p] += S[s][p];" -ndims: 4; orig_depth: 4 -Index set -Set #1 -[7 dims; 11 constraints] -r >= 0 --r+_PB_N-1 >= 0 -_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 - -T(S3): (0, r, 0, q, 0, p, 1, s, 1) -loop types (loop, loop, loop, loop, loop, loop, loop, loop, loop) - -Read accesses -sum[p] -S[s][p] -Write accesses -sum[p] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes -Original loop: 3 -> yes - -S4 "A[r][q][p] = sum[p];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[6 dims; 9 constraints] -r >= 0 --r+_PB_N-1 >= 0 -_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (0, r, 0, q, 1, p, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -sum[p] -Write accesses -A[r][q][p] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --s+s' = 0 --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 2 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --s+s' = 0 --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 3 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --s+s' = 0 --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 - - ---- Dep 4 from S1 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 10 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 5 from S1 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 9 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 6 from S3 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 14 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 7 from S3 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 8 from S3 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+s'-1 >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 9 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 10 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 11 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 12 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 13 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 14 from S2 to S4; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --s+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 - - ---- Dep 15 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 16 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 17 from S4 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 10 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 18 from S4 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 9 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 19 from S3 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 14 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 20 from S3 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 21 from S3 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+s'-1 >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 22 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --s+s' = 0 --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 23 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --s+s' = 0 --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 24 from S4 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 25 from S4 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 26 from S3 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 14 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 27 from S3 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 28 from S3 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+s'-1 >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 29 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 10 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 30 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[9 dims; 9 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 31 from S3 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 32 from S3 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 33 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 12 constraints] --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 34 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 35 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: sum -Dependence polyhedron -Set #1 -[10 dims; 11 constraints] --p+p' = 0 --q+q' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s' >= 0 --s'+_PB_N-1 >= 0 - - ---- Dep 36 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 13 constraints] --s+s' = 0 --p+p' = 0 -r >= 0 -q >= 0 --q+_PB_N-1 >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --r+r'-1 >= 0 --r'+_PB_N-1 >= 0 -q' >= 0 --q'+_PB_N-1 >= 0 - - ---- Dep 37 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[11 dims; 12 constraints] --s+s' = 0 --p+p' = 0 --r+r' = 0 -r >= 0 --r+_PB_N-1 >= 0 -q >= 0 -p >= 0 --p+_PB_N-1 >= 0 -s >= 0 --s+_PB_N-1 >= 0 --q+q'-1 >= 0 --q'+_PB_N-1 >= 0 - - -T(S1): (0, r, 0, q, 0, p, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, scalar, scalar) - -T(S2): (0, r, 0, q, 0, p, 1, s, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, loop, loop) - -T(S3): (0, r, 0, q, 0, p, 1, s, 1) -loop types (loop, loop, loop, loop, loop, loop, loop, loop, loop) - -T(S4): (0, r, 0, q, 1, p, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, loop, loop, scalar, scalar) - -[pluto] Number of statements: 4 -[pluto] Total number of loops: 14 -[pluto] Number of deps: 37 -[pluto] Maximum domain dimensionality: 4 -[pluto] Number of parameters: 3 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 0 1 2 3 - - - SCC 0: size: 4: max stmt dim: 4 -[pluto] parameter context from domains -Set #1 -[3 dims; 3 constraints] -c_k-1 >= 0 -c_j-1 >= 0 -c_i-1 >= 0 - -[pluto] find_permutable_hyperplanes: max solution(s): 4; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ˆ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_x) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_w) from 12 constraints - For dep 1; num_constraints: 21 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 10 constraints - For dep 2; num_constraints: 17 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 9 constraints - For dep 3; num_constraints: 15 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 12 constraints - For dep 4; num_constraints: 21 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints - For dep 5; num_constraints: 17 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_n) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 31 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 18 (c_r) from 10 constraints - For dep 6; num_constraints: 14 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_r) from 8 constraints - For dep 7; num_constraints: 10 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 6 constraints - For dep 8; num_constraints: 6 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 9; num_constraints: 23 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 10; num_constraints: 19 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 10 constraints - For dep 11; num_constraints: 17 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 12; num_constraints: 23 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 13; num_constraints: 19 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 10 constraints - For dep 14; num_constraints: 17 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 15; num_constraints: 23 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 16; num_constraints: 19 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 12 constraints - For dep 17; num_constraints: 21 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_w) from 13 constraints - For dep 18; num_constraints: 17 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_n) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 31 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 18 (c_r) from 10 constraints - For dep 19; num_constraints: 14 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_r) from 8 constraints - For dep 20; num_constraints: 10 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 6 constraints - For dep 21; num_constraints: 6 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 10 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ˆ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_x) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_w) from 12 constraints - For dep 22; num_constraints: 21 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 10 constraints - For dep 23; num_constraints: 17 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 24; num_constraints: 23 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 25; num_constraints: 19 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_n) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_„) from 31 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 18 (c_r) from 10 constraints - For dep 26; num_constraints: 14 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_r) from 8 constraints - For dep 27; num_constraints: 10 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 6 constraints - For dep 28; num_constraints: 6 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_n) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_n) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_r) from 10 constraints - For dep 29; num_constraints: 14 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_o) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_n) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_r) from 10 constraints - For dep 30; num_constraints: 10 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 31; num_constraints: 23 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 32; num_constraints: 19 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_s) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_s) from 11 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‡) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_„) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_ƒ) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_‚) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_€) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_w) from 13 constraints - For dep 33; num_constraints: 23 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 9 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 11 constraints - For dep 34; num_constraints: 19 -[pluto] compute permutability constraints: Dep 35 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_s) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_†) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_…) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_„) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_ƒ) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_‚) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_}) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_|) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_{) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_z) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_y) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_w) from 10 constraints - For dep 35; num_constraints: 17 -[pluto] compute permutability constraints: Dep 36 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_ƒ) from 30 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_{) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 17 (c_r) from 8 constraints - For dep 36; num_constraints: 10 -[pluto] compute permutability constraints: Dep 37 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_o) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_n) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_‚) from 29 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 28 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_€) from 27 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_) from 26 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_~) from 25 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_}) from 24 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_|) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 14 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 15 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 16 (c_r) from 9 constraints - For dep 37; num_constraints: 6 - After dep 1; num_constraints: 21 - After dep 2; num_constraints: 38 - After dep 3; num_constraints: 53 - After dep 4; num_constraints: 74 - After dep 5; num_constraints: 91 - After dep 6; num_constraints: 105 - After dep 7; num_constraints: 115 - After dep 8; num_constraints: 121 - After dep 9; num_constraints: 144 - After dep 10; num_constraints: 163 - After dep 11; num_constraints: 180 - After dep 12; num_constraints: 203 - After dep 13; num_constraints: 222 - After dep 14; num_constraints: 239 - After dep 15; num_constraints: 262 - After dep 16; num_constraints: 281 - After dep 17; num_constraints: 302 - After dep 18; num_constraints: 319 - After dep 19; num_constraints: 333 - After dep 20; num_constraints: 343 - After dep 21; num_constraints: 349 - After dep 22; num_constraints: 370 - After dep 23; num_constraints: 387 - After dep 24; num_constraints: 410 - After dep 25; num_constraints: 429 - After dep 26; num_constraints: 443 - After dep 27; num_constraints: 453 - After dep 28; num_constraints: 459 - After dep 29; num_constraints: 473 - After dep 30; num_constraints: 483 - After dep 31; num_constraints: 506 - After dep 32; num_constraints: 525 - After dep 33; num_constraints: 548 - After dep 34; num_constraints: 567 - After dep 35; num_constraints: 584 - After dep 36; num_constraints: 594 - After dep 37; num_constraints: 600 - After all dependences: num constraints: 150, num variables: 24 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 3 disjuncts -Set #1 -[24 dims; 1 constraints] -c_m >= 0 - -Set #1 -[24 dims; 1 constraints] --c_n >= 0 - -Set #1 -[24 dims; 1 constraints] --c_o >= 0 - -Set #1 -[24 dims; 1 constraints] -c_m-c_n-c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 4 disjuncts -Set #1 -[24 dims; 1 constraints] -c_r >= 0 - -Set #1 -[24 dims; 1 constraints] --c_s >= 0 - -Set #1 -[24 dims; 1 constraints] --c_t >= 0 - -Set #1 -[24 dims; 1 constraints] --c_u >= 0 - -Set #1 -[24 dims; 1 constraints] -c_r-c_s-c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 4 disjuncts -Set #1 -[24 dims; 1 constraints] -c_w >= 0 - -Set #1 -[24 dims; 1 constraints] --c_x >= 0 - -Set #1 -[24 dims; 1 constraints] --c_y >= 0 - -Set #1 -[24 dims; 1 constraints] --c_z >= 0 - -Set #1 -[24 dims; 1 constraints] -c_w-c_x-c_y-c_z-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 3 disjuncts -Set #1 -[24 dims; 1 constraints] -c_| >= 0 - -Set #1 -[24 dims; 1 constraints] --c_} >= 0 - -Set #1 -[24 dims; 1 constraints] --c_~ >= 0 - -Set #1 -[24 dims; 1 constraints] -c_|-c_}-c_~-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[24 dims; 4 constraints] - +c_m -c_n -c_o -1 >= 0 - +c_r -c_s -c_t -c_u -1 >= 0 - +c_w -c_x -c_y -c_z -1 >= 0 - +c_| -c_} -c_~ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (24 variables, 182 constraints) -[pluto] pluto_constraints_lexmin_isl (22 variables, 182 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = r, h(S2) = r, h(S3) = r, h(S4) = r -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[24 dims; 1 constraints] --c_n >= 0 - -Set #1 -[24 dims; 1 constraints] --c_o >= 0 - -Set #1 -[24 dims; 1 constraints] --c_n-c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[24 dims; 1 constraints] --c_s >= 0 - -Set #1 -[24 dims; 1 constraints] --c_t >= 0 - -Set #1 -[24 dims; 1 constraints] --c_u >= 0 - -Set #1 -[24 dims; 1 constraints] --c_s-c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 3 disjuncts -Set #1 -[24 dims; 1 constraints] --c_x >= 0 - -Set #1 -[24 dims; 1 constraints] --c_y >= 0 - -Set #1 -[24 dims; 1 constraints] --c_z >= 0 - -Set #1 -[24 dims; 1 constraints] --c_x-c_y-c_z-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[24 dims; 1 constraints] --c_} >= 0 - -Set #1 -[24 dims; 1 constraints] --c_~ >= 0 - -Set #1 -[24 dims; 1 constraints] --c_}-c_~-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[24 dims; 4 constraints] - -c_n -c_o -1 >= 0 - -c_s -c_t -c_u -1 >= 0 - -c_x -c_y -c_z -1 >= 0 - -c_} -c_~ -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (24 variables, 182 constraints) -[pluto] pluto_constraints_lexmin_isl (22 variables, 182 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (r) -loop types (loop) - -T(S2): (r) -loop types (loop) - -T(S3): (r) -loop types (loop) - -T(S4): (r) -loop types (loop) - -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 15 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 1 - After dep 2; num_constraints: 17 - After dep 3; num_constraints: 32 - After dep 5; num_constraints: 49 - After dep 7; num_constraints: 59 - After dep 8; num_constraints: 65 - After dep 10; num_constraints: 84 - After dep 11; num_constraints: 101 - After dep 13; num_constraints: 120 - After dep 14; num_constraints: 137 - After dep 16; num_constraints: 156 - After dep 18; num_constraints: 173 - After dep 20; num_constraints: 183 - After dep 21; num_constraints: 189 - After dep 23; num_constraints: 206 - After dep 25; num_constraints: 225 - After dep 27; num_constraints: 235 - After dep 28; num_constraints: 241 - After dep 30; num_constraints: 251 - After dep 32; num_constraints: 270 - After dep 34; num_constraints: 289 - After dep 35; num_constraints: 306 - After dep 37; num_constraints: 312 - After all dependences: num constraints: 115, num variables: 24 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 2 disjuncts -Set #1 -[24 dims; 1 constraints] -c_n >= 0 - -Set #1 -[24 dims; 1 constraints] --c_o >= 0 - -Set #1 -[24 dims; 1 constraints] -c_n-c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 3 disjuncts -Set #1 -[24 dims; 1 constraints] -c_s >= 0 - -Set #1 -[24 dims; 1 constraints] --c_t >= 0 - -Set #1 -[24 dims; 1 constraints] --c_u >= 0 - -Set #1 -[24 dims; 1 constraints] -c_s-c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 3 disjuncts -Set #1 -[24 dims; 1 constraints] -c_x >= 0 - -Set #1 -[24 dims; 1 constraints] --c_y >= 0 - -Set #1 -[24 dims; 1 constraints] --c_z >= 0 - -Set #1 -[24 dims; 1 constraints] -c_x-c_y-c_z-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[24 dims; 1 constraints] -c_} >= 0 - -Set #1 -[24 dims; 1 constraints] --c_~ >= 0 - -Set #1 -[24 dims; 1 constraints] -c_}-c_~-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[24 dims; 4 constraints] - +c_n -c_o -1 >= 0 - +c_s -c_t -c_u -1 >= 0 - +c_x -c_y -c_z -1 >= 0 - +c_} -c_~ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (24 variables, 147 constraints) -[pluto] pluto_constraints_lexmin_isl (22 variables, 147 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = q, h(S2) = q, h(S3) = q, h(S4) = q -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[24 dims; 1 constraints] --c_o >= 0 - -Set #1 -[24 dims; 1 constraints] --c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[24 dims; 1 constraints] --c_t >= 0 - -Set #1 -[24 dims; 1 constraints] --c_u >= 0 - -Set #1 -[24 dims; 1 constraints] --c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[24 dims; 1 constraints] --c_y >= 0 - -Set #1 -[24 dims; 1 constraints] --c_z >= 0 - -Set #1 -[24 dims; 1 constraints] --c_y-c_z-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[24 dims; 1 constraints] --c_~ >= 0 - -Set #1 -[24 dims; 1 constraints] --c_~-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[24 dims; 4 constraints] - -c_o -1 >= 0 - -c_t -c_u -1 >= 0 - -c_y -c_z -1 >= 0 - -c_~ -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (24 variables, 147 constraints) -[pluto] pluto_constraints_lexmin_isl (22 variables, 147 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 1 hyperplane(s) found -T(S1): (r, q) -loop types (loop, loop) - -T(S2): (r, q) -loop types (loop, loop) - -T(S3): (r, q) -loop types (loop, loop) - -T(S4): (r, q) -loop types (loop, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 13 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 2 - After dep 3; num_constraints: 15 - After dep 5; num_constraints: 32 - After dep 8; num_constraints: 38 - After dep 11; num_constraints: 55 - After dep 13; num_constraints: 74 - After dep 14; num_constraints: 91 - After dep 21; num_constraints: 97 - After dep 28; num_constraints: 103 - After dep 35; num_constraints: 120 - After all dependences: num constraints: 62, num variables: 24 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[24 dims; 1 constraints] -c_o >= 0 - -Set #1 -[24 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[24 dims; 1 constraints] --c_t >= 0 - -Set #1 -[24 dims; 1 constraints] --c_u >= 0 - -Set #1 -[24 dims; 1 constraints] --c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[24 dims; 1 constraints] -c_y >= 0 - -Set #1 -[24 dims; 1 constraints] --c_z >= 0 - -Set #1 -[24 dims; 1 constraints] -c_y-c_z-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[24 dims; 1 constraints] -c_~ >= 0 - -Set #1 -[24 dims; 1 constraints] -c_~-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[24 dims; 4 constraints] - +c_o -1 >= 0 - -c_t -c_u -1 >= 0 - +c_y -c_z -1 >= 0 - +c_~ -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (24 variables, 94 constraints) -[pluto] pluto_constraints_lexmin_isl (22 variables, 94 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 0 hyperplane(s) found -T(S1): (r, q) -loop types (loop, loop) - -T(S2): (r, q) -loop types (loop, loop) - -T(S3): (r, q) -loop types (loop, loop) - -T(S4): (r, q) -loop types (loop, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 3 - - - SCC 0: size: 1: max stmt dim: 4 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 4 - SCC 3: size: 1: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 6 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 2, h(S4) = 3 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 3 - After dep 8; num_constraints: 6 - After dep 21; num_constraints: 12 - After dep 28; num_constraints: 18 - After all dependences: num constraints: 6, num variables: 24 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[24 dims; 1 constraints] -c_o >= 0 - -Set #1 -[24 dims; 1 constraints] -c_o-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[24 dims; 1 constraints] -c_t >= 0 - -Set #1 -[24 dims; 1 constraints] -c_u >= 0 - -Set #1 -[24 dims; 1 constraints] -c_t+c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[24 dims; 1 constraints] -c_y >= 0 - -Set #1 -[24 dims; 1 constraints] -c_z >= 0 - -Set #1 -[24 dims; 1 constraints] -c_y+c_z-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[24 dims; 1 constraints] -c_~ >= 0 - -Set #1 -[24 dims; 1 constraints] -c_~-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -linear independence constraints -[24 dims; 4 constraints] - +c_o -1 >= 0 - +c_t +c_u -1 >= 0 - +c_y +c_z -1 >= 0 - +c_~ -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (24 variables, 38 constraints) -[pluto] pluto_constraints_lexmin_isl (22 variables, 38 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = p, h(S2) = p, h(S3) = p, h(S4) = p -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[24 dims; 1 constraints] -c_u >= 0 - -Set #1 -[24 dims; 1 constraints] -c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[24 dims; 1 constraints] -c_z >= 0 - -Set #1 -[24 dims; 1 constraints] -c_z-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Added ortho constraints for S2 -Added ortho constraints for S3 -linear independence constraints -[24 dims; 2 constraints] - +c_u -1 >= 0 - +c_z -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (24 variables, 34 constraints) -[pluto] pluto_constraints_lexmin_isl (22 variables, 34 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = s, h(S3) = s, h(S4) = 0 -[pluto] pluto_auto_transform: band level 3; 2 hyperplane(s) found -T(S1): (r, q, 1, p, 0) -loop types (loop, loop, scalar, loop, scalar) - -T(S2): (r, q, 0, p, s) -loop types (loop, loop, scalar, loop, loop) - -T(S3): (r, q, 2, p, s) -loop types (loop, loop, scalar, loop, loop) - -T(S4): (r, q, 3, p, 0) -loop types (loop, loop, scalar, loop, scalar) - -[pluto] pluto_diamond_tile - After dep 8; num_constraints: 6 - After dep 21; num_constraints: 12 - After dep 28; num_constraints: 18 - After all dependences: num constraints: 6, num variables: 24 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 15 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 13 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 15 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 13 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2t7 {loop with stmts: S2, } -t6 {loop with stmts: S2, } -t6 {loop with stmts: S2, } -) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (r, q, 1, p, 0) -loop types (loop, loop, scalar, loop, scalar) - -T(S2): (r, q, 0, p, s) -loop types (loop, loop, scalar, loop, loop) - -T(S3): (r, q, 2, p, s) -loop types (loop, loop, scalar, loop, loop) - -T(S4): (r, q, 3, p, 0) -loop types (loop, loop, scalar, loop, scalar) - -[pluto_tile] Outermost tilable bands -(t4, t5, ) with stmts {S2, } -(t4, t5, ) with stmts {S3, } -[pluto_tile] Innermost tilable bands -(t4, t5, ) with stmts {S2, } -(t4, t5, ) with stmts {S3, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 15 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 13 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 3 dep(s) satisfied -[Pluto] After tiling: -T(S1): (r, q, 1, p/32, p, 0, 0) -loop types (loop, loop, scalar, loop, loop, scalar, scalar) - -T(S2): (r, q, 0, p/32, s/32, p, s) -loop types (loop, loop, scalar, loop, loop, loop, loop) - -T(S3): (r, q, 2, p/32, s/32, p, s) -loop types (loop, loop, scalar, loop, loop, loop, loop) - -T(S4): (r, q, 3, p/32, p, 0, 0) -loop types (loop, loop, scalar, loop, loop, scalar, scalar) - -Getting loop at depth 5 -[pluto-intra-tile-opt] Score for loop 0: -30 -[pluto-intra-tile-opt] Score for loop 1: 16 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 5 -[pluto-intra-tile-opt] Scort7 {loop with stmts: S3, } -t6 {loop with stmts: S3, } -t6 {loop with stmts: S3, } -t5 {loop with stmts: S1, } -t5 {loop with stmts: S4, } -e for loop 0: -8 -[pluto-intra-tile-opt] Score for loop 1: 14 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 10 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 12 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 15 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 13 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (r, q, 1, p/32, p, 0, 0) -loop types (loop, loop, scalar, loop, loop, scalar, scalar) - -T(S2): (r, q, 0, p/32, s/32, s, p) -loop types (loop, loop, scalar, loop, loop, loop, loop) - -T(S3): (r, q, 2, p/32, s/32, s, p) -loop types (loop, loop, scalar, loop, loop, loop, loop) - -T(S4): (r, q, 3, p/32, p, 0, 0) -loop types (loop, loop, scalar, loop, loop, scalar, scalar) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(5,7), S2(6,7), S3(6,7), S4(5,7), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to doitgen.split.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.002197s -[pluto] Auto-transformation time: 0.084462s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.006715s -[pluto] Code generation time: 0.028647s -[pluto] Other/Misc time: 0.323241s -[pluto] Total time: 0.438547s -[pluto] All times: 0.002197 0.084462 0.028647 0.323241 diff --git a/example/polybench/split-and-merge/eval-split-mlir-heuristic b/example/polybench/split-and-merge/eval-split-mlir-heuristic index 460271c3..60881522 100755 --- a/example/polybench/split-and-merge/eval-split-mlir-heuristic +++ b/example/polybench/split-and-merge/eval-split-mlir-heuristic @@ -32,7 +32,7 @@ export PATH="${LLVM_DIR}/build/bin:${PATH}" export PATH="${BUILD_DIR}/bin:${PATH}" export C_INCLUDE_PATH="${LLVM_DIR}/build/projects/openmp/runtime/src" -export LD_LIBRARY_PATH="${LLVM_DIR}/build/lib:${BUILD_DIR}/pluto/lib:${LD_LIBRARY_PATH:-""}" +export LD_LIBRARY_PATH="${LLVM_DIR}/build/lib:${BUILD_DIR}/tools/mlir/tools/polymer/pluto/lib:${LD_LIBRARY_PATH:-""}" # ----------------------------- Compile ------------------------------------- @@ -56,6 +56,7 @@ function polymer_opt() { local mode="${2:-"seq"}" local split_mode="${3:-"nosplit"}" local dst_file="${src_file%.mlir}.${split_mode}.polymer.${mode}.mlir" + local log_file="${dst_file%.mlir}.log" local polymer_options=() if [ "${split_mode}" = "heuristic" ]; then @@ -68,9 +69,9 @@ function polymer_opt() { else polymer_options+=(-pluto-opt="parallelize=1" -inline) fi - polymer_options+=(-canonicalize) + polymer_options+=(-canonicalize -pass-statistics -pass-timing) - polymer-opt "${polymer_options[@]}" "${src_file}" 2>/dev/null | tee "${dst_file}" &>/dev/null + polymer-opt "${polymer_options[@]}" "${src_file}" 2>"${log_file}" | tee "${dst_file}" &>/dev/null } function compile() { @@ -113,7 +114,7 @@ function run() { # Update build if necessary function try_rebuild() { - cd "${PWD}/../../../build" && cmake --build . --target all >/dev/null 2>&1 && cd - &>/dev/null + cd "${PWD}/../../../build" && cmake --build . --target check-polymer >/dev/null 2>&1 && cd - &>/dev/null } ALL_ARGS=("$@") diff --git a/example/polybench/split-and-merge/eval-split-mlir-heuristic-all b/example/polybench/split-and-merge/eval-split-mlir-heuristic-all deleted file mode 100755 index 0be946a3..00000000 --- a/example/polybench/split-and-merge/eval-split-mlir-heuristic-all +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o pipefail -set -o nounset - -DIR="$(cd "$(dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)" -TMPDIR="${DIR}/tmp" -mkdir -p "${TMPDIR}" - -TIMESTAMP="$(date "+%Y%m%d-%H%M%S")" - -TEST_CASE="$1" -BASEDIR="$(basename "${TEST_CASE}")" -WORKDIR="${TMPDIR}/heuristic.${BASEDIR}.${TIMESTAMP}" -WORKLOG="${TMPDIR}/heuristic.${BASEDIR}.${TIMESTAMP}.log" - -mkdir -p "${WORKDIR}" -cp -r "${TEST_CASE}"/* "${WORKDIR}" - -for d in "${WORKDIR}"/*/; do - BASENAME=$(basename "$d") - TARGET="$d/$BASENAME.c" - - "${DIR}/eval-split-mlir-heuristic" "$TARGET" >> "${WORKLOG}" -done diff --git a/example/polybench/split-and-merge/eval-split-mlir-heuristic-batch b/example/polybench/split-and-merge/eval-split-mlir-heuristic-batch index 7206551d..30328f98 100755 --- a/example/polybench/split-and-merge/eval-split-mlir-heuristic-batch +++ b/example/polybench/split-and-merge/eval-split-mlir-heuristic-batch @@ -1,12 +1,7 @@ #!/usr/bin/env bash -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic -./eval-split-mlir-heuristic +./eval-split-mlir-heuristic 2mm/2mm.c +./eval-split-mlir-heuristic 3mm/3mm.c +./eval-split-mlir-heuristic correlation/correlation.c +./eval-split-mlir-heuristic covariance/covariance.c +./eval-split-mlir-heuristic trmm/trmm.c diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.c deleted file mode 100644 index d949d73a..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.c +++ /dev/null @@ -1,212 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j, k; - - DATA_TYPE nrm; - -#pragma scop - for (k = 0; k < _PB_N; k++) - { - nrm = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) - nrm += A[i][k] * A[i][k]; - R[k][k] = SQRT_FUN(nrm); - for (i = 0; i < _PB_M; i++) - Q[i][k] = A[i][k] / R[k][k]; - for (j = k + 1; j < _PB_N; j++) - { - R[k][j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) - R[k][j] += Q[i][k] * A[i][j]; - for (i = 0; i < _PB_M; i++) - A[i][j] = A[i][j] - Q[i][k] * R[k][j]; - } - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.mlir deleted file mode 100644 index c4a90953..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.mlir +++ /dev/null @@ -1,266 +0,0 @@ -#map = affine_map<(d0) -> (d0 + 1)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloc() : memref<2000x2600xf64> - %1 = memref.alloc() : memref<2600x2600xf64> - %2 = memref.alloc() : memref<2000x2600xf64> - %3 = memref.cast %0 : memref<2000x2600xf64> to memref - %4 = memref.cast %1 : memref<2600x2600xf64> to memref - %5 = memref.cast %2 : memref<2000x2600xf64> to memref - call @init_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - call @kernel_gramschmidt(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %6 = cmpi sgt, %arg0, %c42_i32 : i32 - %7 = scf.if %6 -> (i1) { - %8 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %9 = llvm.load %8 : !llvm.ptr> - %10 = llvm.mlir.addressof @str0 : !llvm.ptr> - %11 = llvm.getelementptr %10[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %12 = llvm.call @strcmp(%9, %11) : (!llvm.ptr, !llvm.ptr) -> i32 - %13 = trunci %12 : i32 to i1 - %14 = xor %13, %true : i1 - scf.yield %14 : i1 - } else { - scf.yield %false : i1 - } - scf.if %7 { - call @print_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %0 : memref<2000x2600xf64> - memref.dealloc %1 : memref<2600x2600xf64> - memref.dealloc %2 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %cst = constant 0.000000e+00 : f64 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg5 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg5 : i32, i32 - } do { - ^bb0(%arg5: i32, %arg6: i32): // no predecessors - %4 = index_cast %arg6 : i32 to index - %5 = scf.while (%arg7 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg7, %arg1 : i32 - scf.condition(%7) %arg7 : i32 - } do { - ^bb0(%arg7: i32): // no predecessors - %7 = index_cast %arg7 : i32 to index - %8 = muli %arg6, %arg7 : i32 - %9 = remi_signed %8, %arg0 : i32 - %10 = sitofp %9 : i32 to f64 - %11 = sitofp %arg0 : i32 to f64 - %12 = divf %10, %11 : f64 - %13 = sitofp %c100_i32 : i32 to f64 - %14 = mulf %12, %13 : f64 - %15 = sitofp %c10_i32 : i32 to f64 - %16 = addf %14, %15 : f64 - memref.store %16, %arg2[%4, %7] : memref - memref.store %cst, %arg4[%4, %7] : memref - %17 = addi %arg7, %c1_i32 : i32 - scf.yield %17 : i32 - } - %6 = addi %arg6, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %0#0 : i32 to index - %3 = scf.for %arg5 = %2 to %1 step %c1 iter_args(%arg6 = %0#0) -> (i32) { - %4 = index_cast %arg6 : i32 to index - scf.for %arg7 = %c0 to %1 step %c1 { - memref.store %cst, %arg3[%4, %arg7] : memref - } - %5 = addi %arg6, %c1_i32 : i32 - scf.yield %5 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg0 : i32 to index - %1 = memref.alloca() : memref<1xf64> - %2 = index_cast %arg1 : i32 to index - affine.for %arg5 = 0 to %2 { - affine.store %cst, %1[0] : memref<1xf64> - affine.for %arg6 = 0 to %0 { - %5 = affine.load %arg2[%arg6, %arg5] : memref - %6 = mulf %5, %5 : f64 - %7 = affine.load %1[0] : memref<1xf64> - %8 = addf %7, %6 : f64 - affine.store %8, %1[0] : memref<1xf64> - } - %3 = affine.load %1[0] : memref<1xf64> - %4 = math.sqrt %3 : f64 - affine.store %4, %arg3[%arg5, %arg5] : memref - affine.for %arg6 = 0 to %0 { - %5 = affine.load %arg2[%arg6, %arg5] : memref - %6 = divf %5, %4 : f64 - affine.store %6, %arg4[%arg6, %arg5] : memref - } - affine.for %arg6 = #map(%arg5) to %2 { - affine.store %cst, %arg3[%arg5, %arg6] : memref - affine.for %arg7 = 0 to %0 { - %5 = affine.load %arg4[%arg7, %arg5] : memref - %6 = affine.load %arg2[%arg7, %arg6] : memref - %7 = mulf %5, %6 : f64 - %8 = affine.load %arg3[%arg5, %arg6] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg3[%arg5, %arg6] : memref - } - affine.for %arg7 = 0 to %0 { - %5 = affine.load %arg2[%arg7, %arg6] : memref - %6 = affine.load %arg4[%arg7, %arg5] : memref - %7 = affine.load %arg3[%arg5, %arg6] : memref - %8 = mulf %6, %7 : f64 - %9 = subf %5, %8 : f64 - affine.store %9, %arg2[%arg7, %arg6] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.nosplit.polymer.par.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.nosplit.polymer.par.mlir deleted file mode 100644 index 0c680b1f..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.nosplit.polymer.par.mlir +++ /dev/null @@ -1,340 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0, d1) -> (2599, d0 * 32 + 32, d1 * 32 + 31)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2000, d0 * 32 + 32)> -#map6 = affine_map<(d0) -> ((d0 - 30) ceildiv 32)> -#set = affine_set<(d0) : (-d0 + 2598 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c2600 = constant 2600 : index - %cst = constant 0.000000e+00 : f64 - %0 = memref.alloc() : memref<2000x2600xf64> - %1 = memref.alloc() : memref<2600x2600xf64> - %2 = memref.alloc() : memref<2000x2600xf64> - %3 = memref.cast %0 : memref<2000x2600xf64> to memref - %4 = memref.cast %1 : memref<2600x2600xf64> to memref - %5 = memref.cast %2 : memref<2000x2600xf64> to memref - %6:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %13 = cmpi slt, %arg2, %c2000_i32 : i32 - scf.condition(%13) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %13 = index_cast %arg3 : i32 to index - %14 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %16 = cmpi slt, %arg4, %c2600_i32 : i32 - scf.condition(%16) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %16 = index_cast %arg4 : i32 to index - %17 = muli %arg3, %arg4 : i32 - %18 = remi_signed %17, %c2000_i32 : i32 - %19 = sitofp %18 : i32 to f64 - %20 = sitofp %c2000_i32 : i32 to f64 - %21 = divf %19, %20 : f64 - %22 = sitofp %c100_i32 : i32 to f64 - %23 = mulf %21, %22 : f64 - %24 = sitofp %c10_i32 : i32 to f64 - %25 = addf %23, %24 : f64 - memref.store %25, %0[%13, %16] : memref<2000x2600xf64> - memref.store %cst, %2[%13, %16] : memref<2000x2600xf64> - %26 = addi %arg4, %c1_i32 : i32 - scf.yield %26 : i32 - } - %15 = addi %arg3, %c1_i32 : i32 - scf.yield %15 : i32 - } - %7 = index_cast %6#0 : i32 to index - %8 = scf.for %arg2 = %7 to %c2600 step %c1 iter_args(%arg3 = %6#0) -> (i32) { - %13 = index_cast %arg3 : i32 to index - scf.for %arg4 = %c0 to %c2600 step %c1 { - memref.store %cst, %1[%13, %arg4] : memref<2600x2600xf64> - } - %14 = addi %arg3, %c1_i32 : i32 - scf.yield %14 : i32 - } - call @polybench_timer_start() : () -> () - %9 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %10 = memref.alloca() : memref<1xf64> - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - affine.store %cst, %1[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 2600 { - affine.store %cst, %10[0] : memref<1xf64> - affine.for %arg3 = 0 to 2000 { - %16 = affine.load %10[0] : memref<1xf64> - %17 = affine.load %0[%arg3, %arg2] : memref<2000x2600xf64> - %18 = mulf %17, %17 {scop.splittable = 0 : index} : f64 - %19 = addf %16, %18 : f64 - affine.store %19, %10[0] : memref<1xf64> - } - %13 = affine.load %10[0] : memref<1xf64> - %14 = math.sqrt %13 : f64 - affine.store %14, %9[0] : memref<1xf64> - affine.for %arg3 = 0 to 63 { - affine.for %arg4 = #map1(%arg3) to min #map5(%arg3) { - %16 = affine.load %0[%arg4, %arg2] : memref<2000x2600xf64> - %17 = affine.load %9[0] : memref<1xf64> - %18 = divf %16, %17 : f64 - affine.store %18, %2[%arg4, %arg2] : memref<2000x2600xf64> - } - } {scop.parallelizable} - affine.if #set(%arg2) { - affine.for %arg3 = #map6(%arg2) to 82 { - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - affine.for %arg6 = max #map3(%arg3, %arg2) to min #map4(%arg3) { - %16 = affine.load %1[%arg2, %arg6] : memref<2600x2600xf64> - %17 = affine.load %2[%arg5, %arg2] : memref<2000x2600xf64> - %18 = affine.load %0[%arg5, %arg6] : memref<2000x2600xf64> - %19 = mulf %17, %18 {scop.splittable = 1 : index} : f64 - %20 = addf %16, %19 : f64 - affine.store %20, %1[%arg2, %arg6] : memref<2600x2600xf64> - } - } - } - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - affine.for %arg6 = max #map3(%arg3, %arg2) to min #map4(%arg3) { - %16 = affine.load %0[%arg5, %arg6] : memref<2000x2600xf64> - %17 = affine.load %2[%arg5, %arg2] : memref<2000x2600xf64> - %18 = affine.load %1[%arg2, %arg6] : memref<2600x2600xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - %20 = subf %16, %19 : f64 - affine.store %20, %0[%arg5, %arg6] : memref<2000x2600xf64> - } - } - } - } {scop.parallelizable} - } - %15 = affine.load %9[0] : memref<1xf64> - affine.store %15, %1[%arg2, %arg2] : memref<2600x2600xf64> - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %11 = cmpi sgt, %arg0, %c42_i32 : i32 - %12 = scf.if %11 -> (i1) { - %13 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %14 = llvm.load %13 : !llvm.ptr> - %15 = llvm.mlir.addressof @str0 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.call @strcmp(%14, %16) : (!llvm.ptr, !llvm.ptr) -> i32 - %18 = trunci %17 : i32 to i1 - %19 = xor %18, %true : i1 - scf.yield %19 : i1 - } else { - scf.yield %false : i1 - } - scf.if %12 { - call @print_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %0 : memref<2000x2600xf64> - memref.dealloc %1 : memref<2600x2600xf64> - memref.dealloc %2 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref<1xf64>) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[0] : memref<1xf64> - return - } - func private @S1(%arg0: memref<1xf64>, %arg1: memref, %arg2: index, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[0] : memref<1xf64> - %1 = affine.load %arg1[symbol(%arg2), symbol(%arg3)] : memref - %2 = mulf %1, %1 {scop.splittable = 0 : index} : f64 - %3 = addf %0, %2 : f64 - affine.store %3, %arg0[0] : memref<1xf64> - return - } - func private @S2(%arg0: memref<1xf64>, %arg1: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg1[0] : memref<1xf64> - %1 = math.sqrt %0 : f64 - affine.store %1, %arg0[0] : memref<1xf64> - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg2[0] : memref<1xf64> - affine.store %0, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref<1xf64>, %arg4: memref) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[0] : memref<1xf64> - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = subf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.nosplit.polymer.seq.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.nosplit.polymer.seq.mlir deleted file mode 100644 index 881f05ed..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.nosplit.polymer.seq.mlir +++ /dev/null @@ -1,340 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0, d1) -> (2599, d0 * 32 + 32, d1 * 32 + 31)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2000, d0 * 32 + 32)> -#map6 = affine_map<(d0) -> ((d0 - 30) ceildiv 32)> -#set = affine_set<(d0) : (-d0 + 2598 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c2600 = constant 2600 : index - %cst = constant 0.000000e+00 : f64 - %0 = memref.alloc() : memref<2000x2600xf64> - %1 = memref.alloc() : memref<2600x2600xf64> - %2 = memref.alloc() : memref<2000x2600xf64> - %3 = memref.cast %0 : memref<2000x2600xf64> to memref - %4 = memref.cast %1 : memref<2600x2600xf64> to memref - %5 = memref.cast %2 : memref<2000x2600xf64> to memref - %6:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %13 = cmpi slt, %arg2, %c2000_i32 : i32 - scf.condition(%13) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %13 = index_cast %arg3 : i32 to index - %14 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %16 = cmpi slt, %arg4, %c2600_i32 : i32 - scf.condition(%16) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %16 = index_cast %arg4 : i32 to index - %17 = muli %arg3, %arg4 : i32 - %18 = remi_signed %17, %c2000_i32 : i32 - %19 = sitofp %18 : i32 to f64 - %20 = sitofp %c2000_i32 : i32 to f64 - %21 = divf %19, %20 : f64 - %22 = sitofp %c100_i32 : i32 to f64 - %23 = mulf %21, %22 : f64 - %24 = sitofp %c10_i32 : i32 to f64 - %25 = addf %23, %24 : f64 - memref.store %25, %0[%13, %16] : memref<2000x2600xf64> - memref.store %cst, %2[%13, %16] : memref<2000x2600xf64> - %26 = addi %arg4, %c1_i32 : i32 - scf.yield %26 : i32 - } - %15 = addi %arg3, %c1_i32 : i32 - scf.yield %15 : i32 - } - %7 = index_cast %6#0 : i32 to index - %8 = scf.for %arg2 = %7 to %c2600 step %c1 iter_args(%arg3 = %6#0) -> (i32) { - %13 = index_cast %arg3 : i32 to index - scf.for %arg4 = %c0 to %c2600 step %c1 { - memref.store %cst, %1[%13, %arg4] : memref<2600x2600xf64> - } - %14 = addi %arg3, %c1_i32 : i32 - scf.yield %14 : i32 - } - call @polybench_timer_start() : () -> () - %9 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %10 = memref.alloca() : memref<1xf64> - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - affine.store %cst, %1[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 2600 { - affine.store %cst, %10[0] : memref<1xf64> - affine.for %arg3 = 0 to 2000 { - %16 = affine.load %10[0] : memref<1xf64> - %17 = affine.load %0[%arg3, %arg2] : memref<2000x2600xf64> - %18 = mulf %17, %17 {scop.splittable = 0 : index} : f64 - %19 = addf %16, %18 : f64 - affine.store %19, %10[0] : memref<1xf64> - } - %13 = affine.load %10[0] : memref<1xf64> - %14 = math.sqrt %13 : f64 - affine.store %14, %9[0] : memref<1xf64> - affine.for %arg3 = 0 to 63 { - affine.for %arg4 = #map1(%arg3) to min #map5(%arg3) { - %16 = affine.load %0[%arg4, %arg2] : memref<2000x2600xf64> - %17 = affine.load %9[0] : memref<1xf64> - %18 = divf %16, %17 : f64 - affine.store %18, %2[%arg4, %arg2] : memref<2000x2600xf64> - } - } - affine.if #set(%arg2) { - affine.for %arg3 = #map6(%arg2) to 82 { - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - affine.for %arg6 = max #map3(%arg3, %arg2) to min #map4(%arg3) { - %16 = affine.load %1[%arg2, %arg6] : memref<2600x2600xf64> - %17 = affine.load %2[%arg5, %arg2] : memref<2000x2600xf64> - %18 = affine.load %0[%arg5, %arg6] : memref<2000x2600xf64> - %19 = mulf %17, %18 {scop.splittable = 1 : index} : f64 - %20 = addf %16, %19 : f64 - affine.store %20, %1[%arg2, %arg6] : memref<2600x2600xf64> - } - } - } - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - affine.for %arg6 = max #map3(%arg3, %arg2) to min #map4(%arg3) { - %16 = affine.load %0[%arg5, %arg6] : memref<2000x2600xf64> - %17 = affine.load %2[%arg5, %arg2] : memref<2000x2600xf64> - %18 = affine.load %1[%arg2, %arg6] : memref<2600x2600xf64> - %19 = mulf %17, %18 {scop.splittable = 2 : index} : f64 - %20 = subf %16, %19 : f64 - affine.store %20, %0[%arg5, %arg6] : memref<2000x2600xf64> - } - } - } - } - } - %15 = affine.load %9[0] : memref<1xf64> - affine.store %15, %1[%arg2, %arg2] : memref<2600x2600xf64> - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %11 = cmpi sgt, %arg0, %c42_i32 : i32 - %12 = scf.if %11 -> (i1) { - %13 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %14 = llvm.load %13 : !llvm.ptr> - %15 = llvm.mlir.addressof @str0 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.call @strcmp(%14, %16) : (!llvm.ptr, !llvm.ptr) -> i32 - %18 = trunci %17 : i32 to i1 - %19 = xor %18, %true : i1 - scf.yield %19 : i1 - } else { - scf.yield %false : i1 - } - scf.if %12 { - call @print_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %0 : memref<2000x2600xf64> - memref.dealloc %1 : memref<2600x2600xf64> - memref.dealloc %2 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref<1xf64>) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[0] : memref<1xf64> - return - } - func private @S1(%arg0: memref<1xf64>, %arg1: memref, %arg2: index, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[0] : memref<1xf64> - %1 = affine.load %arg1[symbol(%arg2), symbol(%arg3)] : memref - %2 = mulf %1, %1 {scop.splittable = 0 : index} : f64 - %3 = addf %0, %2 : f64 - affine.store %3, %arg0[0] : memref<1xf64> - return - } - func private @S2(%arg0: memref<1xf64>, %arg1: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg1[0] : memref<1xf64> - %1 = math.sqrt %0 : f64 - affine.store %1, %arg0[0] : memref<1xf64> - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg2[0] : memref<1xf64> - affine.store %0, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref<1xf64>, %arg4: memref) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[0] : memref<1xf64> - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = subf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.c deleted file mode 100644 index d949d73a..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.c +++ /dev/null @@ -1,212 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j, k; - - DATA_TYPE nrm; - -#pragma scop - for (k = 0; k < _PB_N; k++) - { - nrm = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) - nrm += A[i][k] * A[i][k]; - R[k][k] = SQRT_FUN(nrm); - for (i = 0; i < _PB_M; i++) - Q[i][k] = A[i][k] / R[k][k]; - for (j = k + 1; j < _PB_N; j++) - { - R[k][j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) - R[k][j] += Q[i][k] * A[i][j]; - for (i = 0; i < _PB_M; i++) - A[i][j] = A[i][j] - Q[i][k] * R[k][j]; - } - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.mlir deleted file mode 100644 index c4a90953..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.mlir +++ /dev/null @@ -1,266 +0,0 @@ -#map = affine_map<(d0) -> (d0 + 1)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloc() : memref<2000x2600xf64> - %1 = memref.alloc() : memref<2600x2600xf64> - %2 = memref.alloc() : memref<2000x2600xf64> - %3 = memref.cast %0 : memref<2000x2600xf64> to memref - %4 = memref.cast %1 : memref<2600x2600xf64> to memref - %5 = memref.cast %2 : memref<2000x2600xf64> to memref - call @init_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - call @kernel_gramschmidt(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %6 = cmpi sgt, %arg0, %c42_i32 : i32 - %7 = scf.if %6 -> (i1) { - %8 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %9 = llvm.load %8 : !llvm.ptr> - %10 = llvm.mlir.addressof @str0 : !llvm.ptr> - %11 = llvm.getelementptr %10[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %12 = llvm.call @strcmp(%9, %11) : (!llvm.ptr, !llvm.ptr) -> i32 - %13 = trunci %12 : i32 to i1 - %14 = xor %13, %true : i1 - scf.yield %14 : i1 - } else { - scf.yield %false : i1 - } - scf.if %7 { - call @print_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %0 : memref<2000x2600xf64> - memref.dealloc %1 : memref<2600x2600xf64> - memref.dealloc %2 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %cst = constant 0.000000e+00 : f64 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg5 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg5 : i32, i32 - } do { - ^bb0(%arg5: i32, %arg6: i32): // no predecessors - %4 = index_cast %arg6 : i32 to index - %5 = scf.while (%arg7 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg7, %arg1 : i32 - scf.condition(%7) %arg7 : i32 - } do { - ^bb0(%arg7: i32): // no predecessors - %7 = index_cast %arg7 : i32 to index - %8 = muli %arg6, %arg7 : i32 - %9 = remi_signed %8, %arg0 : i32 - %10 = sitofp %9 : i32 to f64 - %11 = sitofp %arg0 : i32 to f64 - %12 = divf %10, %11 : f64 - %13 = sitofp %c100_i32 : i32 to f64 - %14 = mulf %12, %13 : f64 - %15 = sitofp %c10_i32 : i32 to f64 - %16 = addf %14, %15 : f64 - memref.store %16, %arg2[%4, %7] : memref - memref.store %cst, %arg4[%4, %7] : memref - %17 = addi %arg7, %c1_i32 : i32 - scf.yield %17 : i32 - } - %6 = addi %arg6, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %0#0 : i32 to index - %3 = scf.for %arg5 = %2 to %1 step %c1 iter_args(%arg6 = %0#0) -> (i32) { - %4 = index_cast %arg6 : i32 to index - scf.for %arg7 = %c0 to %1 step %c1 { - memref.store %cst, %arg3[%4, %arg7] : memref - } - %5 = addi %arg6, %c1_i32 : i32 - scf.yield %5 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg0 : i32 to index - %1 = memref.alloca() : memref<1xf64> - %2 = index_cast %arg1 : i32 to index - affine.for %arg5 = 0 to %2 { - affine.store %cst, %1[0] : memref<1xf64> - affine.for %arg6 = 0 to %0 { - %5 = affine.load %arg2[%arg6, %arg5] : memref - %6 = mulf %5, %5 : f64 - %7 = affine.load %1[0] : memref<1xf64> - %8 = addf %7, %6 : f64 - affine.store %8, %1[0] : memref<1xf64> - } - %3 = affine.load %1[0] : memref<1xf64> - %4 = math.sqrt %3 : f64 - affine.store %4, %arg3[%arg5, %arg5] : memref - affine.for %arg6 = 0 to %0 { - %5 = affine.load %arg2[%arg6, %arg5] : memref - %6 = divf %5, %4 : f64 - affine.store %6, %arg4[%arg6, %arg5] : memref - } - affine.for %arg6 = #map(%arg5) to %2 { - affine.store %cst, %arg3[%arg5, %arg6] : memref - affine.for %arg7 = 0 to %0 { - %5 = affine.load %arg4[%arg7, %arg5] : memref - %6 = affine.load %arg2[%arg7, %arg6] : memref - %7 = mulf %5, %6 : f64 - %8 = affine.load %arg3[%arg5, %arg6] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg3[%arg5, %arg6] : memref - } - affine.for %arg7 = 0 to %0 { - %5 = affine.load %arg2[%arg7, %arg6] : memref - %6 = affine.load %arg4[%arg7, %arg5] : memref - %7 = affine.load %arg3[%arg5, %arg6] : memref - %8 = mulf %6, %7 : f64 - %9 = subf %5, %8 : f64 - affine.store %9, %arg2[%arg7, %arg6] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.c deleted file mode 100644 index a82dbb77..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.c +++ /dev/null @@ -1,242 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j, k; - - DATA_TYPE nrm; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9; - register int lbv, ubv; -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_N-2,32);t2++) { - for (t4=t2;t4<=floord(_PB_N-1,32);t4++) { - for (t5=32*t2;t5<=min(min(_PB_N-2,32*t2+31),32*t4+30);t5++) { - for (t7=max(32*t4,t5+1);t7<=min(_PB_N-1,32*t4+31);t7++) { - R[t5][t7] = SCALAR_VAL(0.0);; - } - } - } - } - for (t2=0;t2<=_PB_N-1;t2++) { - nrm = SCALAR_VAL(0.0);; - for (t4=0;t4<=_PB_M-1;t4++) { - nrm += A[t4][t2] * A[t4][t2];; - } - R[t2][t2] = SQRT_FUN(nrm);; - for (t4=0;t4<=floord(_PB_M-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_M-1,32*t4+31);t5++) { - Q[t5][t2] = A[t5][t2] / R[t2][t2];; - } - } - if ((_PB_M >= 1) && (t2 <= _PB_N-2)) { - for (t4=ceild(t2-30,32);t4<=floord(_PB_N-1,32);t4++) { - for (t6=0;t6<=floord(_PB_M-1,32);t6++) { - for (t8=32*t6;t8<=min(_PB_M-1,32*t6+31);t8++) { - for (t9=max(32*t4,t2+1);t9<=min(_PB_N-1,32*t4+31);t9++) { - R[t2][t9] += Q[t8][t2] * A[t8][t9];; - } - } - } - for (t6=0;t6<=floord(_PB_M-1,32);t6++) { - for (t8=32*t6;t8<=min(_PB_M-1,32*t6+31);t8++) { - for (t9=max(32*t4,t2+1);t9<=min(_PB_N-1,32*t4+31);t9++) { - A[t8][t9] = A[t8][t9] - Q[t8][t2] * R[t2][t9];; - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.cloog b/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.cloog deleted file mode 100644 index d3b9d1ae..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.cloog +++ /dev/null @@ -1,196 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_N _PB_M - -# Number of statements -7 - -# S1 (nrm = SCALAR_VAL(0.0);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S2 (nrm += A[i][k] * A[i][k];) -7 6 -1 1 0 0 0 0 -1 -1 0 1 0 -1 -1 0 0 1 0 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -1 0 0 0 1 -1 -0 0 0 0 0 0 -0 0 0 - -# S3 (R[k][k] = SQRT_FUN(nrm);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S4 (Q[i][k] = A[i][k] / R[k][k];) -9 7 -1 0 1 0 0 0 0 -1 0 -1 0 1 0 -1 -1 0 0 0 1 0 -1 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 -1 32 0 -1 0 0 31 -0 0 0 - -# S5 (R[k][j] = SCALAR_VAL(0.0);) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -1 0 0 -1 0 1 0 -2 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S6 (R[k][j] += Q[i][k] * A[i][j];) -13 9 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 -1 0 0 0 -1 0 1 0 -1 -1 0 0 -1 0 0 1 0 -2 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 0 -1 32 0 0 -1 0 0 0 31 -1 0 -32 0 0 1 0 0 0 -1 0 32 0 0 -1 0 0 31 -0 0 0 - -# S7 (A[i][j] = A[i][j] - Q[i][k] * R[k][j];) -13 9 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 -1 0 0 0 -1 0 1 0 -1 -1 0 0 -1 0 0 1 0 -2 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 0 -1 32 0 0 -1 0 0 0 31 -1 0 -32 0 0 1 0 0 0 -1 0 32 0 0 -1 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -7 - -# T(S1) -9 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S2) -9 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S3) -9 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 -3 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S4) -9 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S5) -9 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S6) -9 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - -# T(S7) -9 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - -# we will set the scattering dimension names -9 -t1 t2 t3 t4 t5 t6 t7 t8 t9 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.log b/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.log deleted file mode 100644 index f81a9d4f..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.pluto.log +++ /dev/null @@ -1,3069 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_N _PB_M - - -# Number of statements -7 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -nrm = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -READ -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -WRITE -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -nrm += A[i][k] * A[i][k]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 3.3 Access -WRITE -3 8 3 1 0 2 -# e/i| Arr [1] [2]| k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 ## [2] == k - -READ -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -R[k][k] = SQRT_FUN(nrm); - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 3 ## c3 == 3 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -Q[i][k] = A[i][k] / R[k][k]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 1 0 -2 ## -k+_PB_N-2 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k j -# Statement body expression -R[k][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 6.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -R[k][j] += Q[i][k] * A[i][j]; - - -# =============================================== Statement 7 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c5 == 2 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 7.3 Access -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -A[i][j] = A[i][j] - Q[i][k] * R[k][j]; - - -# =============================================== Extensions - -b0 k b1 j b2 i b3 - - - -# Number of arrays -11 -# Mapping array-identifiers/array-names -1 k -2 _PB_N -3 nrm -4 SCALAR_VAL -5 i -6 _PB_M -7 A -8 R -9 SQRT_FUN -10 Q -11 j - - - -# File name -(null) -# Starting line and column -99 0 -# Ending line and column -116 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_N _PB_M -S1 "nrm = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -nrm[0] -Original loop: 0 -> yes - -S2 "nrm += A[i][k] * A[i][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -nrm[0] -A[i][k] -A[i][k] -Write accesses -nrm[0] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "R[k][k] = SQRT_FUN(nrm);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -nrm[0] -Write accesses -R[k][k] -Original loop: 0 -> yes - -S4 "Q[i][k] = A[i][k] / R[k][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S4): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -A[i][k] -R[k][k] -Write accesses -Q[i][k] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "R[k][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 - -T(S5): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "R[k][j] += Q[i][k] * A[i][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S6): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -R[k][j] -Q[i][k] -A[i][j] -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S7 "A[i][j] = A[i][j] - Q[i][k] * R[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S7): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -A[i][j] -Q[i][k] -R[k][j] -Write accesses -A[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S4 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 2 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 3 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 4 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 5 from S7 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 6 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 7 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 8 from S6 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 9 from S7 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 10 from S7 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 11 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 12 from S7 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 13 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 14 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 15 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 16 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S7 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 18 from S6 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 19 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 20 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 21 from S2 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 22 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 23 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 24 from S6 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 25 from S6 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 26 from S7 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 27 from S7 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 28 from S2 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 29 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 30 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 31 from S5 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 32 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 33 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 34 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S7): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 7 -[pluto] Total number of loops: 14 -[pluto] Number of deps: 34 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 1 2 3 5 6 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 6: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[2 dims; 3 constraints] -c_j-1 >= 0 -c_i-2 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 0, h(S6) = 1, h(S7) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 1; num_constraints: 12 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 2; num_constraints: 12 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 8 constraints - For dep 3; num_constraints: 14 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 4; num_constraints: 18 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 5; num_constraints: 12 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 6; num_constraints: 15 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 7; num_constraints: 12 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 8; num_constraints: 5 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 9; num_constraints: 5 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 10; num_constraints: 12 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 11; num_constraints: 18 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 12; num_constraints: 12 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 13; num_constraints: 12 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 14; num_constraints: 13 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 15; num_constraints: 9 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 16; num_constraints: 18 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 17; num_constraints: 12 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 18; num_constraints: 5 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 19; num_constraints: 13 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 20; num_constraints: 9 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 21; num_constraints: 16 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 22; num_constraints: 16 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 23; num_constraints: 16 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 24; num_constraints: 12 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 25; num_constraints: 10 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 26; num_constraints: 5 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 27; num_constraints: 5 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 28; num_constraints: 16 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 29; num_constraints: 13 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 30; num_constraints: 9 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 31; num_constraints: 12 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 32; num_constraints: 18 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_o) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints - For dep 33; num_constraints: 13 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 34; num_constraints: 5 - After dep 1; num_constraints: 12 - After dep 2; num_constraints: 24 - After dep 3; num_constraints: 38 - After dep 4; num_constraints: 56 - After dep 5; num_constraints: 68 - After dep 6; num_constraints: 83 - After dep 8; num_constraints: 88 - After dep 9; num_constraints: 93 - After dep 10; num_constraints: 105 - After dep 11; num_constraints: 123 - After dep 12; num_constraints: 135 - After dep 14; num_constraints: 148 - After dep 15; num_constraints: 157 - After dep 16; num_constraints: 175 - After dep 17; num_constraints: 187 - After dep 18; num_constraints: 192 - After dep 19; num_constraints: 205 - After dep 20; num_constraints: 214 - After dep 21; num_constraints: 230 - After dep 22; num_constraints: 246 - After dep 23; num_constraints: 262 - After dep 24; num_constraints: 274 - After dep 25; num_constraints: 284 - After dep 26; num_constraints: 289 - After dep 27; num_constraints: 294 - After dep 28; num_constraints: 310 - After dep 29; num_constraints: 323 - After dep 30; num_constraints: 332 - After dep 32; num_constraints: 350 - After dep 33; num_constraints: 363 - After dep 34; num_constraints: 368 - After all dependences: num constraints: 116, num variables: 31 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_l >= 0 - -Set #1 -[31 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_p >= 0 - -Set #1 -[31 dims; 1 constraints] --c_q >= 0 - -Set #1 -[31 dims; 1 constraints] -c_p-c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_t >= 0 - -Set #1 -[31 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_x >= 0 - -Set #1 -[31 dims; 1 constraints] --c_y >= 0 - -Set #1 -[31 dims; 1 constraints] -c_x-c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_| >= 0 - -Set #1 -[31 dims; 1 constraints] -c_} >= 0 - -Set #1 -[31 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[31 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[31 dims; 1 constraints] -c_ >= 0 - -Set #1 -[31 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[31 dims; 1 constraints] -c_€+c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 3 disjuncts -Set #1 -[31 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[31 dims; 1 constraints] -c_… >= 0 - -Set #1 -[31 dims; 1 constraints] --c_† >= 0 - -Set #1 -[31 dims; 1 constraints] -c_„+c_…-c_†-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[31 dims; 7 constraints] - +c_l -1 >= 0 - +c_p -c_q -1 >= 0 - +c_t -1 >= 0 - +c_x -c_y -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ +c_ -c_‚ -1 >= 0 - +c_„ +c_… -c_† -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (31 variables, 161 constraints) -[pluto] pluto_constraints_lexmin_isl (24 variables, 161 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = k, h(S2) = k, h(S3) = k, h(S4) = k, h(S5) = k, h(S6) = k, h(S7) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[31 dims; 1 constraints] --c_q >= 0 - -Set #1 -[31 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[31 dims; 1 constraints] --c_y >= 0 - -Set #1 -[31 dims; 1 constraints] --c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_} >= 0 - -Set #1 -[31 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_ >= 0 - -Set #1 -[31 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[31 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_… >= 0 - -Set #1 -[31 dims; 1 constraints] --c_† >= 0 - -Set #1 -[31 dims; 1 constraints] -c_…-c_†-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[31 dims; 5 constraints] - -c_q -1 >= 0 - -c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… -c_† -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (31 variables, 157 constraints) -[pluto] pluto_constraints_lexmin_isl (24 variables, 157 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (0, k) -loop types (scalar, loop) - -T(S6): (1, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied - 16 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 1 - After dep 1; num_constraints: 12 - After dep 2; num_constraints: 24 - After dep 3; num_constraints: 38 - After dep 4; num_constraints: 56 - After dep 6; num_constraints: 71 - After dep 8; num_constraints: 76 - After dep 11; num_constraints: 94 - After dep 15; num_constraints: 103 - After dep 16; num_constraints: 121 - After dep 18; num_constraints: 126 - After dep 20; num_constraints: 135 - After dep 25; num_constraints: 145 - After dep 30; num_constraints: 154 - After dep 32; num_constraints: 172 - After dep 34; num_constraints: 177 - After all dependences: num constraints: 67, num variables: 31 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[31 dims; 1 constraints] --c_q >= 0 - -Set #1 -[31 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[31 dims; 1 constraints] --c_y >= 0 - -Set #1 -[31 dims; 1 constraints] --c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_} >= 0 - -Set #1 -[31 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_ >= 0 - -Set #1 -[31 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[31 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_… >= 0 - -Set #1 -[31 dims; 1 constraints] -c_† >= 0 - -Set #1 -[31 dims; 1 constraints] -c_…+c_†-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[31 dims; 5 constraints] - -c_q -1 >= 0 - -c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… +c_† -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (31 variables, 108 constraints) -[pluto] pluto_constraints_lexmin_isl (24 variables, 108 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (0, k) -loop types (scalar, loop) - -T(S6): (1, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 6 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 1 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 1 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 3 - SCC 6: size: 1: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 7 dep(s) satisfied -h(S1) = 1, h(S2) = 2, h(S3) = 3, h(S4) = 4, h(S5) = 0, h(S6) = 5, h(S7) = 5 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 2 - After dep 3; num_constraints: 14 - After dep 8; num_constraints: 19 - After dep 15; num_constraints: 28 - After dep 18; num_constraints: 33 - After dep 20; num_constraints: 42 - After dep 25; num_constraints: 52 - After dep 30; num_constraints: 61 - After dep 34; num_constraints: 66 - After all dependences: num constraints: 20, num variables: 31 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_q >= 0 - -Set #1 -[31 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_y >= 0 - -Set #1 -[31 dims; 1 constraints] -c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_} >= 0 - -Set #1 -[31 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_ >= 0 - -Set #1 -[31 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[31 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[31 dims; 1 constraints] -c_… >= 0 - -Set #1 -[31 dims; 1 constraints] -c_† >= 0 - -Set #1 -[31 dims; 1 constraints] -c_…+c_†-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[31 dims; 5 constraints] - +c_q -1 >= 0 - +c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… +c_† -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (31 variables, 61 constraints) -[pluto] pluto_constraints_lexmin_isl (24 variables, 61 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = 0, h(S4) = i, h(S5) = j, h(S6) = j, h(S7) = j -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[31 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[31 dims; 1 constraints] --c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_† >= 0 - -Set #1 -[31 dims; 1 constraints] -c_†-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[31 dims; 2 constraints] - -c_‚ -1 >= 0 - +c_† -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (31 variables, 55 constraints) -[pluto] pluto_constraints_lexmin_isl (24 variables, 55 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S5): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S6): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 3 - After dep 3; num_constraints: 14 - After dep 8; num_constraints: 19 - After dep 18; num_constraints: 24 - After dep 25; num_constraints: 34 - After dep 34; num_constraints: 39 - After all dependences: num constraints: 17, num variables: 31 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[31 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[31 dims; 1 constraints] --c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_† >= 0 - -Set #1 -[31 dims; 1 constraints] -c_†-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[31 dims; 2 constraints] - -c_‚ -1 >= 0 - +c_† -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (31 variables, 52 constraints) -[pluto] pluto_constraints_lexmin_isl (24 variables, 52 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S5): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S6): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 1 - SCC 5: size: 1: max stmt dim: 2 - SCC 6: size: 1: max stmt dim: 1 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 0 and id 1 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied - 2 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 4 - After dep 8; num_constraints: 5 - After dep 18; num_constraints: 10 - After dep 34; num_constraints: 15 - After all dependences: num constraints: 5, num variables: 31 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[31 dims; 1 constraints] -c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[31 dims; 1 constraints] -c_† >= 0 - -Set #1 -[31 dims; 1 constraints] -c_†-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -linear independence constraints -[31 dims; 2 constraints] - +c_‚ -1 >= 0 - +c_† -1 >= 0 - -[pluto] (Band 5) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (31 variables, 40 constraints) -[pluto] pluto_constraints_lexmin_isl (24 variables, 40 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = i, h(S7) = i -[pluto] pluto_auto_transform: band level 4; 1 hyperplane(s) found -T(S1): (1, k, 1, 0, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S5): (0, k, 0, j, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S6): (1, k, 5, j, 0, i) -loop types (scalar, loop, scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j, 1, i) -loop types (scalar, loop, scalar, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied - 16 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (1, k, 1, 0, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S5): (0, k, 0, j, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S6): (1, k, 5, j, 0, i) -loop types (scalar, loop, scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j, 1, i) -loop types (scalar, loop, scalar, loop, scalar, loop) - -[pluto_tile] Outermost tilable bands -(t4, t5, t6, ) with stmts {S6, S7, } -(t2, t3, t4, ) with stmts {S5, } -[pluto_tile] Innermost tilable bands -(t4, t5, t6, ) with stmts {S6, S7, } -(t2, t3, t4, ) with stmts {S5, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied - 16 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 3 dep(s) satisfied -[Pluto] After tiling: -T(S1): (1, k, 1, 0, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i/t9 {loop with stmts: S6, } -t7 {loop with stmts: S6, } -t7 {loop with stmts: S6, } -t9 {loop with stmts: S7, } -t7 {loop with stmts: S7, } -t7 {loop with stmts: S7, } -t7 {loop with stmts: S5, } -t5 {loop with stmts: S5, } -t5 {loop with stmts: S4, } -32, i, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (0, k/32, 0, j/32, k, 0, j, 1, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, loop, scalar, scalar) - -T(S6): (1, k, 5, j/32, 0, i/32, j, 0, i) -loop types (scalar, loop, scalar, loop, scalar, loop, loop, scalar, loop) - -T(S7): (1, k, 5, j/32, 1, i/32, j, 1, i) -loop types (scalar, loop, scalar, loop, scalar, loop, loop, scalar, loop) - -Stmts in bands 0 and 1 are distributed in tile space -Getting loop at depth 6 -[pluto-intra-tile-opt] Score for loop 0: -24 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 6 -[pluto-intra-tile-opt] Score for loop 0: -44 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: -28 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied - 16 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (1, k, 1, 0, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i/32, i, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (0, k/32, 0, j/32, k, 0, j, 1, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, loop, scalar, scalar) - -T(S6): (1, k, 5, j/32, 0, i/32, 0, i, j) -loop types (scalar, loop, scalar, loop, scalar, loop, loop, scalar, loop) - -T(S7): (1, k, 5, j/32, 1, i/32, 1, i, j) -loop types (scalar, loop, scalar, loop, scalar, loop, loop, scalar, loop) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(2,9), S2(2,9), S3(2,9), S4(5,9), S5(5,9), S6(7,9), S7(7,9), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to gramschmidt.origin.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.004367s -[pluto] Auto-transformation time: 0.071920s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.006140s -[pluto] Code generation time: 0.038406s -[pluto] Other/Misc time: 0.152992s -[pluto] Total time: 0.267685s -[pluto] All times: 0.004367 0.071920 0.038406 0.152992 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.polymer.parallel.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.polymer.parallel.mlir deleted file mode 100644 index 5dba3bfe..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.polymer.parallel.mlir +++ /dev/null @@ -1,376 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 + 1)> -#map1 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> -#map2 = affine_map<(d0) -> (d0)> -#map3 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map4 = affine_map<(d0) -> (d0 * 32)> -#map5 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> -#map6 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map7 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#map8 = affine_map<(d0) -> ((d0 - 30) ceildiv 32)> -#set0 = affine_set<()[s0, s1] : (s0 - 2 >= 0, s1 - 1 >= 0)> -#set1 = affine_set<(d0)[s0] : (-d0 + s0 - 2 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<2000xf64> - %1 = memref.cast %0 : memref<2000xf64> to memref - %2 = memref.alloc() : memref<2000x2600xf64> - %3 = memref.alloc() : memref<2600x2600xf64> - %4 = memref.alloc() : memref<2000x2600xf64> - %5 = memref.cast %2 : memref<2000x2600xf64> to memref - %6 = memref.cast %3 : memref<2600x2600xf64> to memref - %7 = memref.cast %4 : memref<2000x2600xf64> to memref - call @init_array(%c2000_i32, %c2600_i32, %5, %6, %7) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - call @kernel_gramschmidt_opt(%c2000_i32, %c2600_i32, %5, %6, %7, %1) : (i32, i32, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %8 = cmpi sgt, %arg0, %c42_i32 : i32 - %9 = scf.if %8 -> (i1) { - %10 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %11 = llvm.load %10 : !llvm.ptr> - %12 = llvm.mlir.addressof @str0 : !llvm.ptr> - %13 = llvm.getelementptr %12[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %14 = llvm.call @strcmp(%11, %13) : (!llvm.ptr, !llvm.ptr) -> i32 - %15 = trunci %14 : i32 to i1 - %16 = xor %15, %true : i1 - scf.yield %16 : i1 - } else { - scf.yield %false : i1 - } - scf.if %9 { - call @print_array(%c2000_i32, %c2600_i32, %5, %6, %7) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %2 : memref<2000x2600xf64> - memref.dealloc %3 : memref<2600x2600xf64> - memref.dealloc %4 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %cst = constant 0.000000e+00 : f64 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg5 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg5 : i32, i32 - } do { - ^bb0(%arg5: i32, %arg6: i32): // no predecessors - %4 = index_cast %arg6 : i32 to index - %5 = scf.while (%arg7 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg7, %arg1 : i32 - scf.condition(%7) %arg7 : i32 - } do { - ^bb0(%arg7: i32): // no predecessors - %7 = index_cast %arg7 : i32 to index - %8 = muli %arg6, %arg7 : i32 - %9 = remi_signed %8, %arg0 : i32 - %10 = sitofp %9 : i32 to f64 - %11 = sitofp %arg0 : i32 to f64 - %12 = divf %10, %11 : f64 - %13 = sitofp %c100_i32 : i32 to f64 - %14 = mulf %12, %13 : f64 - %15 = sitofp %c10_i32 : i32 to f64 - %16 = addf %14, %15 : f64 - memref.store %16, %arg2[%4, %7] : memref - memref.store %cst, %arg4[%4, %7] : memref - %17 = addi %arg7, %c1_i32 : i32 - scf.yield %17 : i32 - } - %6 = addi %arg6, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %0#0 : i32 to index - %3 = scf.for %arg5 = %2 to %1 step %c1 iter_args(%arg6 = %0#0) -> (i32) { - %4 = index_cast %arg6 : i32 to index - scf.for %arg7 = %c0 to %1 step %c1 { - memref.store %cst, %arg3[%4, %arg7] : memref - } - %5 = addi %arg6, %c1_i32 : i32 - scf.yield %5 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref, %arg5: memref) { - %0 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %1 = index_cast %arg0 : i32 to index - %2 = memref.alloca() : memref<1xf64> - %3 = index_cast %arg1 : i32 to index - affine.for %arg6 = 0 to %3 { - call @S0(%2) : (memref<1xf64>) -> () - affine.for %arg7 = 0 to %1 { - call @S1(%arg5, %arg7, %arg2, %arg6) : (memref, index, memref, index) -> () - call @S2(%2, %arg5, %arg7) : (memref<1xf64>, memref, index) -> () - } - call @S3(%0, %2) : (memref<1xf64>, memref<1xf64>) -> () - call @S4(%arg3, %arg6, %0) : (memref, index, memref<1xf64>) -> () - affine.for %arg7 = 0 to %1 { - call @S5(%arg4, %arg7, %arg6, %0, %arg2) : (memref, index, index, memref<1xf64>, memref) -> () - } - affine.for %arg7 = #map0(%arg6) to %3 { - call @S6(%arg3, %arg6, %arg7) : (memref, index, index) -> () - affine.for %arg8 = 0 to %1 { - call @S7(%arg3, %arg6, %arg7, %arg2, %arg8, %arg4) : (memref, index, index, memref, index, memref) -> () - } - affine.for %arg8 = 0 to %1 { - call @S8(%arg2, %arg8, %arg7, %arg3, %arg6, %arg4) : (memref, index, index, memref, index, memref) -> () - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref<1xf64>) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[0] : memref<1xf64> - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %1 = mulf %0, %0 {scop.splittable = 0 : index} : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref<1xf64>, %arg1: memref, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[0] : memref<1xf64> - %1 = affine.load %arg1[symbol(%arg2)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[0] : memref<1xf64> - return - } - func private @S3(%arg0: memref<1xf64>, %arg1: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg1[0] : memref<1xf64> - %1 = math.sqrt %0 : f64 - affine.store %1, %arg0[0] : memref<1xf64> - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg2[0] : memref<1xf64> - affine.store %0, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref<1xf64>, %arg4: memref) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[0] : memref<1xf64> - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = subf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @kernel_gramschmidt_opt(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref, %arg5: memref) { - %0 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = index_cast %arg0 : i32 to index - %3 = index_cast %arg1 : i32 to index - affine.if #set0()[%3, %2] { - affine.for %arg6 = 0 to #map1()[%3] { - affine.for %arg7 = #map2(%arg6) to #map3()[%3] { - affine.for %arg8 = #map4(%arg6) to min #map5(%arg6, %arg7)[%3] { - affine.for %arg9 = max #map6(%arg7, %arg8) to min #map7(%arg7)[%3] { - call @S6(%arg3, %arg8, %arg9) : (memref, index, index) -> () - } - } - } - } {scop.parallelizable} - affine.for %arg6 = 0 to %3 { - affine.for %arg7 = 0 to #map3()[%2] { - affine.for %arg8 = #map4(%arg7) to min #map7(%arg7)[%2] { - call @S1(%arg5, %arg8, %arg2, %arg6) : (memref, index, memref, index) -> () - } - } {scop.parallelizable} - call @S0(%1) : (memref<1xf64>) -> () - affine.for %arg7 = 0 to %2 { - call @S2(%1, %arg5, %arg7) : (memref<1xf64>, memref, index) -> () - } - call @S3(%0, %1) : (memref<1xf64>, memref<1xf64>) -> () - affine.for %arg7 = 0 to #map3()[%2] { - affine.for %arg8 = #map4(%arg7) to min #map7(%arg7)[%2] { - call @S5(%arg4, %arg8, %arg6, %0, %arg2) : (memref, index, index, memref<1xf64>, memref) -> () - } - } {scop.parallelizable} - affine.if #set1(%arg6)[%3] { - affine.for %arg7 = #map8(%arg6) to #map3()[%3] { - affine.for %arg8 = 0 to #map3()[%2] { - affine.for %arg9 = #map4(%arg8) to min #map7(%arg8)[%2] { - affine.for %arg10 = max #map6(%arg7, %arg6) to min #map7(%arg7)[%3] { - call @S7(%arg3, %arg6, %arg10, %arg2, %arg9, %arg4) : (memref, index, index, memref, index, memref) -> () - } - } - } - affine.for %arg8 = 0 to #map3()[%2] { - affine.for %arg9 = #map4(%arg8) to min #map7(%arg8)[%2] { - affine.for %arg10 = max #map6(%arg7, %arg6) to min #map7(%arg7)[%3] { - call @S8(%arg2, %arg9, %arg10, %arg3, %arg6, %arg4) : (memref, index, index, memref, index, memref) -> () - } - } - } - } {scop.parallelizable} - } - call @S4(%arg3, %arg6, %0) : (memref, index, memref<1xf64>) -> () - } - } - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.polymer.seq.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.polymer.seq.mlir deleted file mode 100644 index 0dd1c4df..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.polymer.seq.mlir +++ /dev/null @@ -1,376 +0,0 @@ -#map0 = affine_map<(d0) -> (d0 + 1)> -#map1 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> -#map2 = affine_map<(d0) -> (d0)> -#map3 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> -#map4 = affine_map<(d0) -> (d0 * 32)> -#map5 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> -#map6 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map7 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> -#map8 = affine_map<(d0) -> ((d0 - 30) ceildiv 32)> -#set0 = affine_set<()[s0, s1] : (s0 - 2 >= 0, s1 - 1 >= 0)> -#set1 = affine_set<(d0)[s0] : (-d0 + s0 - 2 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<2000xf64> - %1 = memref.cast %0 : memref<2000xf64> to memref - %2 = memref.alloc() : memref<2000x2600xf64> - %3 = memref.alloc() : memref<2600x2600xf64> - %4 = memref.alloc() : memref<2000x2600xf64> - %5 = memref.cast %2 : memref<2000x2600xf64> to memref - %6 = memref.cast %3 : memref<2600x2600xf64> to memref - %7 = memref.cast %4 : memref<2000x2600xf64> to memref - call @init_array(%c2000_i32, %c2600_i32, %5, %6, %7) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - call @kernel_gramschmidt_opt(%c2000_i32, %c2600_i32, %5, %6, %7, %1) : (i32, i32, memref, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %8 = cmpi sgt, %arg0, %c42_i32 : i32 - %9 = scf.if %8 -> (i1) { - %10 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %11 = llvm.load %10 : !llvm.ptr> - %12 = llvm.mlir.addressof @str0 : !llvm.ptr> - %13 = llvm.getelementptr %12[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %14 = llvm.call @strcmp(%11, %13) : (!llvm.ptr, !llvm.ptr) -> i32 - %15 = trunci %14 : i32 to i1 - %16 = xor %15, %true : i1 - scf.yield %16 : i1 - } else { - scf.yield %false : i1 - } - scf.if %9 { - call @print_array(%c2000_i32, %c2600_i32, %5, %6, %7) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %2 : memref<2000x2600xf64> - memref.dealloc %3 : memref<2600x2600xf64> - memref.dealloc %4 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %cst = constant 0.000000e+00 : f64 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg5 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg5 : i32, i32 - } do { - ^bb0(%arg5: i32, %arg6: i32): // no predecessors - %4 = index_cast %arg6 : i32 to index - %5 = scf.while (%arg7 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg7, %arg1 : i32 - scf.condition(%7) %arg7 : i32 - } do { - ^bb0(%arg7: i32): // no predecessors - %7 = index_cast %arg7 : i32 to index - %8 = muli %arg6, %arg7 : i32 - %9 = remi_signed %8, %arg0 : i32 - %10 = sitofp %9 : i32 to f64 - %11 = sitofp %arg0 : i32 to f64 - %12 = divf %10, %11 : f64 - %13 = sitofp %c100_i32 : i32 to f64 - %14 = mulf %12, %13 : f64 - %15 = sitofp %c10_i32 : i32 to f64 - %16 = addf %14, %15 : f64 - memref.store %16, %arg2[%4, %7] : memref - memref.store %cst, %arg4[%4, %7] : memref - %17 = addi %arg7, %c1_i32 : i32 - scf.yield %17 : i32 - } - %6 = addi %arg6, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %0#0 : i32 to index - %3 = scf.for %arg5 = %2 to %1 step %c1 iter_args(%arg6 = %0#0) -> (i32) { - %4 = index_cast %arg6 : i32 to index - scf.for %arg7 = %c0 to %1 step %c1 { - memref.store %cst, %arg3[%4, %arg7] : memref - } - %5 = addi %arg6, %c1_i32 : i32 - scf.yield %5 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref, %arg5: memref) { - %0 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %1 = index_cast %arg0 : i32 to index - %2 = memref.alloca() : memref<1xf64> - %3 = index_cast %arg1 : i32 to index - affine.for %arg6 = 0 to %3 { - call @S0(%2) : (memref<1xf64>) -> () - affine.for %arg7 = 0 to %1 { - call @S1(%arg5, %arg7, %arg2, %arg6) : (memref, index, memref, index) -> () - call @S2(%2, %arg5, %arg7) : (memref<1xf64>, memref, index) -> () - } - call @S3(%0, %2) : (memref<1xf64>, memref<1xf64>) -> () - call @S4(%arg3, %arg6, %0) : (memref, index, memref<1xf64>) -> () - affine.for %arg7 = 0 to %1 { - call @S5(%arg4, %arg7, %arg6, %0, %arg2) : (memref, index, index, memref<1xf64>, memref) -> () - } - affine.for %arg7 = #map0(%arg6) to %3 { - call @S6(%arg3, %arg6, %arg7) : (memref, index, index) -> () - affine.for %arg8 = 0 to %1 { - call @S7(%arg3, %arg6, %arg7, %arg2, %arg8, %arg4) : (memref, index, index, memref, index, memref) -> () - } - affine.for %arg8 = 0 to %1 { - call @S8(%arg2, %arg8, %arg7, %arg3, %arg6, %arg4) : (memref, index, index, memref, index, memref) -> () - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref<1xf64>) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[0] : memref<1xf64> - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %1 = mulf %0, %0 {scop.splittable = 0 : index} : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref<1xf64>, %arg1: memref, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[0] : memref<1xf64> - %1 = affine.load %arg1[symbol(%arg2)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[0] : memref<1xf64> - return - } - func private @S3(%arg0: memref<1xf64>, %arg1: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg1[0] : memref<1xf64> - %1 = math.sqrt %0 : f64 - affine.store %1, %arg0[0] : memref<1xf64> - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg2[0] : memref<1xf64> - affine.store %0, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref<1xf64>, %arg4: memref) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[0] : memref<1xf64> - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = subf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @kernel_gramschmidt_opt(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref, %arg5: memref) { - %0 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %1 = memref.alloca() : memref<1xf64> - %2 = index_cast %arg0 : i32 to index - %3 = index_cast %arg1 : i32 to index - affine.if #set0()[%3, %2] { - affine.for %arg6 = 0 to #map1()[%3] { - affine.for %arg7 = #map2(%arg6) to #map3()[%3] { - affine.for %arg8 = #map4(%arg6) to min #map5(%arg6, %arg7)[%3] { - affine.for %arg9 = max #map6(%arg7, %arg8) to min #map7(%arg7)[%3] { - call @S6(%arg3, %arg8, %arg9) : (memref, index, index) -> () - } - } - } - } - affine.for %arg6 = 0 to %3 { - affine.for %arg7 = 0 to #map3()[%2] { - affine.for %arg8 = #map4(%arg7) to min #map7(%arg7)[%2] { - call @S1(%arg5, %arg8, %arg2, %arg6) : (memref, index, memref, index) -> () - } - } - call @S0(%1) : (memref<1xf64>) -> () - affine.for %arg7 = 0 to %2 { - call @S2(%1, %arg5, %arg7) : (memref<1xf64>, memref, index) -> () - } - call @S3(%0, %1) : (memref<1xf64>, memref<1xf64>) -> () - affine.for %arg7 = 0 to #map3()[%2] { - affine.for %arg8 = #map4(%arg7) to min #map7(%arg7)[%2] { - call @S5(%arg4, %arg8, %arg6, %0, %arg2) : (memref, index, index, memref<1xf64>, memref) -> () - } - } - affine.if #set1(%arg6)[%3] { - affine.for %arg7 = #map8(%arg6) to #map3()[%3] { - affine.for %arg8 = 0 to #map3()[%2] { - affine.for %arg9 = #map4(%arg8) to min #map7(%arg8)[%2] { - affine.for %arg10 = max #map6(%arg7, %arg6) to min #map7(%arg7)[%3] { - call @S7(%arg3, %arg6, %arg10, %arg2, %arg9, %arg4) : (memref, index, index, memref, index, memref) -> () - } - } - } - affine.for %arg8 = 0 to #map3()[%2] { - affine.for %arg9 = #map4(%arg8) to min #map7(%arg8)[%2] { - affine.for %arg10 = max #map6(%arg7, %arg6) to min #map7(%arg7)[%3] { - call @S8(%arg2, %arg9, %arg10, %arg3, %arg6, %arg4) : (memref, index, index, memref, index, memref) -> () - } - } - } - } - } - call @S4(%arg3, %arg6, %0) : (memref, index, memref<1xf64>) -> () - } - } - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.splittable.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.splittable.mlir deleted file mode 100644 index 9f5acc22..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.origin.splittable.mlir +++ /dev/null @@ -1,267 +0,0 @@ -#map = affine_map<(d0) -> (d0 + 1)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloc() : memref<2000x2600xf64> - %1 = memref.alloc() : memref<2600x2600xf64> - %2 = memref.alloc() : memref<2000x2600xf64> - %3 = memref.cast %0 : memref<2000x2600xf64> to memref - %4 = memref.cast %1 : memref<2600x2600xf64> to memref - %5 = memref.cast %2 : memref<2000x2600xf64> to memref - call @init_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - call @kernel_gramschmidt(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %6 = cmpi sgt, %arg0, %c42_i32 : i32 - %7 = scf.if %6 -> (i1) { - %8 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %9 = llvm.load %8 : !llvm.ptr> - %10 = llvm.mlir.addressof @str0 : !llvm.ptr> - %11 = llvm.getelementptr %10[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %12 = llvm.call @strcmp(%9, %11) : (!llvm.ptr, !llvm.ptr) -> i32 - %13 = trunci %12 : i32 to i1 - %14 = xor %13, %true : i1 - scf.yield %14 : i1 - } else { - scf.yield %false : i1 - } - scf.if %7 { - call @print_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %0 : memref<2000x2600xf64> - memref.dealloc %1 : memref<2600x2600xf64> - memref.dealloc %2 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %cst = constant 0.000000e+00 : f64 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg5 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg5 : i32, i32 - } do { - ^bb0(%arg5: i32, %arg6: i32): // no predecessors - %4 = index_cast %arg6 : i32 to index - %5 = scf.while (%arg7 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg7, %arg1 : i32 - scf.condition(%7) %arg7 : i32 - } do { - ^bb0(%arg7: i32): // no predecessors - %7 = index_cast %arg7 : i32 to index - %8 = muli %arg6, %arg7 : i32 - %9 = remi_signed %8, %arg0 : i32 - %10 = sitofp %9 : i32 to f64 - %11 = sitofp %arg0 : i32 to f64 - %12 = divf %10, %11 : f64 - %13 = sitofp %c100_i32 : i32 to f64 - %14 = mulf %12, %13 : f64 - %15 = sitofp %c10_i32 : i32 to f64 - %16 = addf %14, %15 : f64 - memref.store %16, %arg2[%4, %7] : memref - memref.store %cst, %arg4[%4, %7] : memref - %17 = addi %arg7, %c1_i32 : i32 - scf.yield %17 : i32 - } - %6 = addi %arg6, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %0#0 : i32 to index - %3 = scf.for %arg5 = %2 to %1 step %c1 iter_args(%arg6 = %0#0) -> (i32) { - %4 = index_cast %arg6 : i32 to index - scf.for %arg7 = %c0 to %1 step %c1 { - memref.store %cst, %arg3[%4, %arg7] : memref - } - %5 = addi %arg6, %c1_i32 : i32 - scf.yield %5 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg0 : i32 to index - %1 = memref.alloca() : memref<1xf64> - %2 = index_cast %arg1 : i32 to index - affine.for %arg5 = 0 to %2 { - affine.store %cst, %1[0] : memref<1xf64> - affine.for %arg6 = 0 to %0 { - %5 = affine.load %arg2[%arg6, %arg5] : memref - %6 = mulf %5, %5 {scop.splittable = 0 : index} : f64 - %7 = affine.load %1[0] : memref<1xf64> - %8 = addf %7, %6 : f64 - affine.store %8, %1[0] : memref<1xf64> - } - %3 = affine.load %1[0] : memref<1xf64> - %4 = math.sqrt %3 : f64 - affine.store %4, %arg3[%arg5, %arg5] : memref - affine.for %arg6 = 0 to %0 { - %5 = affine.load %arg2[%arg6, %arg5] : memref - %6 = divf %5, %4 : f64 - affine.store %6, %arg4[%arg6, %arg5] : memref - } - affine.for %arg6 = #map(%arg5) to %2 { - affine.store %cst, %arg3[%arg5, %arg6] : memref - affine.for %arg7 = 0 to %0 { - %5 = affine.load %arg4[%arg7, %arg5] : memref - %6 = affine.load %arg2[%arg7, %arg6] : memref - %7 = mulf %5, %6 {scop.splittable = 1 : index} : f64 - %8 = affine.load %arg3[%arg5, %arg6] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg3[%arg5, %arg6] : memref - } - affine.for %arg7 = 0 to %0 { - %5 = affine.load %arg2[%arg7, %arg6] : memref - %6 = affine.load %arg4[%arg7, %arg5] : memref - %7 = affine.load %arg3[%arg5, %arg6] : memref - %8 = mulf %6, %7 {scop.splittable = 2 : index} : f64 - %9 = subf %5, %8 : f64 - affine.store %9, %arg2[%arg7, %arg6] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-0.polymer.par.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-0.polymer.par.mlir deleted file mode 100644 index 4f563a83..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-0.polymer.par.mlir +++ /dev/null @@ -1,352 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0, d1) -> (2599, d0 * 32 + 32, d1 * 32 + 31)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2000, d0 * 32 + 32)> -#map6 = affine_map<(d0) -> ((d0 - 30) ceildiv 32)> -#set = affine_set<(d0) : (-d0 + 2598 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c2600 = constant 2600 : index - %cst = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2000xf64> - %1 = memref.alloc() : memref<2000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2000x2600xf64> - %4 = memref.cast %1 : memref<2000x2600xf64> to memref - %5 = memref.cast %2 : memref<2600x2600xf64> to memref - %6 = memref.cast %3 : memref<2000x2600xf64> to memref - %7:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %14 = cmpi slt, %arg2, %c2000_i32 : i32 - scf.condition(%14) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %14 = index_cast %arg3 : i32 to index - %15 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %17 = cmpi slt, %arg4, %c2600_i32 : i32 - scf.condition(%17) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %17 = index_cast %arg4 : i32 to index - %18 = muli %arg3, %arg4 : i32 - %19 = remi_signed %18, %c2000_i32 : i32 - %20 = sitofp %19 : i32 to f64 - %21 = sitofp %c2000_i32 : i32 to f64 - %22 = divf %20, %21 : f64 - %23 = sitofp %c100_i32 : i32 to f64 - %24 = mulf %22, %23 : f64 - %25 = sitofp %c10_i32 : i32 to f64 - %26 = addf %24, %25 : f64 - memref.store %26, %1[%14, %17] : memref<2000x2600xf64> - memref.store %cst, %3[%14, %17] : memref<2000x2600xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %16 = addi %arg3, %c1_i32 : i32 - scf.yield %16 : i32 - } - %8 = index_cast %7#0 : i32 to index - %9 = scf.for %arg2 = %8 to %c2600 step %c1 iter_args(%arg3 = %7#0) -> (i32) { - %14 = index_cast %arg3 : i32 to index - scf.for %arg4 = %c0 to %c2600 step %c1 { - memref.store %cst, %2[%14, %arg4] : memref<2600x2600xf64> - } - %15 = addi %arg3, %c1_i32 : i32 - scf.yield %15 : i32 - } - call @polybench_timer_start() : () -> () - %10 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %11 = memref.alloca() : memref<1xf64> - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - affine.store %cst, %2[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } {scop.parallelizable} - affine.for %arg2 = 0 to 2600 { - affine.for %arg3 = 0 to 63 { - affine.for %arg4 = #map1(%arg3) to min #map5(%arg3) { - %17 = affine.load %1[%arg4, %arg2] : memref<2000x2600xf64> - %18 = mulf %17, %17 {scop.splittable = 0 : index} : f64 - affine.store %18, %0[%arg4] : memref<2000xf64> - } - } {scop.parallelizable} - affine.store %cst, %11[0] : memref<1xf64> - affine.for %arg3 = 0 to 2000 { - %17 = affine.load %11[0] : memref<1xf64> - %18 = affine.load %0[%arg3] : memref<2000xf64> - %19 = addf %17, %18 : f64 - affine.store %19, %11[0] : memref<1xf64> - } - %14 = affine.load %11[0] : memref<1xf64> - %15 = math.sqrt %14 : f64 - affine.store %15, %10[0] : memref<1xf64> - affine.for %arg3 = 0 to 63 { - affine.for %arg4 = #map1(%arg3) to min #map5(%arg3) { - %17 = affine.load %1[%arg4, %arg2] : memref<2000x2600xf64> - %18 = affine.load %10[0] : memref<1xf64> - %19 = divf %17, %18 : f64 - affine.store %19, %3[%arg4, %arg2] : memref<2000x2600xf64> - } - } {scop.parallelizable} - affine.if #set(%arg2) { - affine.for %arg3 = #map6(%arg2) to 82 { - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - affine.for %arg6 = max #map3(%arg3, %arg2) to min #map4(%arg3) { - %17 = affine.load %2[%arg2, %arg6] : memref<2600x2600xf64> - %18 = affine.load %3[%arg5, %arg2] : memref<2000x2600xf64> - %19 = affine.load %1[%arg5, %arg6] : memref<2000x2600xf64> - %20 = mulf %18, %19 {scop.splittable = 1 : index} : f64 - %21 = addf %17, %20 : f64 - affine.store %21, %2[%arg2, %arg6] : memref<2600x2600xf64> - } - } - } - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - affine.for %arg6 = max #map3(%arg3, %arg2) to min #map4(%arg3) { - %17 = affine.load %1[%arg5, %arg6] : memref<2000x2600xf64> - %18 = affine.load %3[%arg5, %arg2] : memref<2000x2600xf64> - %19 = affine.load %2[%arg2, %arg6] : memref<2600x2600xf64> - %20 = mulf %18, %19 {scop.splittable = 2 : index} : f64 - %21 = subf %17, %20 : f64 - affine.store %21, %1[%arg5, %arg6] : memref<2000x2600xf64> - } - } - } - } {scop.parallelizable} - } - %16 = affine.load %10[0] : memref<1xf64> - affine.store %16, %2[%arg2, %arg2] : memref<2600x2600xf64> - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %12 = cmpi sgt, %arg0, %c42_i32 : i32 - %13 = scf.if %12 -> (i1) { - %14 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %15 = llvm.load %14 : !llvm.ptr> - %16 = llvm.mlir.addressof @str0 : !llvm.ptr> - %17 = llvm.getelementptr %16[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %18 = llvm.call @strcmp(%15, %17) : (!llvm.ptr, !llvm.ptr) -> i32 - %19 = trunci %18 : i32 to i1 - %20 = xor %19, %true : i1 - scf.yield %20 : i1 - } else { - scf.yield %false : i1 - } - scf.if %13 { - call @print_array(%c2000_i32, %c2600_i32, %4, %5, %6) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %1 : memref<2000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref<1xf64>) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[0] : memref<1xf64> - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %1 = mulf %0, %0 {scop.splittable = 0 : index} : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref<1xf64>, %arg1: memref, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[0] : memref<1xf64> - %1 = affine.load %arg1[symbol(%arg2)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[0] : memref<1xf64> - return - } - func private @S3(%arg0: memref<1xf64>, %arg1: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg1[0] : memref<1xf64> - %1 = math.sqrt %0 : f64 - affine.store %1, %arg0[0] : memref<1xf64> - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg2[0] : memref<1xf64> - affine.store %0, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref<1xf64>, %arg4: memref) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[0] : memref<1xf64> - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = subf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-0.polymer.seq.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-0.polymer.seq.mlir deleted file mode 100644 index b75eb2ca..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-0.polymer.seq.mlir +++ /dev/null @@ -1,352 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0, d1) -> (2599, d0 * 32 + 32, d1 * 32 + 31)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2000, d0 * 32 + 32)> -#map6 = affine_map<(d0) -> ((d0 - 30) ceildiv 32)> -#set = affine_set<(d0) : (-d0 + 2598 >= 0)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c2600 = constant 2600 : index - %cst = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2000xf64> - %1 = memref.alloc() : memref<2000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2000x2600xf64> - %4 = memref.cast %1 : memref<2000x2600xf64> to memref - %5 = memref.cast %2 : memref<2600x2600xf64> to memref - %6 = memref.cast %3 : memref<2000x2600xf64> to memref - %7:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %14 = cmpi slt, %arg2, %c2000_i32 : i32 - scf.condition(%14) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %14 = index_cast %arg3 : i32 to index - %15 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %17 = cmpi slt, %arg4, %c2600_i32 : i32 - scf.condition(%17) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %17 = index_cast %arg4 : i32 to index - %18 = muli %arg3, %arg4 : i32 - %19 = remi_signed %18, %c2000_i32 : i32 - %20 = sitofp %19 : i32 to f64 - %21 = sitofp %c2000_i32 : i32 to f64 - %22 = divf %20, %21 : f64 - %23 = sitofp %c100_i32 : i32 to f64 - %24 = mulf %22, %23 : f64 - %25 = sitofp %c10_i32 : i32 to f64 - %26 = addf %24, %25 : f64 - memref.store %26, %1[%14, %17] : memref<2000x2600xf64> - memref.store %cst, %3[%14, %17] : memref<2000x2600xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %16 = addi %arg3, %c1_i32 : i32 - scf.yield %16 : i32 - } - %8 = index_cast %7#0 : i32 to index - %9 = scf.for %arg2 = %8 to %c2600 step %c1 iter_args(%arg3 = %7#0) -> (i32) { - %14 = index_cast %arg3 : i32 to index - scf.for %arg4 = %c0 to %c2600 step %c1 { - memref.store %cst, %2[%14, %arg4] : memref<2600x2600xf64> - } - %15 = addi %arg3, %c1_i32 : i32 - scf.yield %15 : i32 - } - call @polybench_timer_start() : () -> () - %10 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %11 = memref.alloca() : memref<1xf64> - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - affine.store %cst, %2[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 2600 { - affine.for %arg3 = 0 to 63 { - affine.for %arg4 = #map1(%arg3) to min #map5(%arg3) { - %17 = affine.load %1[%arg4, %arg2] : memref<2000x2600xf64> - %18 = mulf %17, %17 {scop.splittable = 0 : index} : f64 - affine.store %18, %0[%arg4] : memref<2000xf64> - } - } - affine.store %cst, %11[0] : memref<1xf64> - affine.for %arg3 = 0 to 2000 { - %17 = affine.load %11[0] : memref<1xf64> - %18 = affine.load %0[%arg3] : memref<2000xf64> - %19 = addf %17, %18 : f64 - affine.store %19, %11[0] : memref<1xf64> - } - %14 = affine.load %11[0] : memref<1xf64> - %15 = math.sqrt %14 : f64 - affine.store %15, %10[0] : memref<1xf64> - affine.for %arg3 = 0 to 63 { - affine.for %arg4 = #map1(%arg3) to min #map5(%arg3) { - %17 = affine.load %1[%arg4, %arg2] : memref<2000x2600xf64> - %18 = affine.load %10[0] : memref<1xf64> - %19 = divf %17, %18 : f64 - affine.store %19, %3[%arg4, %arg2] : memref<2000x2600xf64> - } - } - affine.if #set(%arg2) { - affine.for %arg3 = #map6(%arg2) to 82 { - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - affine.for %arg6 = max #map3(%arg3, %arg2) to min #map4(%arg3) { - %17 = affine.load %2[%arg2, %arg6] : memref<2600x2600xf64> - %18 = affine.load %3[%arg5, %arg2] : memref<2000x2600xf64> - %19 = affine.load %1[%arg5, %arg6] : memref<2000x2600xf64> - %20 = mulf %18, %19 {scop.splittable = 1 : index} : f64 - %21 = addf %17, %20 : f64 - affine.store %21, %2[%arg2, %arg6] : memref<2600x2600xf64> - } - } - } - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - affine.for %arg6 = max #map3(%arg3, %arg2) to min #map4(%arg3) { - %17 = affine.load %1[%arg5, %arg6] : memref<2000x2600xf64> - %18 = affine.load %3[%arg5, %arg2] : memref<2000x2600xf64> - %19 = affine.load %2[%arg2, %arg6] : memref<2600x2600xf64> - %20 = mulf %18, %19 {scop.splittable = 2 : index} : f64 - %21 = subf %17, %20 : f64 - affine.store %21, %1[%arg5, %arg6] : memref<2000x2600xf64> - } - } - } - } - } - %16 = affine.load %10[0] : memref<1xf64> - affine.store %16, %2[%arg2, %arg2] : memref<2600x2600xf64> - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %12 = cmpi sgt, %arg0, %c42_i32 : i32 - %13 = scf.if %12 -> (i1) { - %14 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %15 = llvm.load %14 : !llvm.ptr> - %16 = llvm.mlir.addressof @str0 : !llvm.ptr> - %17 = llvm.getelementptr %16[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %18 = llvm.call @strcmp(%15, %17) : (!llvm.ptr, !llvm.ptr) -> i32 - %19 = trunci %18 : i32 to i1 - %20 = xor %19, %true : i1 - scf.yield %20 : i1 - } else { - scf.yield %false : i1 - } - scf.if %13 { - call @print_array(%c2000_i32, %c2600_i32, %4, %5, %6) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %1 : memref<2000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref<1xf64>) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[0] : memref<1xf64> - return - } - func private @S1(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %1 = mulf %0, %0 {scop.splittable = 0 : index} : f64 - affine.store %1, %arg0[symbol(%arg1)] : memref - return - } - func private @S2(%arg0: memref<1xf64>, %arg1: memref, %arg2: index) attributes {scop.stmt} { - %0 = affine.load %arg0[0] : memref<1xf64> - %1 = affine.load %arg1[symbol(%arg2)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[0] : memref<1xf64> - return - } - func private @S3(%arg0: memref<1xf64>, %arg1: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg1[0] : memref<1xf64> - %1 = math.sqrt %0 : f64 - affine.store %1, %arg0[0] : memref<1xf64> - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg2[0] : memref<1xf64> - affine.store %0, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref<1xf64>, %arg4: memref) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[0] : memref<1xf64> - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg4), symbol(%arg1)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 1 : index} : f64 - %4 = addf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = subf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-1.polymer.seq.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-1.polymer.seq.mlir deleted file mode 100644 index d82df570..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-1.polymer.seq.mlir +++ /dev/null @@ -1,343 +0,0 @@ -#map0 = affine_map<(d0) -> (d0)> -#map1 = affine_map<(d0) -> (d0 * 32)> -#map2 = affine_map<(d0, d1) -> (2599, d0 * 32 + 32, d1 * 32 + 31)> -#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> -#map4 = affine_map<(d0) -> (2600, d0 * 32 + 32)> -#map5 = affine_map<(d0) -> (2000, d0 * 32 + 32)> -#map6 = affine_map<(d0) -> (d0 + 1)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %c2600 = constant 2600 : index - %cst = constant 0.000000e+00 : f64 - %0 = memref.alloca() : memref<2000xf64> - %1 = memref.alloc() : memref<2000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2000x2600xf64> - %4 = memref.cast %1 : memref<2000x2600xf64> to memref - %5 = memref.cast %2 : memref<2600x2600xf64> to memref - %6 = memref.cast %3 : memref<2000x2600xf64> to memref - %7:2 = scf.while (%arg2 = %c0_i32) : (i32) -> (i32, i32) { - %14 = cmpi slt, %arg2, %c2000_i32 : i32 - scf.condition(%14) %c0_i32, %arg2 : i32, i32 - } do { - ^bb0(%arg2: i32, %arg3: i32): // no predecessors - %14 = index_cast %arg3 : i32 to index - %15 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %17 = cmpi slt, %arg4, %c2600_i32 : i32 - scf.condition(%17) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %17 = index_cast %arg4 : i32 to index - %18 = muli %arg3, %arg4 : i32 - %19 = remi_signed %18, %c2000_i32 : i32 - %20 = sitofp %19 : i32 to f64 - %21 = sitofp %c2000_i32 : i32 to f64 - %22 = divf %20, %21 : f64 - %23 = sitofp %c100_i32 : i32 to f64 - %24 = mulf %22, %23 : f64 - %25 = sitofp %c10_i32 : i32 to f64 - %26 = addf %24, %25 : f64 - memref.store %26, %1[%14, %17] : memref<2000x2600xf64> - memref.store %cst, %3[%14, %17] : memref<2000x2600xf64> - %27 = addi %arg4, %c1_i32 : i32 - scf.yield %27 : i32 - } - %16 = addi %arg3, %c1_i32 : i32 - scf.yield %16 : i32 - } - %8 = index_cast %7#0 : i32 to index - %9 = scf.for %arg2 = %8 to %c2600 step %c1 iter_args(%arg3 = %7#0) -> (i32) { - %14 = index_cast %arg3 : i32 to index - scf.for %arg4 = %c0 to %c2600 step %c1 { - memref.store %cst, %2[%14, %arg4] : memref<2600x2600xf64> - } - %15 = addi %arg3, %c1_i32 : i32 - scf.yield %15 : i32 - } - call @polybench_timer_start() : () -> () - %10 = memref.alloca() {scop.scratchpad} : memref<1xf64> - %11 = memref.alloca() : memref<1xf64> - affine.for %arg2 = 0 to 82 { - affine.for %arg3 = #map0(%arg2) to 82 { - affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { - affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { - affine.store %cst, %2[%arg4, %arg5] : memref<2600x2600xf64> - } - } - } - } - affine.for %arg2 = 0 to 2600 { - affine.store %cst, %11[0] : memref<1xf64> - affine.for %arg3 = 0 to 2000 { - %17 = affine.load %11[0] : memref<1xf64> - %18 = affine.load %1[%arg3, %arg2] : memref<2000x2600xf64> - %19 = mulf %18, %18 {scop.splittable = 0 : index} : f64 - %20 = addf %17, %19 : f64 - affine.store %20, %11[0] : memref<1xf64> - } - %14 = affine.load %11[0] : memref<1xf64> - %15 = math.sqrt %14 : f64 - affine.store %15, %10[0] : memref<1xf64> - affine.for %arg3 = 0 to 63 { - affine.for %arg4 = #map1(%arg3) to min #map5(%arg3) { - %17 = affine.load %1[%arg4, %arg2] : memref<2000x2600xf64> - %18 = affine.load %10[0] : memref<1xf64> - %19 = divf %17, %18 : f64 - affine.store %19, %3[%arg4, %arg2] : memref<2000x2600xf64> - } - } - affine.for %arg3 = #map6(%arg2) to 2600 { - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - %17 = affine.load %3[%arg5, %arg2] : memref<2000x2600xf64> - %18 = affine.load %1[%arg5, %arg3] : memref<2000x2600xf64> - %19 = mulf %17, %18 {scop.splittable = 1 : index} : f64 - affine.store %19, %0[%arg5] : memref<2000xf64> - } - } - affine.for %arg4 = 0 to 2000 { - %17 = affine.load %2[%arg2, %arg3] : memref<2600x2600xf64> - %18 = affine.load %0[%arg4] : memref<2000xf64> - %19 = addf %17, %18 : f64 - affine.store %19, %2[%arg2, %arg3] : memref<2600x2600xf64> - } - affine.for %arg4 = 0 to 63 { - affine.for %arg5 = #map1(%arg4) to min #map5(%arg4) { - %17 = affine.load %1[%arg5, %arg3] : memref<2000x2600xf64> - %18 = affine.load %3[%arg5, %arg2] : memref<2000x2600xf64> - %19 = affine.load %2[%arg2, %arg3] : memref<2600x2600xf64> - %20 = mulf %18, %19 {scop.splittable = 2 : index} : f64 - %21 = subf %17, %20 : f64 - affine.store %21, %1[%arg5, %arg3] : memref<2000x2600xf64> - } - } - } - %16 = affine.load %10[0] : memref<1xf64> - affine.store %16, %2[%arg2, %arg2] : memref<2600x2600xf64> - } - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %12 = cmpi sgt, %arg0, %c42_i32 : i32 - %13 = scf.if %12 -> (i1) { - %14 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %15 = llvm.load %14 : !llvm.ptr> - %16 = llvm.mlir.addressof @str0 : !llvm.ptr> - %17 = llvm.getelementptr %16[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %18 = llvm.call @strcmp(%15, %17) : (!llvm.ptr, !llvm.ptr) -> i32 - %19 = trunci %18 : i32 to i1 - %20 = xor %19, %true : i1 - scf.yield %20 : i1 - } else { - scf.yield %false : i1 - } - scf.if %13 { - call @print_array(%c2000_i32, %c2600_i32, %4, %5, %6) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %1 : memref<2000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @polybench_timer_start() - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @S0(%arg0: memref<1xf64>) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[0] : memref<1xf64> - return - } - func private @S1(%arg0: memref<1xf64>, %arg1: memref, %arg2: index, %arg3: index) attributes {scop.stmt} { - %0 = affine.load %arg0[0] : memref<1xf64> - %1 = affine.load %arg1[symbol(%arg2), symbol(%arg3)] : memref - %2 = mulf %1, %1 {scop.splittable = 0 : index} : f64 - %3 = addf %0, %2 : f64 - affine.store %3, %arg0[0] : memref<1xf64> - return - } - func private @S2(%arg0: memref<1xf64>, %arg1: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg1[0] : memref<1xf64> - %1 = math.sqrt %0 : f64 - affine.store %1, %arg0[0] : memref<1xf64> - return - } - func private @S3(%arg0: memref, %arg1: index, %arg2: memref<1xf64>) attributes {scop.stmt} { - %0 = affine.load %arg2[0] : memref<1xf64> - affine.store %0, %arg0[symbol(%arg1), symbol(%arg1)] : memref - return - } - func private @S4(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref<1xf64>, %arg4: memref) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[0] : memref<1xf64> - %2 = divf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S5(%arg0: memref, %arg1: index, %arg2: index) attributes {scop.stmt} { - %cst = constant 0.000000e+00 : f64 - affine.store %cst, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S6(%arg0: memref, %arg1: index, %arg2: memref, %arg3: index, %arg4: memref, %arg5: index) attributes {scop.stmt} { - %0 = affine.load %arg4[symbol(%arg1), symbol(%arg5)] : memref - %1 = affine.load %arg2[symbol(%arg1), symbol(%arg3)] : memref - %2 = mulf %0, %1 {scop.splittable = 1 : index} : f64 - affine.store %2, %arg0[symbol(%arg1)] : memref - return - } - func private @S7(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg3[symbol(%arg4)] : memref - %2 = addf %0, %1 : f64 - affine.store %2, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @S8(%arg0: memref, %arg1: index, %arg2: index, %arg3: memref, %arg4: index, %arg5: memref) attributes {scop.stmt} { - %0 = affine.load %arg0[symbol(%arg1), symbol(%arg2)] : memref - %1 = affine.load %arg5[symbol(%arg1), symbol(%arg4)] : memref - %2 = affine.load %arg3[symbol(%arg4), symbol(%arg2)] : memref - %3 = mulf %1, %2 {scop.splittable = 2 : index} : f64 - %4 = subf %0, %3 : f64 - affine.store %4, %arg0[symbol(%arg1), symbol(%arg2)] : memref - return - } - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-split-1.polymer.seq.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split-split-1.polymer.seq.mlir deleted file mode 100644 index e69de29b..00000000 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split.pluto.cloog b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split.pluto.cloog deleted file mode 100644 index d36878ed..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split.pluto.cloog +++ /dev/null @@ -1,225 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_N _PB_M - -# Number of statements -8 - -# S1 (nrm = SCALAR_VAL(0.0);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S2 (nrm += A[i][k] * A[i][k];) -7 6 -1 1 0 0 0 0 -1 -1 0 1 0 -1 -1 0 0 1 0 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -1 0 0 0 1 -1 -0 0 0 0 0 0 -0 0 0 - -# S3 (R[k][k] = SQRT_FUN(nrm);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S4 (Q[i][k] = A[i][k] / R[k][k];) -9 7 -1 0 1 0 0 0 0 -1 0 -1 0 1 0 -1 -1 0 0 0 1 0 -1 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 -1 32 0 -1 0 0 31 -0 0 0 - -# S5 (R[k][j] = SCALAR_VAL(0.0);) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -1 0 0 -1 0 1 0 -2 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S6 (S[i] = Q[i][k] * A[i][j];) -11 8 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 -1 1 0 0 0 -1 -1 0 0 -1 0 1 0 -1 -1 0 -1 0 0 1 0 -2 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 -1 32 0 0 -1 0 0 31 -0 0 0 - -# S7 (R[k][j] += S[i];) -9 7 -1 1 0 0 0 0 0 -1 -1 0 0 1 0 -1 -1 0 0 0 1 0 -1 -1 -1 1 0 0 0 -1 -1 0 -1 0 1 0 -1 -1 -1 0 0 1 0 -2 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 - -# S8 (A[i][j] = A[i][j] - Q[i][k] * R[k][j];) -11 8 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 -1 1 0 0 0 -1 -1 0 0 -1 0 1 0 -1 -1 0 -1 0 0 1 0 -2 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 -1 32 0 0 -1 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -8 - -# T(S1) -10 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S2) -10 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S3) -10 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S4) -10 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S5) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S6) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S7) -10 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S8) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -10 -t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split.pluto.log b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split.pluto.log deleted file mode 100644 index 82661fd7..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split.pluto.log +++ /dev/null @@ -1,3565 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_N _PB_M - - -# Number of statements -8 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -nrm = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -READ -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -WRITE -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -nrm += A[i][k] * A[i][k]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 3.3 Access -WRITE -3 8 3 1 0 2 -# e/i| Arr [1] [2]| k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 ## [2] == k - -READ -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -R[k][k] = SQRT_FUN(nrm); - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 3 ## c3 == 3 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -Q[i][k] = A[i][k] / R[k][k]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 1 0 -2 ## -k+_PB_N-2 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k j -# Statement body expression -R[k][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 6.3 Access -WRITE -2 9 2 3 0 2 -# e/i| Arr [1]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == S - 0 0 -1 0 0 1 0 0 0 ## [1] == i - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -S[i] = Q[i][k] * A[i][j]; - - -# =============================================== Statement 7 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 7.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -2 9 2 3 0 2 -# e/i| Arr [1]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == S - 0 0 -1 0 0 1 0 0 0 ## [1] == i - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -R[k][j] += S[i]; - - -# =============================================== Statement 8 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 8.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 8.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c5 == 2 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 8.3 Access -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 8.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -A[i][j] = A[i][j] - Q[i][k] * R[k][j]; - - -# =============================================== Extensions - -b0 k b1 j b2 i b3 - - - -# Number of arrays -12 -# Mapping array-identifiers/array-names -1 k -2 _PB_N -3 nrm -4 SCALAR_VAL -5 i -6 _PB_M -7 A -8 R -9 SQRT_FUN -10 Q -11 j -12 S - - - -# File name -(null) -# Starting line and column -100 0 -# Ending line and column -121 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_N _PB_M -S1 "nrm = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -nrm[0] -Original loop: 0 -> yes - -S2 "nrm += A[i][k] * A[i][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -nrm[0] -A[i][k] -A[i][k] -Write accesses -nrm[0] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "R[k][k] = SQRT_FUN(nrm);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -nrm[0] -Write accesses -R[k][k] -Original loop: 0 -> yes - -S4 "Q[i][k] = A[i][k] / R[k][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S4): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -A[i][k] -R[k][k] -Write accesses -Q[i][k] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "R[k][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 - -T(S5): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "S[i] = Q[i][k] * A[i][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S6): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -Q[i][k] -A[i][j] -Write accesses -S[i] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S7 "R[k][j] += S[i];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S7): (0, k, 4, j, 1, i, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -R[k][j] -S[i] -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S8 "A[i][j] = A[i][j] - Q[i][k] * R[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S8): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -A[i][j] -Q[i][k] -R[k][j] -Write accesses -A[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 2 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 3 from S8 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 4 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 5 from S8 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 6 from S8 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 7 from S4 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 8 from S7 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 9 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 11 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 12 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 13 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 14 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 15 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 16 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 18 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 19 from S8 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 20 from S8 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 21 from S7 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 22 from S7 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 23 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 24 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 25 from S2 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 26 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 27 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 28 from S7 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 29 from S8 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 30 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 31 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 32 from S2 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 33 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 34 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 35 from S5 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 36 from S7 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 37 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 38 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 39 from S8 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 40 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 41 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S7): (0, k, 4, j, 1, i, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S8): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 8 -[pluto] Total number of loops: 17 -[pluto] Number of deps: 41 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 1 2 3 5 6 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 7: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[2 dims; 3 constraints] -c_j-1 >= 0 -c_i-2 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 0, h(S6) = 1, h(S7) = 1, h(S8) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 1; num_constraints: 12 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 2; num_constraints: 18 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 3; num_constraints: 12 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 4; num_constraints: 15 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 5; num_constraints: 12 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 6; num_constraints: 12 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 7; num_constraints: 12 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 8; num_constraints: 5 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 9; num_constraints: 18 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 8 constraints - For dep 10; num_constraints: 14 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 9 constraints - For dep 11; num_constraints: 20 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 12; num_constraints: 12 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 13; num_constraints: 10 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 14; num_constraints: 13 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 15; num_constraints: 9 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 16; num_constraints: 18 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 17; num_constraints: 12 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 18; num_constraints: 12 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 19; num_constraints: 5 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 20; num_constraints: 12 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 9 constraints - For dep 21; num_constraints: 20 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 22; num_constraints: 12 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 23; num_constraints: 13 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 24; num_constraints: 9 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 25; num_constraints: 16 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 26; num_constraints: 16 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 27; num_constraints: 16 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 28; num_constraints: 5 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 29; num_constraints: 5 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 30; num_constraints: 12 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 31; num_constraints: 10 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 32; num_constraints: 16 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 33; num_constraints: 13 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 34; num_constraints: 9 -[pluto] compute permutability constraints: Dep 35 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 35; num_constraints: 12 -[pluto] compute permutability constraints: Dep 36 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 36; num_constraints: 5 -[pluto] compute permutability constraints: Dep 37 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 37; num_constraints: 18 -[pluto] compute permutability constraints: Dep 38 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_o) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints - For dep 38; num_constraints: 13 -[pluto] compute permutability constraints: Dep 39 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 39; num_constraints: 5 -[pluto] compute permutability constraints: Dep 40 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_p) from 8 constraints - For dep 40; num_constraints: 12 -[pluto] compute permutability constraints: Dep 41 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 41; num_constraints: 5 - After dep 2; num_constraints: 18 - After dep 3; num_constraints: 30 - After dep 4; num_constraints: 45 - After dep 5; num_constraints: 57 - After dep 6; num_constraints: 69 - After dep 7; num_constraints: 81 - After dep 8; num_constraints: 86 - After dep 9; num_constraints: 104 - After dep 10; num_constraints: 118 - After dep 11; num_constraints: 138 - After dep 12; num_constraints: 150 - After dep 13; num_constraints: 160 - After dep 14; num_constraints: 173 - After dep 15; num_constraints: 182 - After dep 16; num_constraints: 200 - After dep 18; num_constraints: 212 - After dep 19; num_constraints: 217 - After dep 20; num_constraints: 229 - After dep 21; num_constraints: 249 - After dep 22; num_constraints: 261 - After dep 23; num_constraints: 274 - After dep 24; num_constraints: 283 - After dep 25; num_constraints: 299 - After dep 26; num_constraints: 315 - After dep 27; num_constraints: 331 - After dep 28; num_constraints: 336 - After dep 29; num_constraints: 341 - After dep 30; num_constraints: 353 - After dep 31; num_constraints: 363 - After dep 32; num_constraints: 379 - After dep 33; num_constraints: 392 - After dep 34; num_constraints: 401 - After dep 36; num_constraints: 406 - After dep 37; num_constraints: 424 - After dep 38; num_constraints: 437 - After dep 39; num_constraints: 442 - After dep 40; num_constraints: 454 - After dep 41; num_constraints: 459 - After all dependences: num constraints: 171, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_l >= 0 - -Set #1 -[35 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_p >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_p-c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_t >= 0 - -Set #1 -[35 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_x >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] -c_x-c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_| >= 0 - -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_€-c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_„-c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_ˆ-c_‰-c_Š-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 8 constraints] - +c_l -1 >= 0 - +c_p -c_q -1 >= 0 - +c_t -1 >= 0 - +c_x -c_y -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ -c_ -c_‚ -1 >= 0 - +c_„ -c_… -c_† -1 >= 0 - +c_ˆ -c_‰ -c_Š -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 222 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 222 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = k, h(S2) = k, h(S3) = k, h(S4) = k, h(S5) = k, h(S6) = k, h(S7) = k, h(S8) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‰-c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - -c_q -1 >= 0 - -c_y -1 >= 0 - +c_} -1 >= 0 - -c_ -c_‚ -1 >= 0 - -c_… -c_† -1 >= 0 - -c_‰ -c_Š -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 218 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 218 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (0, k) -loop types (scalar, loop) - -T(S6): (1, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -T(S8): (1, k) -loop types (scalar, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 1 - After dep 2; num_constraints: 18 - After dep 4; num_constraints: 33 - After dep 7; num_constraints: 45 - After dep 8; num_constraints: 50 - After dep 9; num_constraints: 68 - After dep 10; num_constraints: 82 - After dep 12; num_constraints: 94 - After dep 13; num_constraints: 104 - After dep 15; num_constraints: 113 - After dep 16; num_constraints: 131 - After dep 18; num_constraints: 143 - After dep 22; num_constraints: 155 - After dep 24; num_constraints: 164 - After dep 28; num_constraints: 169 - After dep 31; num_constraints: 179 - After dep 34; num_constraints: 188 - After dep 36; num_constraints: 193 - After dep 37; num_constraints: 211 - After dep 41; num_constraints: 216 - After all dependences: num constraints: 96, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰+c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - -c_q -1 >= 0 - -c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… -c_† -1 >= 0 - +c_‰ +c_Š -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 143 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 143 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (0, k) -loop types (scalar, loop) - -T(S6): (1, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -T(S8): (1, k) -loop types (scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 5 6 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 1 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 1 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 2: max stmt dim: 3 - SCC 6: size: 1: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 7 dep(s) satisfied -h(S1) = 1, h(S2) = 2, h(S3) = 3, h(S4) = 4, h(S5) = 0, h(S6) = 5, h(S7) = 5, h(S8) = 5 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 2 - After dep 8; num_constraints: 5 - After dep 10; num_constraints: 19 - After dep 12; num_constraints: 31 - After dep 13; num_constraints: 41 - After dep 15; num_constraints: 50 - After dep 22; num_constraints: 62 - After dep 24; num_constraints: 71 - After dep 28; num_constraints: 76 - After dep 31; num_constraints: 86 - After dep 34; num_constraints: 95 - After dep 36; num_constraints: 100 - After dep 41; num_constraints: 105 - After all dependences: num constraints: 51, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_y >= 0 - -Set #1 -[35 dims; 1 constraints] -c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰+c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - +c_q -1 >= 0 - +c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… -c_† -1 >= 0 - +c_‰ +c_Š -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 98 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 98 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = 0, h(S4) = i, h(S5) = j, h(S6) = j, h(S7) = j, h(S8) = j -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - -c_‚ -1 >= 0 - -c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 92 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 92 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S5): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S6): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 3 - After dep 8; num_constraints: 5 - After dep 10; num_constraints: 19 - After dep 13; num_constraints: 29 - After dep 28; num_constraints: 34 - After dep 31; num_constraints: 44 - After dep 36; num_constraints: 49 - After all dependences: num constraints: 33, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - -c_‚ -1 >= 0 - -c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 74 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 74 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S5): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S6): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 1 - SCC 6: size: 1: max stmt dim: 2 - SCC 7: size: 1: max stmt dim: 1 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 0 and id 2 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 0, h(S8) = 1 -[pluto] updating DDG -[pluto] Cutting between SCC id 0 and id 1 -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 13 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 1, h(S8) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 4 - After dep 8; num_constraints: 5 - After dep 28; num_constraints: 10 - After dep 36; num_constraints: 15 - After all dependences: num constraints: 5, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - +c_‚ -1 >= 0 - +c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 5) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 46 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 46 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = i, h(S7) = i, h(S8) = i -[pluto] pluto_auto_transform: band level 4; 1 hyperplane(s) found -T(S1): (1, k, 1, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S5): (0, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S7): (1, k, 5, j, 0, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S8): (1, k, 5, j, 1, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 13 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (1, k, 1, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S5): (0, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S7): (1, k, 5, j, 0, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S8): (1, k, 5, j, 1, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -[pluto_tile] Outermost tilable bands -(t2, t3, t4, ) with stmts {S5, } -[pluto_tile] Innermost tilable bands -(t2, t3, t4, ) with stmts {S5, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 13 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 9) - 0 dep(s) satisfied -[Pluto] After tiling: -T(S1): (1, k, 1, 0, 1, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0, 0, 0, 0) -loop types (t7 {loop with stmts: S5, } -t5 {loop with stmts: S5, } -t5 {loop with stmts: S4, } -t8 {loop with stmts: S6, } -t8 {loop with stmts: S8, } -scalar, loop, scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i/32, i, 1, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S5): (0, k/32, 0, j/32, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i/32, i, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, loop, scalar, scalar) - -T(S7): (1, k, 5, j, 0, 1, i, 0, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, scalar, scalar, scalar) - -T(S8): (1, k, 5, j, 1, 1, i/32, i, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, loop, scalar, scalar) - -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: -28 -Getting loop at depth 7 -[pluto-intra-tile-opt] Score for loop 0: -30 -Getting loop at depth 7 -[pluto-intra-tile-opt] Score for loop 0: -44 -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(2,10), S2(2,10), S3(2,10), S4(5,10), S5(5,10), S6(8,10), S7(2,10), S8(8,10), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to gramschmidt.split.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.001888s -[pluto] Auto-transformation time: 0.096006s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.007947s -[pluto] Code generation time: 0.022914s -[pluto] Other/Misc time: 0.106211s -[pluto] Total time: 0.227019s -[pluto] All times: 0.001888 0.096006 0.022914 0.106211 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.c deleted file mode 100644 index c90a30bb..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.c +++ /dev/null @@ -1,219 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n), - DATA_TYPE POLYBENCH_1D(S,M,m)) -{ - int i, j, k; - - DATA_TYPE nrm; - -#pragma scop - for (k = 0; k < _PB_N; k++) - { - nrm = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) { - S[i] = A[i][k] * A[i][k]; - nrm += S[i]; - } - R[k][k] = SQRT_FUN(nrm); - for (i = 0; i < _PB_M; i++) - Q[i][k] = A[i][k] / R[k][k]; - for (j = k + 1; j < _PB_N; j++) - { - R[k][j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) { - R[k][j] += Q[i][k] * A[i][j]; - } - for (i = 0; i < _PB_M; i++) { - A[i][j] = A[i][j] - Q[i][k] * R[k][j]; - } - } - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,M,m); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.c deleted file mode 100644 index e7603b5f..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.c +++ /dev/null @@ -1,250 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n), - DATA_TYPE POLYBENCH_1D(S,M,m)) -{ - int i, j, k; - - DATA_TYPE nrm; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9; - register int lbv, ubv; -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_N-2,32);t2++) { - for (t4=t2;t4<=floord(_PB_N-1,32);t4++) { - for (t5=32*t2;t5<=min(min(_PB_N-2,32*t2+31),32*t4+30);t5++) { - for (t7=max(32*t4,t5+1);t7<=min(_PB_N-1,32*t4+31);t7++) { - R[t5][t7] = SCALAR_VAL(0.0);; - } - } - } - } - for (t2=0;t2<=_PB_N-1;t2++) { - for (t4=0;t4<=floord(_PB_M-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_M-1,32*t4+31);t5++) { - S[t5] = A[t5][t2] * A[t5][t2];; - } - } - nrm = SCALAR_VAL(0.0);; - for (t4=0;t4<=_PB_M-1;t4++) { - nrm += S[t4];; - } - R[t2][t2] = SQRT_FUN(nrm);; - for (t4=0;t4<=floord(_PB_M-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_M-1,32*t4+31);t5++) { - Q[t5][t2] = A[t5][t2] / R[t2][t2];; - } - } - if ((_PB_M >= 1) && (t2 <= _PB_N-2)) { - for (t4=ceild(t2-30,32);t4<=floord(_PB_N-1,32);t4++) { - for (t6=0;t6<=floord(_PB_M-1,32);t6++) { - for (t8=32*t6;t8<=min(_PB_M-1,32*t6+31);t8++) { - for (t9=max(32*t4,t2+1);t9<=min(_PB_N-1,32*t4+31);t9++) { - R[t2][t9] += Q[t8][t2] * A[t8][t9];; - } - } - } - for (t6=0;t6<=floord(_PB_M-1,32);t6++) { - for (t8=32*t6;t8<=min(_PB_M-1,32*t6+31);t8++) { - for (t9=max(32*t4,t2+1);t9<=min(_PB_N-1,32*t4+31);t9++) { - A[t8][t9] = A[t8][t9] - Q[t8][t2] * R[t2][t9];; - } - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,M,m); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.cloog b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.cloog deleted file mode 100644 index 0c7d87c1..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.cloog +++ /dev/null @@ -1,221 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_N _PB_M - -# Number of statements -8 - -# S1 (nrm = SCALAR_VAL(0.0);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S2 (S[i] = A[i][k] * A[i][k];) -9 7 -1 0 1 0 0 0 0 -1 0 -1 0 1 0 -1 -1 0 0 0 1 0 -1 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 -1 32 0 -1 0 0 31 -0 0 0 - -# S3 (nrm += S[i];) -7 6 -1 1 0 0 0 0 -1 -1 0 1 0 -1 -1 0 0 1 0 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -1 0 0 0 1 -1 -0 0 0 0 0 0 -0 0 0 - -# S4 (R[k][k] = SQRT_FUN(nrm);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S5 (Q[i][k] = A[i][k] / R[k][k];) -9 7 -1 0 1 0 0 0 0 -1 0 -1 0 1 0 -1 -1 0 0 0 1 0 -1 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 -1 32 0 -1 0 0 31 -0 0 0 - -# S6 (R[k][j] = SCALAR_VAL(0.0);) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -1 0 0 -1 0 1 0 -2 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S7 (R[k][j] += Q[i][k] * A[i][j];) -13 9 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 -1 0 0 0 -1 0 1 0 -1 -1 0 0 -1 0 0 1 0 -2 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 0 -1 32 0 0 -1 0 0 0 31 -1 0 -32 0 0 1 0 0 0 -1 0 32 0 0 -1 0 0 31 -0 0 0 - -# S8 (A[i][j] = A[i][j] - Q[i][k] * R[k][j];) -13 9 -1 0 0 1 0 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 -1 0 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 0 -1 -1 0 0 0 -1 0 1 0 -1 -1 0 0 -1 0 0 1 0 -2 -1 0 0 0 0 1 0 0 0 -1 0 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 0 -1 32 0 0 -1 0 0 0 31 -1 0 -32 0 0 1 0 0 0 -1 0 32 0 0 -1 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -8 - -# T(S1) -9 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S2) -9 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S3) -9 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S4) -9 14 -0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 -3 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S5) -9 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S6) -9 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S7) -9 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - -# T(S8) -9 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 - -# we will set the scattering dimension names -9 -t1 t2 t3 t4 t5 t6 t7 t8 t9 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.log b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.log deleted file mode 100644 index f1f67f1b..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split1.pluto.log +++ /dev/null @@ -1,3419 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_N _PB_M - - -# Number of statements -8 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -nrm = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -WRITE -2 8 2 2 0 2 -# e/i| Arr [1]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 7 ## Arr == S - 0 0 -1 0 1 0 0 0 ## [1] == i - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -S[i] = A[i][k] * A[i][k]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 1 ## c5 == 1 - -# ---------------------------------------------- 3.3 Access -READ -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -WRITE -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -READ -2 8 2 2 0 2 -# e/i| Arr [1]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 7 ## Arr == S - 0 0 -1 0 1 0 0 0 ## [1] == i - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -nrm += S[i]; - - -# =============================================== Statement 4 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 4.3 Access -WRITE -3 8 3 1 0 2 -# e/i| Arr [1] [2]| k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 9 ## Arr == R - 0 0 -1 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 ## [2] == k - -READ -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -R[k][k] = SQRT_FUN(nrm); - - -# =============================================== Statement 5 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 3 ## c3 == 3 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 11 ## Arr == Q - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -Q[i][k] = A[i][k] / R[k][k]; - - -# =============================================== Statement 6 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 1 0 -2 ## -k+_PB_N-2 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 6.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 9 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k j -# Statement body expression -R[k][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 7 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 7.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 11 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -R[k][j] += Q[i][k] * A[i][j]; - - -# =============================================== Statement 8 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 8.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 8.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c5 == 2 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 8.3 Access -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 11 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 9 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 8.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -A[i][j] = A[i][j] - Q[i][k] * R[k][j]; - - -# =============================================== Extensions - -b0 k b1 j b2 i b3 - - - -# Number of arrays -12 -# Mapping array-identifiers/array-names -1 k -2 _PB_N -3 nrm -4 SCALAR_VAL -5 i -6 _PB_M -7 S -8 A -9 R -10 SQRT_FUN -11 Q -12 j - - - -# File name -(null) -# Starting line and column -100 0 -# Ending line and column -121 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_N _PB_M -S1 "nrm = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -nrm[0] -Original loop: 0 -> yes - -S2 "S[i] = A[i][k] * A[i][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -A[i][k] -A[i][k] -Write accesses -S[i] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "nrm += S[i];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S3): (0, k, 1, i, 1, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -nrm[0] -S[i] -Write accesses -nrm[0] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S4 "R[k][k] = SQRT_FUN(nrm);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S4): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -nrm[0] -Write accesses -R[k][k] -Original loop: 0 -> yes - -S5 "Q[i][k] = A[i][k] / R[k][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S5): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -A[i][k] -R[k][k] -Write accesses -Q[i][k] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "R[k][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 - -T(S6): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S7 "R[k][j] += Q[i][k] * A[i][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S7): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -R[k][j] -Q[i][k] -A[i][j] -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S8 "A[i][j] = A[i][j] - Q[i][k] * R[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S8): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -A[i][j] -Q[i][k] -R[k][j] -Write accesses -A[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S8 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 2 from S8 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 3 from S3 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 4 from S3 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 5 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 6 from S4 to S5; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 7 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --i+i' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 8 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 9 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S6 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 11 from S7 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 12 from S8 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 13 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 14 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 15 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 16 from S8 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 17 from S1 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 18 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 19 from S8 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 20 from S4 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 21 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 22 from S7 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 23 from S3 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 24 from S3 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 25 from S7 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 26 from S7 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 27 from S8 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 28 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --i+i' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 29 from S4 to S3; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 30 from S1 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 31 from S7 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 32 from S6 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 33 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --i+i' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 34 from S3 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 35 from S3 to S3; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 36 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 37 from S8 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 38 from S3 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, k, 1, i, 1, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S4): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S5): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S7): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S8): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 8 -[pluto] Total number of loops: 16 -[pluto] Number of deps: 38 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 1 2 3 4 6 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 7: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[2 dims; 3 constraints] -c_j-1 >= 0 -c_i-2 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 3 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 1, h(S8) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 1; num_constraints: 12 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 2; num_constraints: 12 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 3; num_constraints: 13 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 4; num_constraints: 9 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 5; num_constraints: 12 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 6; num_constraints: 15 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 9 constraints - For dep 7; num_constraints: 14 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 8 constraints - For dep 8; num_constraints: 13 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 9; num_constraints: 18 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 10; num_constraints: 12 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 11; num_constraints: 5 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 12; num_constraints: 12 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 13; num_constraints: 12 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 14; num_constraints: 18 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 8 constraints - For dep 15; num_constraints: 14 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 16; num_constraints: 5 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 17; num_constraints: 18 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 18; num_constraints: 12 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 19; num_constraints: 12 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 20; num_constraints: 16 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 21; num_constraints: 16 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 22; num_constraints: 5 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 23; num_constraints: 13 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 24; num_constraints: 9 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 25; num_constraints: 12 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 26; num_constraints: 10 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 27; num_constraints: 5 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_q) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_t) from 9 constraints - For dep 28; num_constraints: 14 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 29; num_constraints: 16 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 30; num_constraints: 18 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 31; num_constraints: 5 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 32; num_constraints: 12 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 33; num_constraints: 9 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 34; num_constraints: 13 -[pluto] compute permutability constraints: Dep 35 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 35; num_constraints: 9 -[pluto] compute permutability constraints: Dep 36 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_o) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints - For dep 36; num_constraints: 13 -[pluto] compute permutability constraints: Dep 37 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 37; num_constraints: 5 -[pluto] compute permutability constraints: Dep 38 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 38; num_constraints: 16 - After dep 1; num_constraints: 12 - After dep 2; num_constraints: 24 - After dep 3; num_constraints: 37 - After dep 4; num_constraints: 46 - After dep 5; num_constraints: 58 - After dep 6; num_constraints: 73 - After dep 7; num_constraints: 87 - After dep 8; num_constraints: 100 - After dep 9; num_constraints: 118 - After dep 11; num_constraints: 123 - After dep 12; num_constraints: 135 - After dep 13; num_constraints: 147 - After dep 14; num_constraints: 165 - After dep 15; num_constraints: 179 - After dep 16; num_constraints: 184 - After dep 17; num_constraints: 202 - After dep 19; num_constraints: 214 - After dep 20; num_constraints: 230 - After dep 21; num_constraints: 246 - After dep 22; num_constraints: 251 - After dep 23; num_constraints: 264 - After dep 24; num_constraints: 273 - After dep 25; num_constraints: 285 - After dep 26; num_constraints: 295 - After dep 27; num_constraints: 300 - After dep 28; num_constraints: 314 - After dep 29; num_constraints: 330 - After dep 30; num_constraints: 348 - After dep 31; num_constraints: 353 - After dep 33; num_constraints: 362 - After dep 34; num_constraints: 375 - After dep 35; num_constraints: 384 - After dep 36; num_constraints: 397 - After dep 37; num_constraints: 402 - After dep 38; num_constraints: 418 - After all dependences: num constraints: 140, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_l >= 0 - -Set #1 -[35 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_p >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_p-c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_t >= 0 - -Set #1 -[35 dims; 1 constraints] --c_u >= 0 - -Set #1 -[35 dims; 1 constraints] -c_t-c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_x >= 0 - -Set #1 -[35 dims; 1 constraints] -c_x-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_| >= 0 - -Set #1 -[35 dims; 1 constraints] --c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_|-c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_€+c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_„+c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_ˆ+c_‰-c_Š-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 8 constraints] - +c_l -1 >= 0 - +c_p -c_q -1 >= 0 - +c_t -c_u -1 >= 0 - +c_x -1 >= 0 - +c_| -c_} -1 >= 0 - +c_€ +c_ -1 >= 0 - +c_„ +c_… -c_† -1 >= 0 - +c_ˆ +c_‰ -c_Š -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 191 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 191 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = k, h(S2) = k, h(S3) = k, h(S4) = k, h(S5) = k, h(S6) = k, h(S7) = k, h(S8) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_u >= 0 - -Set #1 -[35 dims; 1 constraints] --c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_} >= 0 - -Set #1 -[35 dims; 1 constraints] --c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰-c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - -c_q -1 >= 0 - -c_u -1 >= 0 - -c_} -1 >= 0 - +c_ -1 >= 0 - +c_… -c_† -1 >= 0 - +c_‰ -c_Š -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 187 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 187 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (1, k) -loop types (scalar, loop) - -T(S6): (0, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -T(S8): (1, k) -loop types (scalar, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied - 19 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 1 - After dep 4; num_constraints: 9 - After dep 5; num_constraints: 21 - After dep 6; num_constraints: 36 - After dep 8; num_constraints: 49 - After dep 9; num_constraints: 67 - After dep 11; num_constraints: 72 - After dep 13; num_constraints: 84 - After dep 14; num_constraints: 102 - After dep 15; num_constraints: 116 - After dep 17; num_constraints: 134 - After dep 22; num_constraints: 139 - After dep 24; num_constraints: 148 - After dep 26; num_constraints: 158 - After dep 30; num_constraints: 176 - After dep 31; num_constraints: 181 - After dep 35; num_constraints: 190 - After all dependences: num constraints: 74, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_u >= 0 - -Set #1 -[35 dims; 1 constraints] --c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_} >= 0 - -Set #1 -[35 dims; 1 constraints] --c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰+c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - -c_q -1 >= 0 - -c_u -1 >= 0 - -c_} -1 >= 0 - +c_ -1 >= 0 - +c_… -c_† -1 >= 0 - +c_‰ +c_Š -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 121 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 121 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (1, k) -loop types (scalar, loop) - -T(S6): (0, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -T(S8): (1, k) -loop types (scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 2 - SCC 2: size: 1: max stmt dim: 1 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 1 - SCC 5: size: 1: max stmt dim: 2 - SCC 6: size: 1: max stmt dim: 3 - SCC 7: size: 1: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 8 dep(s) satisfied -h(S1) = 1, h(S2) = 0, h(S3) = 2, h(S4) = 3, h(S5) = 4, h(S6) = 0, h(S7) = 5, h(S8) = 5 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 2 - After dep 4; num_constraints: 9 - After dep 11; num_constraints: 14 - After dep 15; num_constraints: 28 - After dep 22; num_constraints: 33 - After dep 24; num_constraints: 42 - After dep 26; num_constraints: 52 - After dep 31; num_constraints: 57 - After dep 35; num_constraints: 66 - After all dependences: num constraints: 20, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 3 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_u >= 0 - -Set #1 -[35 dims; 1 constraints] -c_u-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰+c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - +c_q -1 >= 0 - +c_u -1 >= 0 - +c_} -1 >= 0 - +c_ -1 >= 0 - +c_… -c_† -1 >= 0 - +c_‰ +c_Š -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 67 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 67 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = i, h(S4) = 0, h(S5) = i, h(S6) = j, h(S7) = j, h(S8) = j -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 5 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 2 constraints] - -c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 59 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 59 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 0, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S4): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S5): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S6): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 3 - After dep 11; num_constraints: 5 - After dep 15; num_constraints: 19 - After dep 22; num_constraints: 24 - After dep 26; num_constraints: 34 - After dep 31; num_constraints: 39 - After all dependences: num constraints: 17, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 5 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 2 constraints] - -c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 56 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 56 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 0, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S4): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S5): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S6): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 1 - SCC 5: size: 1: max stmt dim: 2 - SCC 6: size: 1: max stmt dim: 2 - SCC 7: size: 1: max stmt dim: 1 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 0 and id 1 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 2 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 1, h(S7) = 0, h(S8) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 4 - After dep 11; num_constraints: 5 - After dep 22; num_constraints: 10 - After dep 31; num_constraints: 15 - After all dependences: num constraints: 5, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -non-zero cst: skipping stmt 5 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 2 constraints] - +c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 5) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 44 constraints) -[pluto] pluto_constraints_lexmin_isl (27 variables, 44 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = 0, h(S7) = i, h(S8) = i -[pluto] pluto_auto_transform: band level 4; 1 hyperplane(s) found -T(S1): (1, k, 1, 0, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 0, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S3): (1, k, 2, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S4): (1, k, 3, 0, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar) - -T(S5): (1, k, 4, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S6): (0, k, 0, j, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S7): (1, k, 5, j, 0, i) -loop types (scalar, loop, scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j, 1, i) -loop types (scalar, loop, scalar, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied - 19 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 8 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (1, k, 1, 0, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 0, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S3): (1, k, 2, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S4): (1, k, 3, 0, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar) - -T(S5): (1, k, 4, i, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S6): (0, k, 0, j, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar) - -T(S7): (1, k, 5, j, 0, i) -loop types (scalar, loop, scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j, 1, i) -loop types (scalar, loop, scalar, loop, scalar, loop) - -[pluto_tile] Outermost tilable bands -(t4, t5, t6, ) with stmts {S7, S8, } -(t2, t3, t4, ) with stmts {S6, } -[pluto_tile] Innermost tilable bands -(t4, t5, t6, ) with stmts {S7, S8, } -(t2, t3, t4, ) with stmts {S6, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied - 19 dep(s) satit9 {loop with stmts: S7, } -t7 {loop with stmts: S7, } -t7 {loop with stmts: S7, } -t9 {loop with stmts: S8, } -t7 {loop with stmts: S8, } -t7 {loop with stmts: S8, } -t7 {loop with stmts: S6, } -t5 {loop with stmts: S6, } -t5 {loop with stmts: S2, } -t5 {loop with stmts: S5, } -sfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 8 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[Pluto] After tiling: -T(S1): (1, k, 1, 0, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 0, i/32, i, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S3): (1, k, 2, i, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 3, 0, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S5): (1, k, 4, i/32, i, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S6): (0, k/32, 0, j/32, k, 0, j, 1, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, loop, scalar, scalar) - -T(S7): (1, k, 5, j/32, 0, i/32, j, 0, i) -loop types (scalar, loop, scalar, loop, scalar, loop, loop, scalar, loop) - -T(S8): (1, k, 5, j/32, 1, i/32, j, 1, i) -loop types (scalar, loop, scalar, loop, scalar, loop, loop, scalar, loop) - -Stmts in bands 0 and 1 are distributed in tile space -Getting loop at depth 6 -[pluto-intra-tile-opt] Score for loop 0: -24 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 6 -[pluto-intra-tile-opt] Score for loop 0: -44 -[pluto-intra-tile-opt] Score for loop 1: 18 -[pluto] intra_tile_opt: loop to be made innermost: Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: -30 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: -28 -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied - 19 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied - 8 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) - 0 dep(s) satisfied -[Pluto] After intra-tile optimize -T(S1): (1, k, 1, 0, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 0, i/32, i, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S3): (1, k, 2, i, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 3, 0, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S5): (1, k, 4, i/32, i, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar) - -T(S6): (0, k/32, 0, j/32, k, 0, j, 1, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, loop, scalar, scalar) - -T(S7): (1, k, 5, j/32, 0, i/32, 0, i, j) -loop types (scalar, loop, scalar, loop, scalar, loop, loop, scalar, loop) - -T(S8): (1, k, 5, j/32, 1, i/32, 1, i, j) -loop types (scalar, loop, scalar, loop, scalar, loop, loop, scalar, loop) - -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(2,9), S2(5,9), S3(2,9), S4(2,9), S5(5,9), S6(5,9), S7(7,9), S8(7,9), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to gramschmidt.split1.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.003198s -[pluto] Auto-transformation time: 0.098362s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.007337s -[pluto] Code generation time: 0.044044s -[pluto] Other/Misc time: 0.160547s -[pluto] Total time: 0.306151s -[pluto] All times: 0.003198 0.098362 0.044044 0.160547 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.c deleted file mode 100644 index af9e62be..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.c +++ /dev/null @@ -1,219 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n), - DATA_TYPE POLYBENCH_1D(S,M,m)) -{ - int i, j, k; - - DATA_TYPE nrm; - -#pragma scop - for (k = 0; k < _PB_N; k++) - { - nrm = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) { - nrm += A[i][k] * A[i][k]; - } - R[k][k] = SQRT_FUN(nrm); - for (i = 0; i < _PB_M; i++) - Q[i][k] = A[i][k] / R[k][k]; - for (j = k + 1; j < _PB_N; j++) - { - R[k][j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) { - S[i] = Q[i][k] * A[i][j]; - R[k][j] += S[i]; - } - for (i = 0; i < _PB_M; i++) { - A[i][j] = A[i][j] - Q[i][k] * R[k][j]; - } - } - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,M,m); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.c deleted file mode 100644 index 2f4833da..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.c +++ /dev/null @@ -1,244 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n), - DATA_TYPE POLYBENCH_1D(S,M,m)) -{ - int i, j, k; - - DATA_TYPE nrm; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9, t10; - register int lbv, ubv; -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_N-2,32);t2++) { - for (t4=t2;t4<=floord(_PB_N-1,32);t4++) { - for (t5=32*t2;t5<=min(min(_PB_N-2,32*t2+31),32*t4+30);t5++) { - for (t7=max(32*t4,t5+1);t7<=min(_PB_N-1,32*t4+31);t7++) { - R[t5][t7] = SCALAR_VAL(0.0);; - } - } - } - } - for (t2=0;t2<=_PB_N-1;t2++) { - nrm = SCALAR_VAL(0.0);; - for (t4=0;t4<=_PB_M-1;t4++) { - nrm += A[t4][t2] * A[t4][t2];; - } - R[t2][t2] = SQRT_FUN(nrm);; - for (t4=0;t4<=floord(_PB_M-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_M-1,32*t4+31);t5++) { - Q[t5][t2] = A[t5][t2] / R[t2][t2];; - } - } - if (_PB_M >= 1) { - for (t4=t2+1;t4<=_PB_N-1;t4++) { - for (t7=0;t7<=floord(_PB_M-1,32);t7++) { - for (t8=32*t7;t8<=min(_PB_M-1,32*t7+31);t8++) { - S[t8] = Q[t8][t2] * A[t8][t4];; - } - } - for (t7=0;t7<=_PB_M-1;t7++) { - R[t2][t4] += S[t7];; - } - for (t7=0;t7<=floord(_PB_M-1,32);t7++) { - for (t8=32*t7;t8<=min(_PB_M-1,32*t7+31);t8++) { - A[t8][t4] = A[t8][t4] - Q[t8][t2] * R[t2][t4];; - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,M,m); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.cloog b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.cloog deleted file mode 100644 index d36878ed..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.cloog +++ /dev/null @@ -1,225 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_N _PB_M - -# Number of statements -8 - -# S1 (nrm = SCALAR_VAL(0.0);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S2 (nrm += A[i][k] * A[i][k];) -7 6 -1 1 0 0 0 0 -1 -1 0 1 0 -1 -1 0 0 1 0 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -1 0 0 0 1 -1 -0 0 0 0 0 0 -0 0 0 - -# S3 (R[k][k] = SQRT_FUN(nrm);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S4 (Q[i][k] = A[i][k] / R[k][k];) -9 7 -1 0 1 0 0 0 0 -1 0 -1 0 1 0 -1 -1 0 0 0 1 0 -1 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 -1 32 0 -1 0 0 31 -0 0 0 - -# S5 (R[k][j] = SCALAR_VAL(0.0);) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -1 0 0 -1 0 1 0 -2 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S6 (S[i] = Q[i][k] * A[i][j];) -11 8 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 -1 1 0 0 0 -1 -1 0 0 -1 0 1 0 -1 -1 0 -1 0 0 1 0 -2 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 -1 32 0 0 -1 0 0 31 -0 0 0 - -# S7 (R[k][j] += S[i];) -9 7 -1 1 0 0 0 0 0 -1 -1 0 0 1 0 -1 -1 0 0 0 1 0 -1 -1 -1 1 0 0 0 -1 -1 0 -1 0 1 0 -1 -1 -1 0 0 1 0 -2 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 - -# S8 (A[i][j] = A[i][j] - Q[i][k] * R[k][j];) -11 8 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 -1 1 0 0 0 -1 -1 0 0 -1 0 1 0 -1 -1 0 -1 0 0 1 0 -2 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 -1 32 0 0 -1 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -8 - -# T(S1) -10 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S2) -10 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S3) -10 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S4) -10 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S5) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S6) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S7) -10 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S8) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -10 -t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.log b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.log deleted file mode 100644 index 6eb2aaab..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split2.pluto.log +++ /dev/null @@ -1,3565 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_N _PB_M - - -# Number of statements -8 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -nrm = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -READ -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -WRITE -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -nrm += A[i][k] * A[i][k]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 3.3 Access -WRITE -3 8 3 1 0 2 -# e/i| Arr [1] [2]| k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 ## [2] == k - -READ -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -R[k][k] = SQRT_FUN(nrm); - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 3 ## c3 == 3 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -Q[i][k] = A[i][k] / R[k][k]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 1 0 -2 ## -k+_PB_N-2 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k j -# Statement body expression -R[k][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 6.3 Access -WRITE -2 9 2 3 0 2 -# e/i| Arr [1]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == S - 0 0 -1 0 0 1 0 0 0 ## [1] == i - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -S[i] = Q[i][k] * A[i][j]; - - -# =============================================== Statement 7 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 7.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -2 9 2 3 0 2 -# e/i| Arr [1]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == S - 0 0 -1 0 0 1 0 0 0 ## [1] == i - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -R[k][j] += S[i]; - - -# =============================================== Statement 8 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 8.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 8.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c5 == 2 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 8.3 Access -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 8.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -A[i][j] = A[i][j] - Q[i][k] * R[k][j]; - - -# =============================================== Extensions - -b0 k b1 j b2 i b3 - - - -# Number of arrays -12 -# Mapping array-identifiers/array-names -1 k -2 _PB_N -3 nrm -4 SCALAR_VAL -5 i -6 _PB_M -7 A -8 R -9 SQRT_FUN -10 Q -11 j -12 S - - - -# File name -(null) -# Starting line and column -100 0 -# Ending line and column -121 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_N _PB_M -S1 "nrm = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -nrm[0] -Original loop: 0 -> yes - -S2 "nrm += A[i][k] * A[i][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -nrm[0] -A[i][k] -A[i][k] -Write accesses -nrm[0] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "R[k][k] = SQRT_FUN(nrm);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -nrm[0] -Write accesses -R[k][k] -Original loop: 0 -> yes - -S4 "Q[i][k] = A[i][k] / R[k][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S4): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -A[i][k] -R[k][k] -Write accesses -Q[i][k] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "R[k][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 - -T(S5): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "S[i] = Q[i][k] * A[i][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S6): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -Q[i][k] -A[i][j] -Write accesses -S[i] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S7 "R[k][j] += S[i];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S7): (0, k, 4, j, 1, i, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -R[k][j] -S[i] -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S8 "A[i][j] = A[i][j] - Q[i][k] * R[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S8): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -A[i][j] -Q[i][k] -R[k][j] -Write accesses -A[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S5 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 2 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 3 from S8 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 4 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 5 from S8 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 6 from S8 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 7 from S4 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 8 from S7 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 9 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 10 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 11 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 12 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 13 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 14 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 15 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 16 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 17 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 18 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 19 from S8 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 20 from S8 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 21 from S7 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 22 from S7 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 23 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 24 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 25 from S2 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 26 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 27 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 28 from S7 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 29 from S8 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 30 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 31 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 32 from S2 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 33 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 34 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 35 from S5 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 36 from S7 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 37 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 38 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 39 from S8 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 40 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 41 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S7): (0, k, 4, j, 1, i, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S8): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 8 -[pluto] Total number of loops: 17 -[pluto] Number of deps: 41 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 1 2 3 5 6 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 7: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[2 dims; 3 constraints] -c_j-1 >= 0 -c_i-2 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 0, h(S6) = 1, h(S7) = 1, h(S8) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 1; num_constraints: 12 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 2; num_constraints: 18 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 3; num_constraints: 12 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 4; num_constraints: 15 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 5; num_constraints: 12 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 6; num_constraints: 12 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 7; num_constraints: 12 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 8; num_constraints: 5 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 9; num_constraints: 18 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 8 constraints - For dep 10; num_constraints: 14 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 9 constraints - For dep 11; num_constraints: 20 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 12; num_constraints: 12 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 13; num_constraints: 10 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 14; num_constraints: 13 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 15; num_constraints: 9 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 16; num_constraints: 18 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 17; num_constraints: 12 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 18; num_constraints: 12 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 19; num_constraints: 5 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 20; num_constraints: 12 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 9 constraints - For dep 21; num_constraints: 20 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 22; num_constraints: 12 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 23; num_constraints: 13 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 24; num_constraints: 9 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 25; num_constraints: 16 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 26; num_constraints: 16 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 27; num_constraints: 16 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 28; num_constraints: 5 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 29; num_constraints: 5 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 30; num_constraints: 12 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 31; num_constraints: 10 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 32; num_constraints: 16 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 33; num_constraints: 13 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 34; num_constraints: 9 -[pluto] compute permutability constraints: Dep 35 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 35; num_constraints: 12 -[pluto] compute permutability constraints: Dep 36 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 36; num_constraints: 5 -[pluto] compute permutability constraints: Dep 37 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 37; num_constraints: 18 -[pluto] compute permutability constraints: Dep 38 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_o) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints - For dep 38; num_constraints: 13 -[pluto] compute permutability constraints: Dep 39 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 39; num_constraints: 5 -[pluto] compute permutability constraints: Dep 40 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_p) from 8 constraints - For dep 40; num_constraints: 12 -[pluto] compute permutability constraints: Dep 41 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 41; num_constraints: 5 - After dep 2; num_constraints: 18 - After dep 3; num_constraints: 30 - After dep 4; num_constraints: 45 - After dep 5; num_constraints: 57 - After dep 6; num_constraints: 69 - After dep 7; num_constraints: 81 - After dep 8; num_constraints: 86 - After dep 9; num_constraints: 104 - After dep 10; num_constraints: 118 - After dep 11; num_constraints: 138 - After dep 12; num_constraints: 150 - After dep 13; num_constraints: 160 - After dep 14; num_constraints: 173 - After dep 15; num_constraints: 182 - After dep 16; num_constraints: 200 - After dep 18; num_constraints: 212 - After dep 19; num_constraints: 217 - After dep 20; num_constraints: 229 - After dep 21; num_constraints: 249 - After dep 22; num_constraints: 261 - After dep 23; num_constraints: 274 - After dep 24; num_constraints: 283 - After dep 25; num_constraints: 299 - After dep 26; num_constraints: 315 - After dep 27; num_constraints: 331 - After dep 28; num_constraints: 336 - After dep 29; num_constraints: 341 - After dep 30; num_constraints: 353 - After dep 31; num_constraints: 363 - After dep 32; num_constraints: 379 - After dep 33; num_constraints: 392 - After dep 34; num_constraints: 401 - After dep 36; num_constraints: 406 - After dep 37; num_constraints: 424 - After dep 38; num_constraints: 437 - After dep 39; num_constraints: 442 - After dep 40; num_constraints: 454 - After dep 41; num_constraints: 459 - After all dependences: num constraints: 171, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_l >= 0 - -Set #1 -[35 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_p >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_p-c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_t >= 0 - -Set #1 -[35 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_x >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] -c_x-c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_| >= 0 - -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_€-c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_„-c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_ˆ-c_‰-c_Š-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 8 constraints] - +c_l -1 >= 0 - +c_p -c_q -1 >= 0 - +c_t -1 >= 0 - +c_x -c_y -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ -c_ -c_‚ -1 >= 0 - +c_„ -c_… -c_† -1 >= 0 - +c_ˆ -c_‰ -c_Š -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 222 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 222 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = k, h(S2) = k, h(S3) = k, h(S4) = k, h(S5) = k, h(S6) = k, h(S7) = k, h(S8) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‰-c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - -c_q -1 >= 0 - -c_y -1 >= 0 - +c_} -1 >= 0 - -c_ -c_‚ -1 >= 0 - -c_… -c_† -1 >= 0 - -c_‰ -c_Š -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 218 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 218 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (0, k) -loop types (scalar, loop) - -T(S6): (1, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -T(S8): (1, k) -loop types (scalar, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 1 - After dep 2; num_constraints: 18 - After dep 4; num_constraints: 33 - After dep 7; num_constraints: 45 - After dep 8; num_constraints: 50 - After dep 9; num_constraints: 68 - After dep 10; num_constraints: 82 - After dep 12; num_constraints: 94 - After dep 13; num_constraints: 104 - After dep 15; num_constraints: 113 - After dep 16; num_constraints: 131 - After dep 18; num_constraints: 143 - After dep 22; num_constraints: 155 - After dep 24; num_constraints: 164 - After dep 28; num_constraints: 169 - After dep 31; num_constraints: 179 - After dep 34; num_constraints: 188 - After dep 36; num_constraints: 193 - After dep 37; num_constraints: 211 - After dep 41; num_constraints: 216 - After all dependences: num constraints: 96, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰+c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - -c_q -1 >= 0 - -c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… -c_† -1 >= 0 - +c_‰ +c_Š -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 143 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 143 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (0, k) -loop types (scalar, loop) - -T(S6): (1, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -T(S8): (1, k) -loop types (scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 5 6 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 1 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 1 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 2: max stmt dim: 3 - SCC 6: size: 1: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 7 dep(s) satisfied -h(S1) = 1, h(S2) = 2, h(S3) = 3, h(S4) = 4, h(S5) = 0, h(S6) = 5, h(S7) = 5, h(S8) = 5 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 2 - After dep 8; num_constraints: 5 - After dep 10; num_constraints: 19 - After dep 12; num_constraints: 31 - After dep 13; num_constraints: 41 - After dep 15; num_constraints: 50 - After dep 22; num_constraints: 62 - After dep 24; num_constraints: 71 - After dep 28; num_constraints: 76 - After dep 31; num_constraints: 86 - After dep 34; num_constraints: 95 - After dep 36; num_constraints: 100 - After dep 41; num_constraints: 105 - After all dependences: num constraints: 51, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_y >= 0 - -Set #1 -[35 dims; 1 constraints] -c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰+c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - +c_q -1 >= 0 - +c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… -c_† -1 >= 0 - +c_‰ +c_Š -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 98 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 98 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = 0, h(S4) = i, h(S5) = j, h(S6) = j, h(S7) = j, h(S8) = j -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - -c_‚ -1 >= 0 - -c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 92 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 92 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S5): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S6): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 3 - After dep 8; num_constraints: 5 - After dep 10; num_constraints: 19 - After dep 13; num_constraints: 29 - After dep 28; num_constraints: 34 - After dep 31; num_constraints: 44 - After dep 36; num_constraints: 49 - After all dependences: num constraints: 33, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - -c_‚ -1 >= 0 - -c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 74 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 74 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S5): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S6): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 1 - SCC 6: size: 1: max stmt dim: 2 - SCC 7: size: 1: max stmt dim: 1 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 0 and id 2 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 0, h(S8) = 1 -[pluto] updating DDG -[pluto] Cutting between SCC id 0 and id 1 -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 13 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 1, h(S8) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 4 - After dep 8; num_constraints: 5 - After dep 28; num_constraints: 10 - After dep 36; num_constraints: 15 - After all dependences: num constraints: 5, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - +c_‚ -1 >= 0 - +c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 5) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 46 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 46 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = i, h(S7) = i, h(S8) = i -[pluto] pluto_auto_transform: band level 4; 1 hyperplane(s) found -T(S1): (1, k, 1, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S5): (0, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S7): (1, k, 5, j, 0, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S8): (1, k, 5, j, 1, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 13 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (1, k, 1, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S5): (0, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S7): (1, k, 5, j, 0, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S8): (1, k, 5, j, 1, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -[pluto_tile] Outermost tilable bands -(t2, t3, t4, ) with stmts {S5, } -[pluto_tile] Innermost tilable bands -(t2, t3, t4, ) with stmts {S5, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 12 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 13 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 9) - 0 dep(s) satisfied -[Pluto] After tiling: -T(S1): (1, k, 1, 0, 1, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0, 0, 0, 0) -loop types (t7 {loop with stmts: S5, } -t5 {loop with stmts: S5, } -t5 {loop with stmts: S4, } -t8 {loop with stmts: S6, } -t8 {loop with stmts: S8, } -scalar, loop, scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i/32, i, 1, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S5): (0, k/32, 0, j/32, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i/32, i, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, loop, scalar, scalar) - -T(S7): (1, k, 5, j, 0, 1, i, 0, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, scalar, scalar, scalar) - -T(S8): (1, k, 5, j, 1, 1, i/32, i, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, loop, scalar, scalar) - -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: -28 -Getting loop at depth 7 -[pluto-intra-tile-opt] Score for loop 0: -30 -Getting loop at depth 7 -[pluto-intra-tile-opt] Score for loop 0: -44 -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(2,10), S2(2,10), S3(2,10), S4(5,10), S5(5,10), S6(8,10), S7(2,10), S8(8,10), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to gramschmidt.split2.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.003001s -[pluto] Auto-transformation time: 0.110590s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.008506s -[pluto] Code generation time: 0.026343s -[pluto] Other/Misc time: 0.094179s -[pluto] Total time: 0.234113s -[pluto] All times: 0.003001 0.110590 0.026343 0.094179 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.c deleted file mode 100644 index 000053d7..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.c +++ /dev/null @@ -1,219 +0,0 @@ -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n), - DATA_TYPE POLYBENCH_1D(S,M,m)) -{ - int i, j, k; - - DATA_TYPE nrm; - -#pragma scop - for (k = 0; k < _PB_N; k++) - { - nrm = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) { - nrm += A[i][k] * A[i][k]; - } - R[k][k] = SQRT_FUN(nrm); - for (i = 0; i < _PB_M; i++) - Q[i][k] = A[i][k] / R[k][k]; - for (j = k + 1; j < _PB_N; j++) - { - R[k][j] = SCALAR_VAL(0.0); - for (i = 0; i < _PB_M; i++) { - R[k][j] += Q[i][k] * A[i][j]; - } - for (i = 0; i < _PB_M; i++) { - S[i] = Q[i][k] * R[k][j]; - A[i][j] = A[i][j] - S[i]; - } - } - } -#pragma endscop - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,M,m); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.c b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.c deleted file mode 100644 index 11b6a5d4..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.c +++ /dev/null @@ -1,244 +0,0 @@ -#include -#define ceild(n,d) (((n)<0) ? -((-(n))/(d)) : ((n)+(d)-1)/(d)) -#define floord(n,d) (((n)<0) ? -((-(n)+(d)-1)/(d)) : (n)/(d)) -#define max(x,y) ((x) > (y)? (x) : (y)) -#define min(x,y) ((x) < (y)? (x) : (y)) - -// TODO: mlir-clang %s %stdinclude | FileCheck %s -// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 -lm && %s.exec1 &> %s.out1 -// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 -// RUN: rm -f %s.exec1 %s.execm -// RUN: diff %s.out1 %s.out2 -// RUN: rm -f %s.out1 %s.out2 -// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC -// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 -lm && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC -// RUN: rm -f %s.exec2 %s.execm - -/** - * This version is stamped on May 10, 2016 - * - * Contact: - * Louis-Noel Pouchet - * Tomofumi Yuki - * - * Web address: http://polybench.sourceforge.net - */ -/* gramschmidt.c: this file is part of PolyBench/C */ - -#include -#include -#include -#include - -/* Include polybench common header. */ -#include - -/* Include benchmark-specific header. */ -#include "gramschmidt.h" - - -/* Array initialization. */ -static -void init_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - A[i][j] = (((DATA_TYPE) ((i*j) % m) / m )*100) + 10; - Q[i][j] = 0.0; - } - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) - R[i][j] = 0.0; -} - - -/* DCE code. Must scan the entire live-out data. - Can be used also to check the correctness of the output. */ -static -void print_array(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n)) -{ - int i, j; - - POLYBENCH_DUMP_START; - POLYBENCH_DUMP_BEGIN("R"); - for (i = 0; i < n; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, R[i][j]); - } - POLYBENCH_DUMP_END("R"); - - POLYBENCH_DUMP_BEGIN("Q"); - for (i = 0; i < m; i++) - for (j = 0; j < n; j++) { - if ((i*n+j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); - fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, Q[i][j]); - } - POLYBENCH_DUMP_END("Q"); - POLYBENCH_DUMP_FINISH; -} - - -/* Main computational kernel. The whole function will be timed, - including the call and return. */ -/* QR Decomposition with Modified Gram Schmidt: - http://www.inf.ethz.ch/personal/gander/ */ -static -void kernel_gramschmidt(int m, int n, - DATA_TYPE POLYBENCH_2D(A,M,N,m,n), - DATA_TYPE POLYBENCH_2D(R,N,N,n,n), - DATA_TYPE POLYBENCH_2D(Q,M,N,m,n), - DATA_TYPE POLYBENCH_1D(S,M,m)) -{ - int i, j, k; - - DATA_TYPE nrm; - - int t1, t2, t3, t4, t5, t6, t7, t8, t9, t10; - register int lbv, ubv; -if (_PB_N >= 1) { - for (t2=0;t2<=floord(_PB_N-2,32);t2++) { - for (t4=t2;t4<=floord(_PB_N-1,32);t4++) { - for (t5=32*t2;t5<=min(min(_PB_N-2,32*t2+31),32*t4+30);t5++) { - for (t7=max(32*t4,t5+1);t7<=min(_PB_N-1,32*t4+31);t7++) { - R[t5][t7] = SCALAR_VAL(0.0);; - } - } - } - } - for (t2=0;t2<=_PB_N-1;t2++) { - nrm = SCALAR_VAL(0.0);; - for (t4=0;t4<=_PB_M-1;t4++) { - nrm += A[t4][t2] * A[t4][t2];; - } - R[t2][t2] = SQRT_FUN(nrm);; - for (t4=0;t4<=floord(_PB_M-1,32);t4++) { - for (t5=32*t4;t5<=min(_PB_M-1,32*t4+31);t5++) { - Q[t5][t2] = A[t5][t2] / R[t2][t2];; - } - } - if (_PB_M >= 1) { - for (t4=t2+1;t4<=_PB_N-1;t4++) { - for (t7=0;t7<=_PB_M-1;t7++) { - R[t2][t4] += Q[t7][t2] * A[t7][t4];; - } - for (t7=0;t7<=floord(_PB_M-1,32);t7++) { - for (t8=32*t7;t8<=min(_PB_M-1,32*t7+31);t8++) { - S[t8] = Q[t8][t2] * R[t2][t4];; - } - } - for (t7=0;t7<=floord(_PB_M-1,32);t7++) { - for (t8=32*t7;t8<=min(_PB_M-1,32*t7+31);t8++) { - A[t8][t4] = A[t8][t4] - S[t8];; - } - } - } - } - } -} - -} - - -int main(int argc, char** argv) -{ - /* Retrieve problem size. */ - int m = M; - int n = N; - - /* Variable declaration/allocation. */ - POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,N,m,n); - POLYBENCH_2D_ARRAY_DECL(R,DATA_TYPE,N,N,n,n); - POLYBENCH_2D_ARRAY_DECL(Q,DATA_TYPE,M,N,m,n); - POLYBENCH_1D_ARRAY_DECL(S,DATA_TYPE,M,m); - - /* Initialize array(s). */ - init_array (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q)); - - /* Start timer. */ - polybench_start_instruments; - - /* Run kernel. */ - kernel_gramschmidt (m, n, - POLYBENCH_ARRAY(A), - POLYBENCH_ARRAY(R), - POLYBENCH_ARRAY(Q), - POLYBENCH_ARRAY(S)); - - /* Stop and print timer. */ - polybench_stop_instruments; - polybench_print_instruments; - - /* Prevent dead-code elimination. All live-out data must be printed - by the function call in argument. */ - polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(R), POLYBENCH_ARRAY(Q))); - - /* Be clean. */ - POLYBENCH_FREE_ARRAY(A); - POLYBENCH_FREE_ARRAY(R); - POLYBENCH_FREE_ARRAY(Q); - - return 0; -} - -// CHECK: #map = affine_map<(d0) -> (d0 + 1)> -// CHECK: func @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref<1000x1200xf64>, %arg3: memref<1200x1200xf64>, %arg4: memref<1000x1200xf64>) { -// CHECK-NEXT: %c0 = constant 0 : index -// CHECK-NEXT: %cst = constant 0.000000e+00 : f64 -// CHECK-NEXT: %0 = alloca() : memref<1xf64> -// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index -// CHECK-NEXT: store %cst, %0[%c0] : memref<1xf64> -// CHECK-NEXT: %2 = index_cast %arg0 : i32 to index -// CHECK-NEXT: %3 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %4 = load %0[%c0] : memref<1xf64> -// CHECK-NEXT: %5 = sqrt %4 : f64 -// CHECK-NEXT: affine.for %arg5 = 0 to %1 { -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %9 = mulf %7, %8 : f64 -// CHECK-NEXT: %10 = addf %3, %9 : f64 -// CHECK-NEXT: affine.store %10, %0[0] : memref<1xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.store %5, %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: %6 = affine.load %arg3[%arg5, %arg5] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg6 = 0 to %2 { -// CHECK-NEXT: %7 = affine.load %arg2[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %8 = divf %7, %6 : f64 -// CHECK-NEXT: affine.store %8, %arg4[%arg6, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: affine.for %arg6 = #map(%arg5) to %1 { -// CHECK-NEXT: affine.store %cst, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: %7 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %9, %10 : f64 -// CHECK-NEXT: %12 = addf %7, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: %8 = affine.load %arg3[%arg5, %arg6] : memref<1200x1200xf64> -// CHECK-NEXT: affine.for %arg7 = 0 to %2 { -// CHECK-NEXT: %9 = affine.load %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: %10 = affine.load %arg4[%arg7, %arg5] : memref<1000x1200xf64> -// CHECK-NEXT: %11 = mulf %10, %8 : f64 -// CHECK-NEXT: %12 = subf %9, %11 : f64 -// CHECK-NEXT: affine.store %12, %arg2[%arg7, %arg6] : memref<1000x1200xf64> -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: } -// CHECK-NEXT: return -// CHECK-NEXT: } - -// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.cloog b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.cloog deleted file mode 100644 index 3a122b19..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.cloog +++ /dev/null @@ -1,225 +0,0 @@ -# CLooG script generated automatically by PLUTO 0.12.0 -# language: C -c - -0 4 - -1 -_PB_N _PB_M - -# Number of statements -8 - -# S1 (nrm = SCALAR_VAL(0.0);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S2 (nrm += A[i][k] * A[i][k];) -7 6 -1 1 0 0 0 0 -1 -1 0 1 0 -1 -1 0 0 1 0 -1 -1 0 1 0 0 0 -1 0 -1 0 1 -1 -1 0 0 0 1 -1 -0 0 0 0 0 0 -0 0 0 - -# S3 (R[k][k] = SQRT_FUN(nrm);) -5 5 -1 1 0 0 0 -1 -1 1 0 -1 -1 0 1 0 -1 -0 0 0 0 0 -0 0 0 0 0 -0 0 0 - -# S4 (Q[i][k] = A[i][k] / R[k][k];) -9 7 -1 0 1 0 0 0 0 -1 0 -1 0 1 0 -1 -1 0 0 0 1 0 -1 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 -1 32 0 -1 0 0 31 -0 0 0 - -# S5 (R[k][j] = SCALAR_VAL(0.0);) -11 8 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 0 -1 1 0 0 -1 -1 0 0 0 -1 1 0 -1 -1 0 0 -1 0 1 0 -2 -0 0 0 0 0 0 0 0 -1 -32 0 1 0 0 0 0 -1 32 0 -1 0 0 0 31 -1 0 -32 0 1 0 0 0 -1 0 32 0 -1 0 0 31 -0 0 0 - -# S6 (R[k][j] += Q[i][k] * A[i][j];) -9 7 -1 1 0 0 0 0 0 -1 -1 0 0 1 0 -1 -1 0 0 0 1 0 -1 -1 -1 1 0 0 0 -1 -1 0 -1 0 1 0 -1 -1 -1 0 0 1 0 -2 -1 0 0 1 0 0 0 -1 0 0 -1 0 1 -1 -1 0 0 0 0 1 -1 -0 0 0 - -# S7 (S[i] = Q[i][k] * R[k][j];) -11 8 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 -1 1 0 0 0 -1 -1 0 0 -1 0 1 0 -1 -1 0 -1 0 0 1 0 -2 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 -1 32 0 0 -1 0 0 31 -0 0 0 - -# S8 (A[i][j] = A[i][j] - S[i];) -11 8 -1 0 1 0 0 0 0 0 -1 0 -1 0 0 1 0 -1 -1 0 0 0 0 1 0 -1 -1 0 -1 1 0 0 0 -1 -1 0 0 -1 0 1 0 -1 -1 0 -1 0 0 1 0 -2 -1 0 0 0 1 0 0 0 -1 0 0 0 -1 0 1 -1 -1 0 0 0 0 0 1 -1 -1 -32 0 0 1 0 0 0 -1 32 0 0 -1 0 0 31 -0 0 0 - -# we want cloog to set the iterator names -0 - -# Number of scattering functions -8 - -# T(S1) -10 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S2) -10 16 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 - -# T(S3) -10 15 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 -3 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 - -# T(S4) -10 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -4 -0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S5) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S6) -10 17 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 - -# T(S7) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# T(S8) -10 18 -0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -5 -0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0 0 0 0 -0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 -0 0 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 0 0 0 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 - -# we will set the scattering dimension names -10 -t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.log b/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.log deleted file mode 100644 index 89703171..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.split3.pluto.log +++ /dev/null @@ -1,3565 +0,0 @@ -# [File generated by the OpenScop Library 0.9.2] - - - -# =============================================== Global -# Language -C - -# Context -CONTEXT -0 4 0 0 0 2 - -# Parameters are provided -1 - -_PB_N _PB_M - - -# Number of statements -8 - -# =============================================== Statement 1 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 1.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 1.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 ## c3 == 0 - -# ---------------------------------------------- 1.3 Access -WRITE -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 1.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -nrm = SCALAR_VAL(0.0); - - -# =============================================== Statement 2 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 2.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 2.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 2.3 Access -READ -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -WRITE -1 7 1 2 0 2 -# e/i| Arr| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 3 ## Arr == nrm - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 2.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -nrm += A[i][k] * A[i][k]; - - -# =============================================== Statement 3 -# Number of relations describing the statement: -4 - -# ---------------------------------------------- 3.1 Domain -DOMAIN -3 5 1 0 0 2 -# e/i| k |_PB. _PB.| 1 - 1 1 0 0 0 ## k >= 0 - 1 -1 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 1 0 -1 ## _PB_N-1 >= 0 - -# ---------------------------------------------- 3.2 Scattering -SCATTERING -3 8 3 1 0 2 -# e/i| c1 c2 c3 | k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 1 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 2 ## c3 == 2 - -# ---------------------------------------------- 3.3 Access -WRITE -3 8 3 1 0 2 -# e/i| Arr [1] [2]| k |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 ## [2] == k - -READ -1 6 1 1 0 2 -# e/i| Arr| k |_PB. _PB.| 1 - 0 -1 0 0 0 3 ## Arr == nrm - -# ---------------------------------------------- 3.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -1 -# List of original iterators -k -# Statement body expression -R[k][k] = SQRT_FUN(nrm); - - -# =============================================== Statement 4 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 4.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k i |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 0 1 0 0 0 ## i >= 0 - 1 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 4.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 3 ## c3 == 3 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 4.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -READ -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 1 0 0 0 0 ## [2] == k - -# ---------------------------------------------- 4.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k i -# Statement body expression -Q[i][k] = A[i][k] / R[k][k]; - - -# =============================================== Statement 5 -# Number of relations describing the statement: -3 - -# ---------------------------------------------- 5.1 Domain -DOMAIN -6 6 2 0 0 2 -# e/i| k j |_PB. _PB.| 1 - 1 1 0 0 0 0 ## k >= 0 - 1 -1 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 1 0 -2 ## -k+_PB_N-2 >= 0 - -# ---------------------------------------------- 5.2 Scattering -SCATTERING -5 11 5 2 0 2 -# e/i| c1 c2 c3 c4 c5 | k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 - -# ---------------------------------------------- 5.3 Access -WRITE -3 9 3 2 0 2 -# e/i| Arr [1] [2]| k j |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 ## [2] == j - -# ---------------------------------------------- 5.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -2 -# List of original iterators -k j -# Statement body expression -R[k][j] = SCALAR_VAL(0.0); - - -# =============================================== Statement 6 -# Number of relations describing the statement: -6 - -# ---------------------------------------------- 6.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 6.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c5 == 1 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 6.3 Access -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 6.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -R[k][j] += Q[i][k] * A[i][j]; - - -# =============================================== Statement 7 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 7.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 7.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c5 == 2 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 ## c7 == 0 - -# ---------------------------------------------- 7.3 Access -WRITE -2 9 2 3 0 2 -# e/i| Arr [1]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == S - 0 0 -1 0 0 1 0 0 0 ## [1] == i - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 10 ## Arr == Q - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 1 0 0 0 0 0 ## [2] == k - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 8 ## Arr == R - 0 0 -1 0 1 0 0 0 0 0 ## [1] == k - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -# ---------------------------------------------- 7.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -S[i] = Q[i][k] * R[k][j]; - - -# =============================================== Statement 8 -# Number of relations describing the statement: -5 - -# ---------------------------------------------- 8.1 Domain -DOMAIN -9 7 3 0 0 2 -# e/i| k j i |_PB. _PB.| 1 - 1 1 0 0 0 0 0 ## k >= 0 - 1 -1 0 0 1 0 -1 ## -k+_PB_N-1 >= 0 - 1 0 0 0 1 0 -1 ## _PB_N-1 >= 0 - 1 -1 1 0 0 0 -1 ## -k+j-1 >= 0 - 1 0 -1 0 1 0 -1 ## -j+_PB_N-1 >= 0 - 1 -1 0 0 1 0 -2 ## -k+_PB_N-2 >= 0 - 1 0 0 1 0 0 0 ## i >= 0 - 1 0 0 -1 0 1 -1 ## -i+_PB_M-1 >= 0 - 1 0 0 0 0 1 -1 ## _PB_M-1 >= 0 - -# ---------------------------------------------- 8.2 Scattering -SCATTERING -7 14 7 3 0 2 -# e/i| c1 c2 c3 c4 c5 c6 c7 | k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 - 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c2 == k - 0 0 0 -1 0 0 0 0 0 0 0 0 0 4 ## c3 == 4 - 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c4 == j - 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c5 == 2 - 0 0 0 0 0 0 -1 0 0 0 1 0 0 0 ## c6 == i - 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 ## c7 == 1 - -# ---------------------------------------------- 8.3 Access -WRITE -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -3 10 3 3 0 2 -# e/i| Arr [1] [2]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 0 7 ## Arr == A - 0 0 -1 0 0 0 1 0 0 0 ## [1] == i - 0 0 0 -1 0 1 0 0 0 0 ## [2] == j - -READ -2 9 2 3 0 2 -# e/i| Arr [1]| k j i |_PB. _PB.| 1 - 0 -1 0 0 0 0 0 0 12 ## Arr == S - 0 0 -1 0 0 1 0 0 0 ## [1] == i - -# ---------------------------------------------- 8.4 Statement Extensions -# Number of Statement Extensions -1 - -# Number of original iterators -3 -# List of original iterators -k j i -# Statement body expression -A[i][j] = A[i][j] - S[i]; - - -# =============================================== Extensions - -b0 k b1 j b2 i b3 - - - -# Number of arrays -12 -# Mapping array-identifiers/array-names -1 k -2 _PB_N -3 nrm -4 SCALAR_VAL -5 i -6 _PB_M -7 A -8 R -9 SQRT_FUN -10 Q -11 j -12 S - - - -# File name -(null) -# Starting line and column -100 0 -# Ending line and column -121 0 -# Indentation -2 - - - - -[pluto] compute_deps (isl) -nvar = 3, npar = 2 -Parameters: _PB_N _PB_M -S1 "nrm = SCALAR_VAL(0.0);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -No Read accesses -Write accesses -nrm[0] -Original loop: 0 -> yes - -S2 "nrm += A[i][k] * A[i][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -nrm[0] -A[i][k] -A[i][k] -Write accesses -nrm[0] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S3 "R[k][k] = SQRT_FUN(nrm);" -ndims: 1; orig_depth: 1 -Index set -Set #1 -[3 dims; 3 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 - -T(S3): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -Read accesses -nrm[0] -Write accesses -R[k][k] -Original loop: 0 -> yes - -S4 "Q[i][k] = A[i][k] / R[k][k];" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S4): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -Read accesses -A[i][k] -R[k][k] -Write accesses -Q[i][k] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S5 "R[k][j] = SCALAR_VAL(0.0);" -ndims: 2; orig_depth: 2 -Index set -Set #1 -[4 dims; 6 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 - -T(S5): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -No Read accesses -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes - -S6 "R[k][j] += Q[i][k] * A[i][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S6): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -R[k][j] -Q[i][k] -A[i][j] -Write accesses -R[k][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S7 "S[i] = Q[i][k] * R[k][j];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S7): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -Q[i][k] -R[k][j] -Write accesses -S[i] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - -S8 "A[i][j] = A[i][j] - S[i];" -ndims: 3; orig_depth: 3 -Index set -Set #1 -[5 dims; 9 constraints] -k >= 0 --k+_PB_N-1 >= 0 -_PB_N-1 >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 --k+_PB_N-2 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -_PB_M-1 >= 0 - -T(S8): (0, k, 4, j, 2, i, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -Read accesses -A[i][j] -S[i] -Write accesses -A[i][j] -Original loop: 0 -> yes -Original loop: 1 -> yes -Original loop: 2 -> yes - ---- Dep 1 from S4 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 2 from S1 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 3 from S8 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 4 from S5 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 5 from S3 to S4; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 6 from S8 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 7 from S6 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 8 from S1 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 9 from S5 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 10 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 11 from S2 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 12 from S6 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 13 from S8 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 14 from S2 to S3; satisfied: 0, sat level: -1; Type: RAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 15 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 16 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 17 from S7 to S8; satisfied: 0, sat level: -1; Type: RAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 18 from S8 to S6; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 19 from S4 to S7; satisfied: 0, sat level: -1; Type: RAW -on variable: Q -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 20 from S8 to S2; satisfied: 0, sat level: -1; Type: RAW -on variable: A -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --i+i' = 0 --j+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 21 from S8 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 22 from S8 to S7; satisfied: 0, sat level: -1; Type: WAR -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 23 from S6 to S6; satisfied: 0, sat level: -1; Type: WAR -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 24 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 25 from S2 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 26 from S2 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 27 from S3 to S1; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 28 from S3 to S2; satisfied: 0, sat level: -1; Type: WAR -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 29 from S8 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 30 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 31 from S6 to S8; satisfied: 0, sat level: -1; Type: WAR -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 - - ---- Dep 32 from S7 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 9 constraints] --i+i' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 33 from S7 to S7; satisfied: 0, sat level: -1; Type: WAW -on variable: S -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --j+j'-1 >= 0 --j'+_PB_N-1 >= 0 - - ---- Dep 34 from S2 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 35 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 7 constraints] -k >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 36 from S2 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[6 dims; 6 constraints] --k+k' = 0 -k >= 0 --k+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 37 from S5 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[7 dims; 7 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 38 from S1 to S2; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[5 dims; 5 constraints] -k >= 0 --k+k' >= 0 --k'+_PB_N-1 >= 0 -i' >= 0 --i'+_PB_M-1 >= 0 - - ---- Dep 39 from S1 to S1; satisfied: 0, sat level: -1; Type: WAW -on variable: nrm -Dependence polyhedron -Set #1 -[4 dims; 3 constraints] -k >= 0 --k+k'-1 >= 0 --k'+_PB_N-1 >= 0 - - ---- Dep 40 from S8 to S8; satisfied: 0, sat level: -1; Type: WAW -on variable: A -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --i+i' = 0 --j+j' = 0 -k >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+_PB_M-1 >= 0 --k+k'-1 >= 0 -j-k'-1 >= 0 - - ---- Dep 41 from S6 to S6; satisfied: 0, sat level: -1; Type: WAW -on variable: R -Dependence polyhedron -Set #1 -[8 dims; 8 constraints] --j+j' = 0 --k+k' = 0 -k >= 0 --k+j-1 >= 0 --j+_PB_N-1 >= 0 -i >= 0 --i+i'-1 >= 0 --i'+_PB_M-1 >= 0 - - -T(S1): (0, k, 0, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S2): (0, k, 1, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S3): (0, k, 2, 0, 0, 0, 0) -loop types (loop, loop, loop, scalar, scalar, scalar, scalar) - -T(S4): (0, k, 3, i, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S5): (0, k, 4, j, 0, 0, 0) -loop types (loop, loop, loop, loop, loop, scalar, scalar) - -T(S6): (0, k, 4, j, 1, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S7): (0, k, 4, j, 2, i, 0) -loop types (loop, loop, loop, loop, loop, loop, loop) - -T(S8): (0, k, 4, j, 2, i, 1) -loop types (loop, loop, loop, loop, loop, loop, loop) - -[pluto] Number of statements: 8 -[pluto] Total number of loops: 17 -[pluto] Number of deps: 41 -[pluto] Maximum domain dimensionality: 3 -[pluto] Number of parameters: 2 -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 1 2 3 5 6 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 7: max stmt dim: 3 -[pluto] parameter context from domains -Set #1 -[2 dims; 3 constraints] -c_j-1 >= 0 -c_i-2 >= 0 -c_i-1 >= 0 - -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 3 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 0, h(S6) = 1, h(S7) = 1, h(S8) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 3; band depth: 0 -[pluto] compute permutability constraints: Dep 1 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 1; num_constraints: 12 -[pluto] compute permutability constraints: Dep 2 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 2; num_constraints: 18 -[pluto] compute permutability constraints: Dep 3 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 3; num_constraints: 12 -[pluto] compute permutability constraints: Dep 4 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 4; num_constraints: 12 -[pluto] compute permutability constraints: Dep 5 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 9 constraints - For dep 5; num_constraints: 15 -[pluto] compute permutability constraints: Dep 6 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 6; num_constraints: 12 -[pluto] compute permutability constraints: Dep 7 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 7; num_constraints: 5 -[pluto] compute permutability constraints: Dep 8 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 8; num_constraints: 18 -[pluto] compute permutability constraints: Dep 9 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 9; num_constraints: 12 -[pluto] compute permutability constraints: Dep 10 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 10; num_constraints: 13 -[pluto] compute permutability constraints: Dep 11 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 11; num_constraints: 9 -[pluto] compute permutability constraints: Dep 12 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 8 constraints - For dep 12; num_constraints: 14 -[pluto] compute permutability constraints: Dep 13 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 13; num_constraints: 5 -[pluto] compute permutability constraints: Dep 14 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 14; num_constraints: 18 -[pluto] compute permutability constraints: Dep 15 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 9 constraints - For dep 15; num_constraints: 20 -[pluto] compute permutability constraints: Dep 16 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 16; num_constraints: 12 -[pluto] compute permutability constraints: Dep 17 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 17; num_constraints: 10 -[pluto] compute permutability constraints: Dep 18 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 18; num_constraints: 12 -[pluto] compute permutability constraints: Dep 19 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 19; num_constraints: 12 -[pluto] compute permutability constraints: Dep 20 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 20; num_constraints: 12 -[pluto] compute permutability constraints: Dep 21 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_{) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_q) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_x) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_~) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_}) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_|) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_{) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_z) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_y) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_x) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_w) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_v) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_t) from 9 constraints - For dep 21; num_constraints: 20 -[pluto] compute permutability constraints: Dep 22 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 22; num_constraints: 12 -[pluto] compute permutability constraints: Dep 23 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 23; num_constraints: 5 -[pluto] compute permutability constraints: Dep 24 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 24; num_constraints: 13 -[pluto] compute permutability constraints: Dep 25 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 25; num_constraints: 9 -[pluto] compute permutability constraints: Dep 26 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 26; num_constraints: 16 -[pluto] compute permutability constraints: Dep 27 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 10 constraints - For dep 27; num_constraints: 16 -[pluto] compute permutability constraints: Dep 28 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 28; num_constraints: 16 -[pluto] compute permutability constraints: Dep 29 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 29; num_constraints: 5 -[pluto] compute permutability constraints: Dep 30 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 30; num_constraints: 12 -[pluto] compute permutability constraints: Dep 31 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_€) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_t) from 10 constraints - For dep 31; num_constraints: 10 -[pluto] compute permutability constraints: Dep 32 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_w) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_t) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_m) from 5 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_}) from 23 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_z) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 13 (c_p) from 8 constraints - For dep 32; num_constraints: 12 -[pluto] compute permutability constraints: Dep 33 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 33; num_constraints: 5 -[pluto] compute permutability constraints: Dep 34 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 34; num_constraints: 16 -[pluto] compute permutability constraints: Dep 35 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_m) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 9 constraints - For dep 35; num_constraints: 13 -[pluto] compute permutability constraints: Dep 36 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_m) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_o) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_m) from 6 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_p) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_p) from 7 constraints - For dep 36; num_constraints: 9 -[pluto] compute permutability constraints: Dep 37 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_y) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_x) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_w) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_v) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_u) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_t) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_s) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_~) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_}) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_t) from 10 constraints - For dep 37; num_constraints: 12 -[pluto] compute permutability constraints: Dep 38 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 8 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 10 constraints - For dep 38; num_constraints: 18 -[pluto] compute permutability constraints: Dep 39 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_p) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_o) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_n) from 8 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_m) from 7 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 9 constraints - For dep 39; num_constraints: 13 -[pluto] compute permutability constraints: Dep 40 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 11 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 7 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 40; num_constraints: 5 -[pluto] compute permutability constraints: Dep 41 -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_v) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_u) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_t) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_s) from 15 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_r) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_q) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_p) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_o) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_n) from 6 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_m) from 4 constraints -[farkas_lemma_affine] -[farkas_lemma_affine] eliminating multiplier 0 (c_|) from 22 constraints -[farkas_lemma_affine] eliminating multiplier 1 (c_{) from 21 constraints -[farkas_lemma_affine] eliminating multiplier 2 (c_z) from 20 constraints -[farkas_lemma_affine] eliminating multiplier 3 (c_y) from 19 constraints -[farkas_lemma_affine] eliminating multiplier 4 (c_x) from 18 constraints -[farkas_lemma_affine] eliminating multiplier 5 (c_w) from 17 constraints -[farkas_lemma_affine] eliminating multiplier 6 (c_v) from 16 constraints -[farkas_lemma_affine] eliminating multiplier 7 (c_u) from 14 constraints -[farkas_lemma_affine] eliminating multiplier 8 (c_t) from 13 constraints -[farkas_lemma_affine] eliminating multiplier 9 (c_s) from 12 constraints -[farkas_lemma_affine] eliminating multiplier 10 (c_r) from 10 constraints -[farkas_lemma_affine] eliminating multiplier 11 (c_q) from 9 constraints -[farkas_lemma_affine] eliminating multiplier 12 (c_p) from 7 constraints - For dep 41; num_constraints: 5 - After dep 1; num_constraints: 12 - After dep 2; num_constraints: 30 - After dep 3; num_constraints: 42 - After dep 5; num_constraints: 57 - After dep 6; num_constraints: 69 - After dep 7; num_constraints: 74 - After dep 8; num_constraints: 92 - After dep 10; num_constraints: 105 - After dep 11; num_constraints: 114 - After dep 12; num_constraints: 128 - After dep 13; num_constraints: 133 - After dep 14; num_constraints: 151 - After dep 15; num_constraints: 171 - After dep 16; num_constraints: 183 - After dep 17; num_constraints: 193 - After dep 18; num_constraints: 205 - After dep 19; num_constraints: 217 - After dep 20; num_constraints: 229 - After dep 21; num_constraints: 249 - After dep 22; num_constraints: 261 - After dep 23; num_constraints: 266 - After dep 24; num_constraints: 279 - After dep 25; num_constraints: 288 - After dep 26; num_constraints: 304 - After dep 27; num_constraints: 320 - After dep 28; num_constraints: 336 - After dep 29; num_constraints: 341 - After dep 30; num_constraints: 353 - After dep 31; num_constraints: 363 - After dep 32; num_constraints: 375 - After dep 33; num_constraints: 380 - After dep 34; num_constraints: 396 - After dep 35; num_constraints: 409 - After dep 36; num_constraints: 418 - After dep 38; num_constraints: 436 - After dep 39; num_constraints: 449 - After dep 40; num_constraints: 454 - After dep 41; num_constraints: 459 - After all dependences: num constraints: 171, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -Ortho constraints for S1; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_l >= 0 - -Set #1 -[35 dims; 1 constraints] -c_l-1 >= 0 - -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_p >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_p-c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -Ortho constraints for S3; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_t >= 0 - -Set #1 -[35 dims; 1 constraints] -c_t-1 >= 0 - -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_x >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] -c_x-c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_| >= 0 - -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_|+c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_€ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_€-c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_„ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_„-c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 3 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ˆ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_ˆ-c_‰-c_Š-1 >= 0 - -Added ortho constraints for S1 -Added ortho constraints for S2 -Added ortho constraints for S3 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 8 constraints] - +c_l -1 >= 0 - +c_p -c_q -1 >= 0 - +c_t -1 >= 0 - +c_x -c_y -1 >= 0 - +c_| +c_} -1 >= 0 - +c_€ -c_ -c_‚ -1 >= 0 - +c_„ -c_… -c_† -1 >= 0 - +c_ˆ -c_‰ -c_Š -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 222 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 222 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = k, h(S2) = k, h(S3) = k, h(S4) = k, h(S5) = k, h(S6) = k, h(S7) = k, h(S8) = k -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_… >= 0 - -Set #1 -[35 dims; 1 constraints] --c_† >= 0 - -Set #1 -[35 dims; 1 constraints] --c_…-c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‰-c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - -c_q -1 >= 0 - -c_y -1 >= 0 - +c_} -1 >= 0 - -c_ -c_‚ -1 >= 0 - -c_… -c_† -1 >= 0 - -c_‰ -c_Š -1 >= 0 - -[pluto] (Band 1) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 218 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 218 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 0; 1 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (0, k) -loop types (scalar, loop) - -T(S6): (1, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -T(S8): (1, k) -loop types (scalar, loop) - -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 1 - After dep 1; num_constraints: 12 - After dep 2; num_constraints: 30 - After dep 5; num_constraints: 45 - After dep 7; num_constraints: 50 - After dep 8; num_constraints: 68 - After dep 11; num_constraints: 77 - After dep 12; num_constraints: 91 - After dep 14; num_constraints: 109 - After dep 16; num_constraints: 121 - After dep 17; num_constraints: 131 - After dep 19; num_constraints: 143 - After dep 22; num_constraints: 155 - After dep 23; num_constraints: 160 - After dep 25; num_constraints: 169 - After dep 31; num_constraints: 179 - After dep 33; num_constraints: 184 - After dep 36; num_constraints: 193 - After dep 38; num_constraints: 211 - After dep 41; num_constraints: 216 - After all dependences: num constraints: 96, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_q >= 0 - -Set #1 -[35 dims; 1 constraints] --c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_y >= 0 - -Set #1 -[35 dims; 1 constraints] --c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] -c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…+c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰+c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - -c_q -1 >= 0 - -c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… +c_† -1 >= 0 - +c_‰ +c_Š -1 >= 0 - -[pluto] (Band 2) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 143 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 143 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 1; 0 hyperplane(s) found -T(S1): (1, k) -loop types (scalar, loop) - -T(S2): (1, k) -loop types (scalar, loop) - -T(S3): (1, k) -loop types (scalar, loop) - -T(S4): (1, k) -loop types (scalar, loop) - -T(S5): (0, k) -loop types (scalar, loop) - -T(S6): (1, k) -loop types (scalar, loop) - -T(S7): (1, k) -loop types (scalar, loop) - -T(S8): (1, k) -loop types (scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 0 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 6 7 - - - SCC 0: size: 1: max stmt dim: 2 - SCC 1: size: 1: max stmt dim: 1 - SCC 2: size: 1: max stmt dim: 2 - SCC 3: size: 1: max stmt dim: 1 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 3 - SCC 6: size: 2: max stmt dim: 3 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied - 7 dep(s) satisfied -h(S1) = 1, h(S2) = 2, h(S3) = 3, h(S4) = 4, h(S5) = 0, h(S6) = 5, h(S7) = 5, h(S8) = 5 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 2; band depth: 2 - After dep 7; num_constraints: 5 - After dep 11; num_constraints: 14 - After dep 12; num_constraints: 28 - After dep 16; num_constraints: 40 - After dep 17; num_constraints: 50 - After dep 22; num_constraints: 62 - After dep 23; num_constraints: 67 - After dep 25; num_constraints: 76 - After dep 31; num_constraints: 86 - After dep 33; num_constraints: 91 - After dep 36; num_constraints: 100 - After dep 41; num_constraints: 105 - After all dependences: num constraints: 51, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 2 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -Ortho constraints for S2; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_q >= 0 - -Set #1 -[35 dims; 1 constraints] -c_q-1 >= 0 - -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -Ortho constraints for S4; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_y >= 0 - -Set #1 -[35 dims; 1 constraints] -c_y-1 >= 0 - -[pluto] get_stmt_ortho constraints S5 -Ortho constraints for S5; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_} >= 0 - -Set #1 -[35 dims; 1 constraints] -c_}-1 >= 0 - -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_-c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_… >= 0 - -Set #1 -[35 dims; 1 constraints] -c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_…+c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 2 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‰ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‰+c_Š-1 >= 0 - -Added ortho constraints for S2 -Added ortho constraints for S4 -Added ortho constraints for S5 -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 6 constraints] - +c_q -1 >= 0 - +c_y -1 >= 0 - +c_} -1 >= 0 - +c_ -c_‚ -1 >= 0 - +c_… +c_† -1 >= 0 - +c_‰ +c_Š -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 98 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 98 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = i, h(S3) = 0, h(S4) = i, h(S5) = j, h(S6) = j, h(S7) = j, h(S8) = j -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - -c_‚ -1 >= 0 - +c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 3) Solving for hyperplane #2 -[pluto] pluto_prog_constraints_lexmin (35 variables, 92 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 92 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 2; 1 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S5): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S6): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 6 dep(s) satisfied -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 3 - After dep 7; num_constraints: 5 - After dep 12; num_constraints: 19 - After dep 17; num_constraints: 29 - After dep 23; num_constraints: 34 - After dep 31; num_constraints: 44 - After dep 41; num_constraints: 49 - After all dependences: num constraints: 33, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] --c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] --c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - -c_‚ -1 >= 0 - +c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 4) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 74 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 74 constraints) -[pluto] find_permutable_hyperplanes: No hyperplane found -[pluto] pluto_auto_transform: band level 3; 0 hyperplane(s) found -T(S1): (1, k, 1, 0) -loop types (scalar, loop, scalar, scalar) - -T(S2): (1, k, 2, i) -loop types (scalar, loop, scalar, loop) - -T(S3): (1, k, 3, 0) -loop types (scalar, loop, scalar, scalar) - -T(S4): (1, k, 4, i) -loop types (scalar, loop, scalar, loop) - -T(S5): (0, k, 0, j) -loop types (scalar, loop, scalar, loop) - -T(S6): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S7): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -T(S8): (1, k, 5, j) -loop types (scalar, loop, scalar, loop) - -[pluto] ddg_compute_scc -[pluto] dfs_for_scc: SCC 0: Stmt ids: 5 -[pluto] dfs_for_scc: SCC 1: Stmt ids: 6 -[pluto] dfs_for_scc: SCC 2: Stmt ids: 7 -[pluto] dfs_for_scc: SCC 3: Stmt ids: 4 -[pluto] dfs_for_scc: SCC 4: Stmt ids: 3 -[pluto] dfs_for_scc: SCC 5: Stmt ids: 2 -[pluto] dfs_for_scc: SCC 6: Stmt ids: 1 -[pluto] dfs_for_scc: SCC 7: Stmt ids: 0 - - - SCC 0: size: 1: max stmt dim: 3 - SCC 1: size: 1: max stmt dim: 3 - SCC 2: size: 1: max stmt dim: 3 - SCC 3: size: 1: max stmt dim: 2 - SCC 4: size: 1: max stmt dim: 2 - SCC 5: size: 1: max stmt dim: 1 - SCC 6: size: 1: max stmt dim: 2 - SCC 7: size: 1: max stmt dim: 1 -Cutting based on SCC dimensionalities -[pluto] dep_satisfaction_update (level 4) - 0 dep(s) satisfied -[pluto] Cutting between SCC id 0 and id 2 -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 0, h(S8) = 1 -[pluto] updating DDG -[pluto] Cutting between SCC id 0 and id 1 -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 12 satisfied - 1 dep(s) satisfied -h(S1) = 1, h(S2) = 1, h(S3) = 1, h(S4) = 1, h(S5) = 1, h(S6) = 0, h(S7) = 1, h(S8) = 1 -[pluto] updating DDG -[pluto] find_permutable_hyperplanes: max solution(s): 1; band depth: 4 - After dep 7; num_constraints: 5 - After dep 23; num_constraints: 10 - After dep 41; num_constraints: 15 - After all dependences: num constraints: 5, num variables: 35 -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -Adding lower bound 0 for transformation coefficients -non-zero cst: skipping stmt 0 -non-zero cst: skipping stmt 1 -non-zero cst: skipping stmt 2 -non-zero cst: skipping stmt 3 -non-zero cst: skipping stmt 4 -[pluto] get_linear_ind_constraints -[pluto] get_stmt_ortho constraints S1 -[pluto] get_stmt_ortho constraints S2 -[pluto] get_stmt_ortho constraints S3 -[pluto] get_stmt_ortho constraints S4 -[pluto] get_stmt_ortho constraints S5 -[pluto] get_stmt_ortho constraints S6 -Ortho constraints for S6; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_‚ >= 0 - -Set #1 -[35 dims; 1 constraints] -c_‚-1 >= 0 - -[pluto] get_stmt_ortho constraints S7 -Ortho constraints for S7; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_† >= 0 - -Set #1 -[35 dims; 1 constraints] -c_†-1 >= 0 - -[pluto] get_stmt_ortho constraints S8 -Ortho constraints for S8; 1 disjuncts -Set #1 -[35 dims; 1 constraints] -c_Š >= 0 - -Set #1 -[35 dims; 1 constraints] -c_Š-1 >= 0 - -Added ortho constraints for S6 -Added ortho constraints for S7 -Added ortho constraints for S8 -linear independence constraints -[35 dims; 3 constraints] - +c_‚ -1 >= 0 - +c_† -1 >= 0 - +c_Š -1 >= 0 - -[pluto] (Band 5) Solving for hyperplane #1 -[pluto] pluto_prog_constraints_lexmin (35 variables, 46 constraints) -[pluto] pluto_constraints_lexmin_isl (28 variables, 46 constraints) -[pluto] find_permutable_hyperplanes: found a hyperplane -h(S1) = 0, h(S2) = 0, h(S3) = 0, h(S4) = 0, h(S5) = 0, h(S6) = i, h(S7) = i, h(S8) = i -[pluto] pluto_auto_transform: band level 4; 1 hyperplane(s) found -T(S1): (1, k, 1, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S5): (0, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S7): (1, k, 5, j, 0, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S8): (1, k, 5, j, 1, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 3 dep(s) satisfied -[pluto] updating DDG -[pluto] Diamond tiling not possible/useful -[pluto] pluto_auto_transform: successful, done -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 12 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 3 dep(s) satisfied -[pluto] Affine transformations [ ] - -T(S1): (1, k, 1, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S5): (0, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S7): (1, k, 5, j, 0, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -T(S8): (1, k, 5, j, 1, 1, i) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop) - -[pluto_tile] Outermost tilable bands -(t2, t3, t4, ) with stmts {S5, } -[pluto_tile] Innermost tilable bands -(t2, t3, t4, ) with stmts {S5, } -[pluto] pluto_compute_dep_satisfaction -[pluto] pluto_dep_satisfaction_reset -[pluto] dep_satisfaction_update (level 0) -[pluto] dep_satisfaction_update: dep 4 satisfied -[pluto] dep_satisfaction_update: dep 9 satisfied -[pluto] dep_satisfaction_update: dep 37 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 1) -[pluto] dep_satisfaction_update: dep 3 satisfied -[pluto] dep_satisfaction_update: dep 6 satisfied -[pluto] dep_satisfaction_update: dep 10 satisfied -[pluto] dep_satisfaction_update: dep 13 satisfied -[pluto] dep_satisfaction_update: dep 15 satisfied -[pluto] dep_satisfaction_update: dep 18 satisfied -[pluto] dep_satisfaction_update: dep 20 satisfied -[pluto] dep_satisfaction_update: dep 21 satisfied -[pluto] dep_satisfaction_update: dep 24 satisfied -[pluto] dep_satisfaction_update: dep 26 satisfied -[pluto] dep_satisfaction_update: dep 27 satisfied -[pluto] dep_satisfaction_update: dep 28 satisfied -[pluto] dep_satisfaction_update: dep 29 satisfied -[pluto] dep_satisfaction_update: dep 30 satisfied -[pluto] dep_satisfaction_update: dep 32 satisfied -[pluto] dep_satisfaction_update: dep 34 satisfied -[pluto] dep_satisfaction_update: dep 35 satisfied -[pluto] dep_satisfaction_update: dep 39 satisfied -[pluto] dep_satisfaction_update: dep 40 satisfied - 19 dep(s) satisfied -[pluto] dep_satisfaction_update (level 2) -[pluto] dep_satisfaction_update: dep 1 satisfied -[pluto] dep_satisfaction_update: dep 2 satisfied -[pluto] dep_satisfaction_update: dep 5 satisfied -[pluto] dep_satisfaction_update: dep 8 satisfied -[pluto] dep_satisfaction_update: dep 14 satisfied -[pluto] dep_satisfaction_update: dep 19 satisfied -[pluto] dep_satisfaction_update: dep 38 satisfied - 7 dep(s) satisfied -[pluto] dep_satisfaction_update (level 3) -[pluto] dep_satisfaction_update: dep 11 satisfied -[pluto] dep_satisfaction_update: dep 16 satisfied -[pluto] dep_satisfaction_update: dep 22 satisfied -[pluto] dep_satisfaction_update: dep 25 satisfied -[pluto] dep_satisfaction_update: dep 33 satisfied -[pluto] dep_satisfaction_update: dep 36 satisfied - 6 dep(s) satisfied -[pluto] dep_satisfaction_update (level 4) -[pluto] dep_satisfaction_update: dep 17 satisfied -[pluto] dep_satisfaction_update: dep 31 satisfied - 2 dep(s) satisfied -[pluto] dep_satisfaction_update (level 5) -[pluto] dep_satisfaction_update: dep 12 satisfied - 1 dep(s) satisfied -[pluto] dep_satisfaction_update (level 6) -[pluto] dep_satisfaction_update: dep 7 satisfied -[pluto] dep_satisfaction_update: dep 23 satisfied -[pluto] dep_satisfaction_update: dep 41 satisfied - 3 dep(s) satisfied -[pluto] dep_satisfaction_update (level 7) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 8) - 0 dep(s) satisfied -[pluto] dep_satisfaction_update (level 9) - 0 dep(s) satisfied -[Pluto] After tiling: -T(S1): (1, k, 1, 0, 1, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S2): (1, k, 2, i, 1, 1, 0, 0, 0, 0) -loop types (scalat7 {loop with stmts: S5, } -t5 {loop with stmts: S5, } -t5 {loop with stmts: S4, } -t8 {loop with stmts: S7, } -t8 {loop with stmts: S8, } -r, loop, scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S3): (1, k, 3, 0, 1, 1, 0, 0, 0, 0) -loop types (scalar, loop, scalar, scalar, scalar, scalar, scalar, scalar, scalar, scalar) - -T(S4): (1, k, 4, i/32, i, 1, 1, 0, 0, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, scalar, scalar, scalar, scalar) - -T(S5): (0, k/32, 0, j/32, k, 0, j, 1, 1, 0) -loop types (scalar, loop, scalar, loop, loop, scalar, loop, scalar, scalar, scalar) - -T(S6): (1, k, 5, j, 0, 0, i, 0, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, scalar, scalar, scalar) - -T(S7): (1, k, 5, j, 0, 1, i/32, i, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, loop, scalar, scalar) - -T(S8): (1, k, 5, j, 1, 1, i/32, i, 0, 0) -loop types (scalar, loop, scalar, loop, scalar, scalar, loop, loop, scalar, scalar) - -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: 10 -[pluto-intra-tile-opt] Score for loop 1: -16 -Getting loop at depth 4 -[pluto-intra-tile-opt] Score for loop 0: -28 -Getting loop at depth 7 -[pluto-intra-tile-opt] Score for loop 0: -10 -Getting loop at depth 7 -[pluto-intra-tile-opt] Score for loop 0: -30 -[pluto] generating Cloog file... -[pluto] using statement-wise -fs/-ls options: S1(2,10), S2(2,10), S3(2,10), S4(5,10), S5(5,10), S6(2,10), S7(8,10), S8(8,10), -[pluto] cloog_input_read -[pluto] cloog_clast_create -[Pluto] Output written to gramschmidt.split3.pluto.c - -[pluto] Timing statistics -[pluto] SCoP extraction + dependence analysis time: 0.003197s -[pluto] Auto-transformation time: 0.115097s -[pluto] Total constraint solving time (LP/MIP/ILP) time: 0.008427s -[pluto] Code generation time: 0.027368s -[pluto] Other/Misc time: 0.094198s -[pluto] Total time: 0.239860s -[pluto] All times: 0.003197 0.115097 0.027368 0.094198 diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.splittable.mlir b/example/polybench/split-and-merge/gramschmidt/gramschmidt.splittable.mlir deleted file mode 100644 index 9f5acc22..00000000 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.splittable.mlir +++ /dev/null @@ -1,267 +0,0 @@ -#map = affine_map<(d0) -> (d0 + 1)> -module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { - llvm.mlir.global internal constant @str8("==END DUMP_ARRAYS==\0A\00") - llvm.mlir.global internal constant @str7("Q\00") - llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") - llvm.mlir.global internal constant @str5("%0.2lf \00") - llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("R\00") - llvm.mlir.global internal constant @str2("begin dump: %s\00") - llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") - llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> - llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 - llvm.mlir.global internal constant @str0("\00") - llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 - func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c2000_i32 = constant 2000 : i32 - %c2600_i32 = constant 2600 : i32 - %c42_i32 = constant 42 : i32 - %c0_i64 = constant 0 : i64 - %true = constant true - %false = constant false - %c0_i32 = constant 0 : i32 - %0 = memref.alloc() : memref<2000x2600xf64> - %1 = memref.alloc() : memref<2600x2600xf64> - %2 = memref.alloc() : memref<2000x2600xf64> - %3 = memref.cast %0 : memref<2000x2600xf64> to memref - %4 = memref.cast %1 : memref<2600x2600xf64> to memref - %5 = memref.cast %2 : memref<2000x2600xf64> to memref - call @init_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_start() : () -> () - call @kernel_gramschmidt(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - call @polybench_timer_stop() : () -> () - call @polybench_timer_print() : () -> () - %6 = cmpi sgt, %arg0, %c42_i32 : i32 - %7 = scf.if %6 -> (i1) { - %8 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %9 = llvm.load %8 : !llvm.ptr> - %10 = llvm.mlir.addressof @str0 : !llvm.ptr> - %11 = llvm.getelementptr %10[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %12 = llvm.call @strcmp(%9, %11) : (!llvm.ptr, !llvm.ptr) -> i32 - %13 = trunci %12 : i32 to i1 - %14 = xor %13, %true : i1 - scf.yield %14 : i1 - } else { - scf.yield %false : i1 - } - scf.if %7 { - call @print_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () - } - memref.dealloc %0 : memref<2000x2600xf64> - memref.dealloc %1 : memref<2600x2600xf64> - memref.dealloc %2 : memref<2000x2600xf64> - return %c0_i32 : i32 - } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c100_i32 = constant 100 : i32 - %c10_i32 = constant 10 : i32 - %cst = constant 0.000000e+00 : f64 - %c1_i32 = constant 1 : i32 - %c0_i32 = constant 0 : i32 - %c0 = constant 0 : index - %c1 = constant 1 : index - %0:2 = scf.while (%arg5 = %c0_i32) : (i32) -> (i32, i32) { - %4 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%4) %c0_i32, %arg5 : i32, i32 - } do { - ^bb0(%arg5: i32, %arg6: i32): // no predecessors - %4 = index_cast %arg6 : i32 to index - %5 = scf.while (%arg7 = %c0_i32) : (i32) -> i32 { - %7 = cmpi slt, %arg7, %arg1 : i32 - scf.condition(%7) %arg7 : i32 - } do { - ^bb0(%arg7: i32): // no predecessors - %7 = index_cast %arg7 : i32 to index - %8 = muli %arg6, %arg7 : i32 - %9 = remi_signed %8, %arg0 : i32 - %10 = sitofp %9 : i32 to f64 - %11 = sitofp %arg0 : i32 to f64 - %12 = divf %10, %11 : f64 - %13 = sitofp %c100_i32 : i32 to f64 - %14 = mulf %12, %13 : f64 - %15 = sitofp %c10_i32 : i32 to f64 - %16 = addf %14, %15 : f64 - memref.store %16, %arg2[%4, %7] : memref - memref.store %cst, %arg4[%4, %7] : memref - %17 = addi %arg7, %c1_i32 : i32 - scf.yield %17 : i32 - } - %6 = addi %arg6, %c1_i32 : i32 - scf.yield %6 : i32 - } - %1 = index_cast %arg1 : i32 to index - %2 = index_cast %0#0 : i32 to index - %3 = scf.for %arg5 = %2 to %1 step %c1 iter_args(%arg6 = %0#0) -> (i32) { - %4 = index_cast %arg6 : i32 to index - scf.for %arg7 = %c0 to %1 step %c1 { - memref.store %cst, %arg3[%4, %arg7] : memref - } - %5 = addi %arg6, %c1_i32 : i32 - scf.yield %5 : i32 - } - return - } - func private @polybench_timer_start() - func private @kernel_gramschmidt(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %cst = constant 0.000000e+00 : f64 - %0 = index_cast %arg0 : i32 to index - %1 = memref.alloca() : memref<1xf64> - %2 = index_cast %arg1 : i32 to index - affine.for %arg5 = 0 to %2 { - affine.store %cst, %1[0] : memref<1xf64> - affine.for %arg6 = 0 to %0 { - %5 = affine.load %arg2[%arg6, %arg5] : memref - %6 = mulf %5, %5 {scop.splittable = 0 : index} : f64 - %7 = affine.load %1[0] : memref<1xf64> - %8 = addf %7, %6 : f64 - affine.store %8, %1[0] : memref<1xf64> - } - %3 = affine.load %1[0] : memref<1xf64> - %4 = math.sqrt %3 : f64 - affine.store %4, %arg3[%arg5, %arg5] : memref - affine.for %arg6 = 0 to %0 { - %5 = affine.load %arg2[%arg6, %arg5] : memref - %6 = divf %5, %4 : f64 - affine.store %6, %arg4[%arg6, %arg5] : memref - } - affine.for %arg6 = #map(%arg5) to %2 { - affine.store %cst, %arg3[%arg5, %arg6] : memref - affine.for %arg7 = 0 to %0 { - %5 = affine.load %arg4[%arg7, %arg5] : memref - %6 = affine.load %arg2[%arg7, %arg6] : memref - %7 = mulf %5, %6 {scop.splittable = 1 : index} : f64 - %8 = affine.load %arg3[%arg5, %arg6] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg3[%arg5, %arg6] : memref - } - affine.for %arg7 = 0 to %0 { - %5 = affine.load %arg2[%arg7, %arg6] : memref - %6 = affine.load %arg4[%arg7, %arg5] : memref - %7 = affine.load %arg3[%arg5, %arg6] : memref - %8 = mulf %6, %7 {scop.splittable = 2 : index} : f64 - %9 = subf %5, %8 : f64 - affine.store %9, %arg2[%arg7, %arg6] : memref - } - } - } - return - } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { - %c0_i64 = constant 0 : i64 - %c0_i32 = constant 0 : i32 - %c20_i32 = constant 20 : i32 - %c1_i32 = constant 1 : i32 - %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %2 = llvm.mlir.addressof @str1 : !llvm.ptr> - %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %7 = llvm.mlir.addressof @str2 : !llvm.ptr> - %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg1 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg3[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %15 = llvm.mlir.addressof @str6 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %22 = llvm.mlir.addressof @str2 : !llvm.ptr> - %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %24 = llvm.mlir.addressof @str7 : !llvm.ptr> - %25 = llvm.getelementptr %24[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %26 = llvm.call @fprintf(%21, %23, %25) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %27 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %40 = cmpi slt, %arg5, %arg0 : i32 - scf.condition(%40) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %40 = index_cast %arg5 : i32 to index - %41 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { - %43 = cmpi slt, %arg6, %arg1 : i32 - scf.condition(%43) %arg6 : i32 - } do { - ^bb0(%arg6: i32): // no predecessors - %43 = index_cast %arg6 : i32 to index - %44 = muli %arg5, %arg1 : i32 - %45 = addi %44, %arg6 : i32 - %46 = remi_signed %45, %c20_i32 : i32 - %47 = cmpi eq, %46, %c0_i32 : i32 - scf.if %47 { - %55 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %56 = llvm.load %55 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %57 = llvm.mlir.addressof @str4 : !llvm.ptr> - %58 = llvm.getelementptr %57[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %59 = llvm.call @fprintf(%56, %58) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - } - %48 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %49 = llvm.load %48 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %50 = llvm.mlir.addressof @str5 : !llvm.ptr> - %51 = llvm.getelementptr %50[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %52 = memref.load %arg4[%40, %43] : memref - %53 = llvm.call @fprintf(%49, %51, %52) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %54 = addi %arg6, %c1_i32 : i32 - scf.yield %54 : i32 - } - %42 = addi %arg5, %c1_i32 : i32 - scf.yield %42 : i32 - } - %28 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %29 = llvm.load %28 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %30 = llvm.mlir.addressof @str6 : !llvm.ptr> - %31 = llvm.getelementptr %30[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %32 = llvm.mlir.addressof @str7 : !llvm.ptr> - %33 = llvm.getelementptr %32[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %34 = llvm.call @fprintf(%29, %31, %33) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %35 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %36 = llvm.load %35 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> - %37 = llvm.mlir.addressof @str8 : !llvm.ptr> - %38 = llvm.getelementptr %37[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %39 = llvm.call @fprintf(%36, %38) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 - return - } -} - diff --git a/example/polybench/split-and-merge/num_splittable.txt b/example/polybench/split-and-merge/num_splittable.txt deleted file mode 100644 index 7cc936ac..00000000 --- a/example/polybench/split-and-merge/num_splittable.txt +++ /dev/null @@ -1,30 +0,0 @@ -deriche.mlir,26 -covariance.mlir,2 -floyd-warshall.mlir,2 -gramschmidt.mlir,3 -cholesky.mlir,2 -nussinov.mlir,10 -atax.mlir,2 -fdtd-2d.mlir,8 -gesummv.mlir,4 -doitgen.mlir,1 -correlation.mlir,9 -trmm.mlir,1 -2mm.mlir,3 -syrk.mlir,2 -lu.mlir,2 -adi.mlir,32 -mvt.mlir,2 -jacobi-2d.mlir,8 -symm.mlir,8 -seidel-2d.mlir,8 -trisolv.mlir,1 -ludcmp.mlir,4 -3mm.mlir,3 -gemver.mlir,7 -bicg.mlir,2 -jacobi-1d.mlir,4 -syr2k.mlir,5 -gemm.mlir,2 -heat-3d.mlir,24 -durbin.mlir,7 diff --git a/example/polybench/split-and-merge/report-timing.py b/example/polybench/split-and-merge/report-timing.py new file mode 100755 index 00000000..78918b28 --- /dev/null +++ b/example/polybench/split-and-merge/report-timing.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +# Find all the log files under this directory and look for pass timing. +import os +import argparse +import glob + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('work_dir', type=str) + args = parser.parse_args() + + for fp in glob.glob(os.path.join(args.work_dir, '**', '*.log')): + + with open(fp, 'r') as f: + lines = [line.strip() for line in f.readlines()] + has_timing_report = any(('timing report' in line) for line in lines) + + if has_timing_report: + pos = next(i for i, line in enumerate(lines) if ('timing report' in line)) + line = next(x for x in lines[pos:] if 'PlutoTransformPass' in x) + + total_time = float(lines[pos+2].split()[-2]) + pluto_pass_time = float(line.split()[-4]) + pluto_time = float(next(x for x in lines if 'Pluto schedule elapsed' in x).split()[-1][:-1]) + name = '.'.join(os.path.basename(fp).split('.')[:4]) + + print('{name},{total_time},{pluto_pass_time},{pluto_time:.4f}'.format(name=name, total_time=total_time, pluto_pass_time=pluto_pass_time, pluto_time=pluto_time)) + +if __name__ == '__main__': + main() diff --git a/example/polybench/split-and-merge/trmm/trmm.c b/example/polybench/split-and-merge/trmm/trmm.c new file mode 100644 index 00000000..8651a389 --- /dev/null +++ b/example/polybench/split-and-merge/trmm/trmm.c @@ -0,0 +1,164 @@ +// TODO: mlir-clang %s %stdinclude | FileCheck %s +// RUN: clang %s -O3 %stdinclude %polyverify -o %s.exec1 && %s.exec1 &> %s.out1 +// RUN: mlir-clang %s %polyverify %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm &> %s.out2 +// RUN: rm -f %s.exec1 %s.execm +// RUN: diff %s.out1 %s.out2 +// RUN: rm -f %s.out1 %s.out2 +// RUN: mlir-clang %s %polyexec %stdinclude -emit-llvm | clang -x ir - -O3 -o %s.execm && %s.execm > %s.mlir.time; cat %s.mlir.time | FileCheck %s --check-prefix EXEC +// RUN: clang %s -O3 %polyexec %stdinclude -o %s.exec2 && %s.exec2 > %s.clang.time; cat %s.clang.time | FileCheck %s --check-prefix EXEC +// RUN: rm -f %s.exec2 %s.execm + +/** + * This version is stamped on May 10, 2016 + * + * Contact: + * Louis-Noel Pouchet + * Tomofumi Yuki + * + * Web address: http://polybench.sourceforge.net + */ +/* trmm.c: this file is part of PolyBench/C */ + +#include +#include +#include +#include + +/* Include polybench common header. */ +#include + +/* Include benchmark-specific header. */ +#include "trmm.h" + + +/* Array initialization. */ +static +void init_array(int m, int n, + DATA_TYPE *alpha, + DATA_TYPE POLYBENCH_2D(A,M,M,m,m), + DATA_TYPE POLYBENCH_2D(B,M,N,m,n)) +{ + int i, j; + + *alpha = 1.5; + for (i = 0; i < m; i++) { + for (j = 0; j < i; j++) { + A[i][j] = (DATA_TYPE)((i+j) % m)/m; + } + A[i][i] = 1.0; + for (j = 0; j < n; j++) { + B[i][j] = (DATA_TYPE)((n+(i-j)) % n)/n; + } + } + +} + + +/* DCE code. Must scan the entire live-out data. + Can be used also to check the correctness of the output. */ +static +void print_array(int m, int n, + DATA_TYPE POLYBENCH_2D(B,M,N,m,n)) +{ + int i, j; + + POLYBENCH_DUMP_START; + POLYBENCH_DUMP_BEGIN("B"); + for (i = 0; i < m; i++) + for (j = 0; j < n; j++) { + if ((i * m + j) % 20 == 0) fprintf (POLYBENCH_DUMP_TARGET, "\n"); + fprintf (POLYBENCH_DUMP_TARGET, DATA_PRINTF_MODIFIER, B[i][j]); + } + POLYBENCH_DUMP_END("B"); + POLYBENCH_DUMP_FINISH; +} + + +/* Main computational kernel. The whole function will be timed, + including the call and return. */ +static +void kernel_trmm(int m, int n, + DATA_TYPE alpha, + DATA_TYPE POLYBENCH_2D(A,M,M,m,m), + DATA_TYPE POLYBENCH_2D(B,M,N,m,n)) +{ + int i, j, k; + +//BLAS parameters +//SIDE = 'L' +//UPLO = 'L' +//TRANSA = 'T' +//DIAG = 'U' +// => Form B := alpha*A**T*B. +// A is MxM +// B is MxN +#pragma scop + for (i = 0; i < _PB_M; i++) + for (j = 0; j < _PB_N; j++) { + for (k = i+1; k < _PB_M; k++) + B[i][j] += A[k][i] * B[k][j]; + B[i][j] = alpha * B[i][j]; + } +#pragma endscop + +} + + +int main(int argc, char** argv) +{ + /* Retrieve problem size. */ + int m = M; + int n = N; + + /* Variable declaration/allocation. */ + DATA_TYPE alpha; + POLYBENCH_2D_ARRAY_DECL(A,DATA_TYPE,M,M,m,m); + POLYBENCH_2D_ARRAY_DECL(B,DATA_TYPE,M,N,m,n); + + /* Initialize array(s). */ + init_array (m, n, &alpha, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B)); + + /* Start timer. */ + polybench_start_instruments; + + /* Run kernel. */ + kernel_trmm (m, n, alpha, POLYBENCH_ARRAY(A), POLYBENCH_ARRAY(B)); + + /* Stop and print timer. */ + polybench_stop_instruments; + polybench_print_instruments; + + /* Prevent dead-code elimination. All live-out data must be printed + by the function call in argument. */ + polybench_prevent_dce(print_array(m, n, POLYBENCH_ARRAY(B))); + + /* Be clean. */ + POLYBENCH_FREE_ARRAY(A); + POLYBENCH_FREE_ARRAY(B); + + return 0; +} + +// CHECK: #map = affine_map<(d0) -> (d0 + 1)> +// CHECK: func @kernel_trmm(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref<1000x1000xf64>, %arg4: memref<1000x1200xf64>) { +// CHECK-NEXT: %0 = index_cast %arg0 : i32 to index +// CHECK-NEXT: %1 = index_cast %arg1 : i32 to index +// CHECK-NEXT: affine.for %arg5 = 0 to %0 { +// CHECK-NEXT: affine.for %arg6 = 0 to %1 { +// CHECK-NEXT: %2 = affine.load %arg4[%arg5, %arg6] : memref<1000x1200xf64> +// CHECK-NEXT: affine.for %arg7 = #map(%arg5) to %0 { +// CHECK-NEXT: %5 = affine.load %arg3[%arg7, %arg5] : memref<1000x1000xf64> +// CHECK-NEXT: %6 = affine.load %arg4[%arg7, %arg6] : memref<1000x1200xf64> +// CHECK-NEXT: %7 = mulf %5, %6 : f64 +// CHECK-NEXT: %8 = addf %2, %7 : f64 +// CHECK-NEXT: affine.store %8, %arg4[%arg5, %arg6] : memref<1000x1200xf64> +// CHECK-NEXT: } +// CHECK-NEXT: %3 = affine.load %arg4[%arg5, %arg6] : memref<1000x1200xf64> +// CHECK-NEXT: %4 = mulf %arg2, %3 : f64 +// CHECK-NEXT: affine.store %4, %arg4[%arg5, %arg6] : memref<1000x1200xf64> +// CHECK-NEXT: } +// CHECK-NEXT: } +// CHECK-NEXT: return +// CHECK-NEXT: } + +// EXEC: {{[0-9]\.[0-9]+}} diff --git a/example/polybench/split-and-merge/gramschmidt/gramschmidt.h b/example/polybench/split-and-merge/trmm/trmm.h similarity index 95% rename from example/polybench/split-and-merge/gramschmidt/gramschmidt.h rename to example/polybench/split-and-merge/trmm/trmm.h index e20ddb2d..b1eaea1e 100644 --- a/example/polybench/split-and-merge/gramschmidt/gramschmidt.h +++ b/example/polybench/split-and-merge/trmm/trmm.h @@ -7,8 +7,8 @@ * * Web address: http://polybench.sourceforge.net */ -#ifndef _GRAMSCHMIDT_H -# define _GRAMSCHMIDT_H +#ifndef _TRMM_H +# define _TRMM_H /* Default to LARGE_DATASET. */ # if !defined(MINI_DATASET) && !defined(SMALL_DATASET) && !defined(MEDIUM_DATASET) && !defined(LARGE_DATASET) && !defined(EXTRALARGE_DATASET) @@ -77,4 +77,4 @@ # define POW_FUN(x,y) pow(x,y) # endif -#endif /* !_GRAMSCHMIDT_H */ +#endif /* !_TRMM_H */ diff --git a/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.par.log b/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.par.log new file mode 100644 index 00000000..6a7b1906 --- /dev/null +++ b/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.par.log @@ -0,0 +1,328 @@ +t6 {loop with stmts: S1, S2, } +t5 {loop with stmts: S1, S2, } +t4 {loop with stmts: S1, S2, } +Pluto schedule elapsed time: 5.451702e-02s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +3 + +# =============================================== Statement 1 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 -1 ## -i1+P1-1 >= 0 + 1 0 0 -1 0 1 0 0 -1 ## -i0+i2-1 >= 0 + 1 0 0 0 0 -1 1 0 -1 ## -i2+P0-1 >= 0 + 1 -32 0 1 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 -1 0 0 31 ## 32*fk1-i2+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 ## c2 == fk0+fk1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 + +# ---------------------------------------------- 1.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 -1 0 1 0 0 -1 ## [1] == -i0+i2-1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S0(i2, i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 -1 ## -i1+P1-1 >= 0 + 1 0 0 -1 0 1 0 0 -1 ## -i0+i2-1 >= 0 + 1 0 0 0 0 -1 1 0 -1 ## -i2+P0-1 >= 0 + 1 -32 0 1 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 -1 0 0 31 ## 32*fk1-i2+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 ## c2 == fk0+fk1 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c7 == 2 + +# ---------------------------------------------- 2.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 -1 0 1 0 0 -1 ## [1] == -i0+i2-1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S1(i0, i1, i2) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 3.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S2(i0, i1) + + +# =============================================== Extensions + +# Number of arrays +3 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 + + + +kernel_trmm + + +t1 t2 t3 t4 t5 t6 t7 + + + +# Number of loops +2 +# =========================================== +# Loop number 1 +# Iterator name +t3 +# Number of stmts +2 +# Statement identifiers +1 +2 +# Private variables +t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +3 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 + + + + +[CLooG] INFO: 1 domains have been blocked. +[CLooG] INFO: 2 dimensions (over 7) are scalar. +if ((P0 >= 1) && (P1 >= 1)) { + for (t2=0;t2<=floord(P0-2,16);t2++) { + lbp=ceild(t2,2); + ubp=min(floord(P0-1,32),t2); +#pragma omp parallel for private(lbv,ubv,t4,t5,t6,t7) + for (t3=lbp;t3<=ubp;t3++) { + for (t4=32*t2-32*t3;t4<=min(min(P0-2,32*t3+30),32*t2-32*t3+31);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + for (t6=0;t6<=P1-1;t6++) { + S0(t5, t4, t6) + S1(t4, t6, t5) + } + } + } + } + } + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.0914 seconds + + ---Wall Time--- --- Name --- + 0.0002 ( 0.2%) {anonymous}::AnnotateHeuristicPass + 0.0002 ( 0.3%) {anonymous}::ScopStmtSplitPass + 0.0001 ( 0.1%) {anonymous}::UnifyScratchpadPass + 0.0005 ( 0.6%) Canonicalizer + 0.0002 ( 0.3%) 'func' Pipeline + 0.0001 ( 0.1%) {anonymous}::RegToMemPass + 0.0001 ( 0.1%) {anonymous}::InsertRedundantLoadPass + 0.0002 ( 0.2%) {anonymous}::ExtractScopStmtPass + 0.0872 ( 95.4%) {anonymous}::PlutoTransformPass + 0.0006 ( 0.6%) Canonicalizer + 0.0014 ( 1.6%) Inliner + 0.0010 ( 1.1%) 'func' Pipeline + 0.0010 ( 1.1%) Canonicalizer + 0.0000 ( 0.0%) (A) CallGraph + 0.0006 ( 0.7%) Canonicalizer + 0.0914 (100.0%) Total diff --git a/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.par.mlir b/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.par.mlir new file mode 100644 index 00000000..3960f266 --- /dev/null +++ b/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.par.mlir @@ -0,0 +1,244 @@ +#map0 = affine_map<(d0) -> (d0 ceildiv 2)> +#map1 = affine_map<(d0) -> (63, d0 + 1)> +#map2 = affine_map<(d0, d1) -> (d0 * 32 - d1 * 32)> +#map3 = affine_map<(d0, d1) -> (1999, d0 * 32 + 31, d1 * 32 - d0 * 32 + 32)> +#map4 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> +#map5 = affine_map<(d0) -> (2000, d0 * 32 + 32)> +#map6 = affine_map<(d0) -> (d0 * 32)> +#map7 = affine_map<(d0) -> (2600, d0 * 32 + 32)> +#map8 = affine_map<()[s0] -> ((s0 - 2) floordiv 16 + 1)> +#map9 = affine_map<(d0)[s0] -> ((s0 - 1) floordiv 32 + 1, d0 + 1)> +#map10 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 31, d1 * 32 - d0 * 32 + 32)> +#map11 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#map12 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#set = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> +module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { + llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") + llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") + llvm.mlir.global internal constant @str5("%0.2lf \00") + llvm.mlir.global internal constant @str4("\0A\00") + llvm.mlir.global internal constant @str3("B\00") + llvm.mlir.global internal constant @str2("begin dump: %s\00") + llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") + llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> + llvm.func @fprintf(!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, ...) -> i32 + llvm.mlir.global internal constant @str0("\00") + llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 + func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { + %c2000_i32 = constant 2000 : i32 + %c2600_i32 = constant 2600 : i32 + %c42_i32 = constant 42 : i32 + %c0_i64 = constant 0 : i64 + %true = constant true + %false = constant false + %cst = constant 1.500000e+00 : f64 + %c0_i32 = constant 0 : i32 + %cst_0 = constant 1.000000e+00 : f64 + %c1_i32 = constant 1 : i32 + %0 = memref.alloca() : memref<1999xf64> + %1 = memref.alloca() : memref<1xf64> + %2 = memref.alloc() : memref<2000x2000xf64> + %3 = memref.alloc() : memref<2000x2600xf64> + %4 = memref.cast %3 : memref<2000x2600xf64> to memref + affine.store %cst, %1[0] : memref<1xf64> + %5 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { + %9 = cmpi slt, %arg2, %c2000_i32 : i32 + scf.condition(%9) %arg2 : i32 + } do { + ^bb0(%arg2: i32): // no predecessors + %9 = index_cast %arg2 : i32 to index + %10 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %13 = cmpi slt, %arg3, %arg2 : i32 + scf.condition(%13) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %13 = index_cast %arg3 : i32 to index + %14 = addi %arg2, %arg3 : i32 + %15 = remi_signed %14, %c2000_i32 : i32 + %16 = sitofp %15 : i32 to f64 + %17 = sitofp %c2000_i32 : i32 to f64 + %18 = divf %16, %17 : f64 + memref.store %18, %2[%9, %13] : memref<2000x2000xf64> + %19 = addi %arg3, %c1_i32 : i32 + scf.yield %19 : i32 + } + memref.store %cst_0, %2[%9, %9] : memref<2000x2000xf64> + %11 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %13 = cmpi slt, %arg3, %c2600_i32 : i32 + scf.condition(%13) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %13 = index_cast %arg3 : i32 to index + %14 = subi %arg2, %arg3 : i32 + %15 = addi %14, %c2600_i32 : i32 + %16 = remi_signed %15, %c2600_i32 : i32 + %17 = sitofp %16 : i32 to f64 + %18 = sitofp %c2600_i32 : i32 to f64 + %19 = divf %17, %18 : f64 + memref.store %19, %3[%9, %13] : memref<2000x2600xf64> + %20 = addi %arg3, %c1_i32 : i32 + scf.yield %20 : i32 + } + %12 = addi %arg2, %c1_i32 : i32 + scf.yield %12 : i32 + } + call @polybench_timer_start() : () -> () + %6 = affine.load %1[0] : memref<1xf64> + affine.for %arg2 = 0 to 125 { + affine.for %arg3 = #map0(%arg2) to min #map1(%arg2) { + affine.for %arg4 = #map2(%arg2, %arg3) to min #map3(%arg3, %arg2) { + affine.for %arg5 = max #map4(%arg3, %arg4) to min #map5(%arg3) { + affine.for %arg6 = 0 to 2600 { + %9 = affine.load %2[%arg5, %arg4] : memref<2000x2000xf64> + %10 = affine.load %3[%arg5, %arg6] : memref<2000x2600xf64> + %11 = mulf %9, %10 {scop.splittable = 0 : index} : f64 + affine.store %11, %0[%arg5 - %arg4 - 1] : memref<1999xf64> + %12 = affine.load %3[%arg4, %arg6] : memref<2000x2600xf64> + %13 = affine.load %0[%arg5 - %arg4 - 1] : memref<1999xf64> + %14 = addf %12, %13 : f64 + affine.store %14, %3[%arg4, %arg6] : memref<2000x2600xf64> + } + } + } + } {scop.parallelizable} + } + affine.for %arg2 = 0 to 63 { + affine.for %arg3 = 0 to 82 { + affine.for %arg4 = #map6(%arg2) to min #map5(%arg2) { + affine.for %arg5 = #map6(%arg3) to min #map7(%arg3) { + %9 = affine.load %3[%arg4, %arg5] : memref<2000x2600xf64> + %10 = mulf %6, %9 : f64 + affine.store %10, %3[%arg4, %arg5] : memref<2000x2600xf64> + } + } + } + } {scop.parallelizable} + call @polybench_timer_stop() : () -> () + call @polybench_timer_print() : () -> () + %7 = cmpi sgt, %arg0, %c42_i32 : i32 + %8 = scf.if %7 -> (i1) { + %9 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> + %10 = llvm.load %9 : !llvm.ptr> + %11 = llvm.mlir.addressof @str0 : !llvm.ptr> + %12 = llvm.getelementptr %11[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %13 = llvm.call @strcmp(%10, %12) : (!llvm.ptr, !llvm.ptr) -> i32 + %14 = trunci %13 : i32 to i1 + %15 = xor %14, %true : i1 + scf.yield %15 : i1 + } else { + scf.yield %false : i1 + } + scf.if %8 { + call @print_array(%c2000_i32, %c2600_i32, %4) : (i32, i32, memref) -> () + } + memref.dealloc %2 : memref<2000x2000xf64> + memref.dealloc %3 : memref<2000x2600xf64> + return %c0_i32 : i32 + } + func private @polybench_timer_start() + func private @polybench_timer_stop() + func private @polybench_timer_print() + func @kernel_trmm(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.if #set()[%0, %1] { + affine.for %arg6 = 0 to #map8()[%0] { + affine.for %arg7 = #map0(%arg6) to min #map9(%arg6)[%0] { + affine.for %arg8 = #map2(%arg6, %arg7) to min #map10(%arg7, %arg6)[%0] { + affine.for %arg9 = max #map4(%arg7, %arg8) to min #map11(%arg7)[%0] { + affine.for %arg10 = 0 to %1 { + %2 = affine.load %arg3[%arg9, %arg8] : memref + %3 = affine.load %arg4[%arg9, %arg10] : memref + %4 = mulf %2, %3 {scop.splittable = 0 : index} : f64 + affine.store %4, %arg5[%arg9 - %arg8 - 1] : memref + %5 = affine.load %arg4[%arg8, %arg10] : memref + %6 = affine.load %arg5[%arg9 - %arg8 - 1] : memref + %7 = addf %5, %6 : f64 + affine.store %7, %arg4[%arg8, %arg10] : memref + } + } + } + } {scop.parallelizable} + } + affine.for %arg6 = 0 to #map12()[%0] { + affine.for %arg7 = 0 to #map12()[%1] { + affine.for %arg8 = #map6(%arg6) to min #map11(%arg6)[%0] { + affine.for %arg9 = #map6(%arg7) to min #map11(%arg7)[%1] { + %2 = affine.load %arg4[%arg8, %arg9] : memref + %3 = mulf %arg2, %2 : f64 + affine.store %3, %arg4[%arg8, %arg9] : memref + } + } + } + } {scop.parallelizable} + } + return + } + func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { + %c0_i64 = constant 0 : i64 + %c0_i32 = constant 0 : i32 + %c20_i32 = constant 20 : i32 + %c1_i32 = constant 1 : i32 + %0 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %1 = llvm.load %0 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %2 = llvm.mlir.addressof @str1 : !llvm.ptr> + %3 = llvm.getelementptr %2[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %4 = llvm.call @fprintf(%1, %3) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 + %5 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %7 = llvm.mlir.addressof @str2 : !llvm.ptr> + %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %9 = llvm.mlir.addressof @str3 : !llvm.ptr> + %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 + %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %25 = cmpi slt, %arg3, %arg0 : i32 + scf.condition(%25) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %25 = index_cast %arg3 : i32 to index + %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { + %28 = cmpi slt, %arg4, %arg1 : i32 + scf.condition(%28) %arg4 : i32 + } do { + ^bb0(%arg4: i32): // no predecessors + %28 = index_cast %arg4 : i32 to index + %29 = muli %arg3, %arg0 : i32 + %30 = addi %29, %arg4 : i32 + %31 = remi_signed %30, %c20_i32 : i32 + %32 = cmpi eq, %31, %c0_i32 : i32 + scf.if %32 { + %40 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %41 = llvm.load %40 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %42 = llvm.mlir.addressof @str4 : !llvm.ptr> + %43 = llvm.getelementptr %42[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %44 = llvm.call @fprintf(%41, %43) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 + } + %33 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %35 = llvm.mlir.addressof @str5 : !llvm.ptr> + %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %37 = memref.load %arg2[%25, %28] : memref + %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 + %39 = addi %arg4, %c1_i32 : i32 + scf.yield %39 : i32 + } + %27 = addi %arg3, %c1_i32 : i32 + scf.yield %27 : i32 + } + %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %15 = llvm.mlir.addressof @str6 : !llvm.ptr> + %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %17 = llvm.mlir.addressof @str3 : !llvm.ptr> + %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 + %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> + %22 = llvm.mlir.addressof @str7 : !llvm.ptr> + %23 = llvm.getelementptr %22[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %24 = llvm.call @fprintf(%21, %23) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr) -> i32 + return + } +} + diff --git a/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.seq.log b/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.seq.log new file mode 100644 index 00000000..d84c0b55 --- /dev/null +++ b/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.seq.log @@ -0,0 +1,292 @@ +t6 {loop with stmts: S1, S2, } +t5 {loop with stmts: S1, S2, } +t4 {loop with stmts: S1, S2, } +Pluto schedule elapsed time: 5.429944e-02s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +3 + +# =============================================== Statement 1 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 -1 ## -i1+P1-1 >= 0 + 1 0 0 -1 0 1 0 0 -1 ## -i0+i2-1 >= 0 + 1 0 0 0 0 -1 1 0 -1 ## -i2+P0-1 >= 0 + 1 -32 0 1 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 -1 0 0 31 ## 32*fk1-i2+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 ## c7 == 1 + +# ---------------------------------------------- 1.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 -1 0 1 0 0 -1 ## [1] == -i0+i2-1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S0(i2, i0, i1) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +5 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +10 9 5 0 0 2 +# e/i| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 0 1 -1 ## -i1+P1-1 >= 0 + 1 0 0 -1 0 1 0 0 -1 ## -i0+i2-1 >= 0 + 1 0 0 0 0 -1 1 0 -1 ## -i2+P0-1 >= 0 + 1 -32 0 1 0 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 0 1 0 0 0 ## -32*fk1+i2 >= 0 + 1 0 32 0 0 -1 0 0 31 ## 32*fk1-i2+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 16 7 5 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c5 == i2 + 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c6 == i1 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 2 ## c7 == 2 + +# ---------------------------------------------- 2.3 Access +READ +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +2 11 2 5 0 2 +# e/i| Arr [1]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 -1 0 1 0 0 -1 ## [1] == -i0+i2-1 + 0 -1 0 0 0 0 0 0 0 0 3 ## Arr == A3 + +WRITE +3 12 3 5 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +5 +# List of original iterators +fk0 fk1 i0 i1 i2 +# Statement body expression +S1(i0, i1, i2) + + +# =============================================== Statement 3 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 3.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 3.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 3.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +# ---------------------------------------------- 3.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S2(i0, i1) + + +# =============================================== Extensions + +# Number of arrays +3 +# Mapping array-identifiers/array-names +1 A1 +2 A2 +3 A3 + + + +kernel_trmm + + +t1 t2 t3 t4 t5 t6 t7 + + + + +[CLooG] INFO: 1 domains have been blocked. +[CLooG] INFO: 2 dimensions (over 7) are scalar. +if ((P0 >= 1) && (P1 >= 1)) { + for (t2=0;t2<=floord(P0-2,32);t2++) { + for (t3=t2;t3<=floord(P0-1,32);t3++) { + for (t4=32*t2;t4<=min(min(P0-2,32*t2+31),32*t3+30);t4++) { + for (t5=max(32*t3,t4+1);t5<=min(P0-1,32*t3+31);t5++) { + for (t6=0;t6<=P1-1;t6++) { + S0(t5, t4, t6) + S1(t4, t6, t5) + } + } + } + } + } + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + S2(t4, t5) + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +{anonymous}::AnnotateHeuristicPass +{anonymous}::ScopStmtSplitPass +{anonymous}::UnifyScratchpadPass +Canonicalizer +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.1013 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0006 ( 0.6%) 0.0006 ( 0.6%) {anonymous}::AnnotateHeuristicPass + 0.0007 ( 0.7%) 0.0007 ( 0.7%) {anonymous}::ScopStmtSplitPass + 0.0004 ( 0.4%) 0.0004 ( 0.4%) {anonymous}::UnifyScratchpadPass + 0.0015 ( 1.5%) 0.0015 ( 1.5%) Canonicalizer + 0.0009 ( 0.9%) 0.0004 ( 0.4%) 'func' Pipeline + 0.0005 ( 0.5%) 0.0002 ( 0.2%) {anonymous}::RegToMemPass + 0.0004 ( 0.4%) 0.0002 ( 0.2%) {anonymous}::InsertRedundantLoadPass + 0.0006 ( 0.6%) 0.0006 ( 0.6%) {anonymous}::ExtractScopStmtPass + 0.0945 ( 92.8%) 0.0945 ( 93.3%) {anonymous}::PlutoTransformPass + 0.0006 ( 0.6%) 0.0006 ( 0.6%) Canonicalizer + 0.0014 ( 1.4%) 0.0014 ( 1.4%) Inliner + 0.0010 ( 1.0%) 0.0010 ( 1.0%) 'func' Pipeline + 0.0010 ( 1.0%) 0.0010 ( 1.0%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0006 ( 0.6%) 0.0006 ( 0.6%) Canonicalizer + 0.1018 (100.0%) 0.1013 (100.0%) Total diff --git a/example/polybench/split-and-merge/correlation/correlation.splittable.mlir b/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.seq.mlir similarity index 64% rename from example/polybench/split-and-merge/correlation/correlation.splittable.mlir rename to example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.seq.mlir index 275a83e9..e48120f2 100644 --- a/example/polybench/split-and-merge/correlation/correlation.splittable.mlir +++ b/example/polybench/split-and-merge/trmm/trmm.heuristic.polymer.seq.mlir @@ -1,11 +1,20 @@ -#map0 = affine_map<()[s0] -> (s0 - 1)> -#map1 = affine_map<(d0) -> (d0 + 1)> +#map0 = affine_map<(d0) -> (d0)> +#map1 = affine_map<(d0) -> (d0 * 32)> +#map2 = affine_map<(d0, d1) -> (1999, d0 * 32 + 32, d1 * 32 + 31)> +#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> +#map4 = affine_map<(d0) -> (2000, d0 * 32 + 32)> +#map5 = affine_map<(d0) -> (2600, d0 * 32 + 32)> +#map6 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> +#map7 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map8 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> +#map9 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#set = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") llvm.mlir.global internal constant @str5("%0.2lf \00") llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("corr\00") + llvm.mlir.global internal constant @str3("B\00") llvm.mlir.global internal constant @str2("begin dump: %s\00") llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> @@ -13,158 +22,156 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 llvm.mlir.global internal constant @str0("\00") llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 + %c2000_i32 = constant 2000 : i32 %c2600_i32 = constant 2600 : i32 %c42_i32 = constant 42 : i32 %c0_i64 = constant 0 : i64 %true = constant true %false = constant false + %cst = constant 1.500000e+00 : f64 %c0_i32 = constant 0 : i32 - %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.alloc() : memref<2600xf64> - %5 = memref.cast %0 : memref<1xf64> to memref - %6 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %5, %6) : (i32, i32, memref, memref) -> () + %cst_0 = constant 1.000000e+00 : f64 + %c1_i32 = constant 1 : i32 + %0 = memref.alloca() : memref<1999xf64> + %1 = memref.alloca() : memref<1xf64> + %2 = memref.alloc() : memref<2000x2000xf64> + %3 = memref.alloc() : memref<2000x2600xf64> + %4 = memref.cast %3 : memref<2000x2600xf64> to memref + affine.store %cst, %1[0] : memref<1xf64> + %5 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { + %9 = cmpi slt, %arg2, %c2000_i32 : i32 + scf.condition(%9) %arg2 : i32 + } do { + ^bb0(%arg2: i32): // no predecessors + %9 = index_cast %arg2 : i32 to index + %10 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %13 = cmpi slt, %arg3, %arg2 : i32 + scf.condition(%13) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %13 = index_cast %arg3 : i32 to index + %14 = addi %arg2, %arg3 : i32 + %15 = remi_signed %14, %c2000_i32 : i32 + %16 = sitofp %15 : i32 to f64 + %17 = sitofp %c2000_i32 : i32 to f64 + %18 = divf %16, %17 : f64 + memref.store %18, %2[%9, %13] : memref<2000x2000xf64> + %19 = addi %arg3, %c1_i32 : i32 + scf.yield %19 : i32 + } + memref.store %cst_0, %2[%9, %9] : memref<2000x2000xf64> + %11 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %13 = cmpi slt, %arg3, %c2600_i32 : i32 + scf.condition(%13) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %13 = index_cast %arg3 : i32 to index + %14 = subi %arg2, %arg3 : i32 + %15 = addi %14, %c2600_i32 : i32 + %16 = remi_signed %15, %c2600_i32 : i32 + %17 = sitofp %16 : i32 to f64 + %18 = sitofp %c2600_i32 : i32 to f64 + %19 = divf %17, %18 : f64 + memref.store %19, %3[%9, %13] : memref<2000x2600xf64> + %20 = addi %arg3, %c1_i32 : i32 + scf.yield %20 : i32 + } + %12 = addi %arg2, %c1_i32 : i32 + scf.yield %12 : i32 + } call @polybench_timer_start() : () -> () - %7 = affine.load %0[0] : memref<1xf64> - %8 = memref.cast %2 : memref<2600x2600xf64> to memref - %9 = memref.cast %3 : memref<2600xf64> to memref - %10 = memref.cast %4 : memref<2600xf64> to memref - call @kernel_correlation(%c2600_i32, %c3000_i32, %7, %6, %8, %9, %10) : (i32, i32, f64, memref, memref, memref, memref) -> () + %6 = affine.load %1[0] : memref<1xf64> + affine.for %arg2 = 0 to 63 { + affine.for %arg3 = #map0(%arg2) to 63 { + affine.for %arg4 = #map1(%arg2) to min #map2(%arg2, %arg3) { + affine.for %arg5 = max #map3(%arg3, %arg4) to min #map4(%arg3) { + affine.for %arg6 = 0 to 2600 { + %9 = affine.load %2[%arg5, %arg4] : memref<2000x2000xf64> + %10 = affine.load %3[%arg5, %arg6] : memref<2000x2600xf64> + %11 = mulf %9, %10 {scop.splittable = 0 : index} : f64 + affine.store %11, %0[%arg5 - %arg4 - 1] : memref<1999xf64> + %12 = affine.load %3[%arg4, %arg6] : memref<2000x2600xf64> + %13 = affine.load %0[%arg5 - %arg4 - 1] : memref<1999xf64> + %14 = addf %12, %13 : f64 + affine.store %14, %3[%arg4, %arg6] : memref<2000x2600xf64> + } + } + } + } + } + affine.for %arg2 = 0 to 63 { + affine.for %arg3 = 0 to 82 { + affine.for %arg4 = #map1(%arg2) to min #map4(%arg2) { + affine.for %arg5 = #map1(%arg3) to min #map5(%arg3) { + %9 = affine.load %3[%arg4, %arg5] : memref<2000x2600xf64> + %10 = mulf %6, %9 : f64 + affine.store %10, %3[%arg4, %arg5] : memref<2000x2600xf64> + } + } + } + } call @polybench_timer_stop() : () -> () call @polybench_timer_print() : () -> () - %11 = cmpi sgt, %arg0, %c42_i32 : i32 - %12 = scf.if %11 -> (i1) { - %13 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %14 = llvm.load %13 : !llvm.ptr> - %15 = llvm.mlir.addressof @str0 : !llvm.ptr> - %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.call @strcmp(%14, %16) : (!llvm.ptr, !llvm.ptr) -> i32 - %18 = trunci %17 : i32 to i1 - %19 = xor %18, %true : i1 - scf.yield %19 : i1 + %7 = cmpi sgt, %arg0, %c42_i32 : i32 + %8 = scf.if %7 -> (i1) { + %9 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> + %10 = llvm.load %9 : !llvm.ptr> + %11 = llvm.mlir.addressof @str0 : !llvm.ptr> + %12 = llvm.getelementptr %11[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %13 = llvm.call @strcmp(%10, %12) : (!llvm.ptr, !llvm.ptr) -> i32 + %14 = trunci %13 : i32 to i1 + %15 = xor %14, %true : i1 + scf.yield %15 : i1 } else { scf.yield %false : i1 } - scf.if %12 { - call @print_array(%c2600_i32, %8) : (i32, memref) -> () + scf.if %8 { + call @print_array(%c2000_i32, %c2600_i32, %4) : (i32, i32, memref) -> () } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> - memref.dealloc %4 : memref<2600xf64> + memref.dealloc %2 : memref<2000x2000xf64> + memref.dealloc %3 : memref<2000x2600xf64> return %c0_i32 : i32 } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { - %c3000_i32 = constant 3000 : i32 - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %0 = sitofp %c3000_i32 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { - %2 = cmpi slt, %arg4, %c3000_i32 : i32 - scf.condition(%2) %arg4 : i32 - } do { - ^bb0(%arg4: i32): // no predecessors - %2 = index_cast %arg4 : i32 to index - %3 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { - %5 = cmpi slt, %arg5, %c2600_i32 : i32 - scf.condition(%5) %arg5 : i32 - } do { - ^bb0(%arg5: i32): // no predecessors - %5 = index_cast %arg5 : i32 to index - %6 = muli %arg4, %arg5 : i32 - %7 = sitofp %6 : i32 to f64 - %8 = sitofp %c2600_i32 : i32 to f64 - %9 = divf %7, %8 : f64 - %10 = sitofp %arg4 : i32 to f64 - %11 = addf %9, %10 : f64 - memref.store %11, %arg3[%2, %5] : memref - %12 = addi %arg5, %c1_i32 : i32 - scf.yield %12 : i32 - } - %4 = addi %arg4, %c1_i32 : i32 - scf.yield %4 : i32 - } - return - } func private @polybench_timer_start() - func private @kernel_correlation(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref, %arg6: memref) { - %cst = constant 1.000000e-01 : f64 - %cst_0 = constant 0.000000e+00 : f64 - %c1 = constant 1 : index - %cst_1 = constant 1.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg7 = 0 to %1 { - affine.store %cst_0, %arg5[%arg7] : memref - affine.for %arg8 = 0 to %0 { - %5 = affine.load %arg3[%arg8, %arg7] : memref - %6 = affine.load %arg5[%arg7] : memref - %7 = addf %6, %5 : f64 - affine.store %7, %arg5[%arg7] : memref - } - %3 = affine.load %arg5[%arg7] : memref - %4 = divf %3, %arg2 : f64 - affine.store %4, %arg5[%arg7] : memref - } - affine.for %arg7 = 0 to %1 { - affine.store %cst_0, %arg6[%arg7] : memref - affine.for %arg8 = 0 to %0 { - %8 = affine.load %arg3[%arg8, %arg7] : memref - %9 = affine.load %arg5[%arg7] : memref - %10 = subf %8, %9 {scop.splittable = 1 : index} : f64 - %11 = mulf %10, %10 {scop.splittable = 0 : index} : f64 - %12 = affine.load %arg6[%arg7] : memref - %13 = addf %12, %11 : f64 - affine.store %13, %arg6[%arg7] : memref - } - %3 = affine.load %arg6[%arg7] : memref - %4 = divf %3, %arg2 {scop.splittable = 4 : index} : f64 - %5 = math.sqrt %4 {scop.splittable = 3 : index} : f64 - %6 = cmpf ule, %5, %cst {scop.splittable = 2 : index} : f64 - %7 = select %6, %cst_1, %5 : f64 - affine.store %7, %arg6[%arg7] : memref - } - affine.for %arg7 = 0 to %0 { - affine.for %arg8 = 0 to %1 { - %3 = affine.load %arg5[%arg8] : memref - %4 = affine.load %arg3[%arg7, %arg8] : memref - %5 = subf %4, %3 {scop.splittable = 5 : index} : f64 - %6 = math.sqrt %arg2 {scop.splittable = 7 : index} : f64 - %7 = affine.load %arg6[%arg8] : memref - %8 = mulf %6, %7 {scop.splittable = 6 : index} : f64 - %9 = divf %5, %8 : f64 - affine.store %9, %arg3[%arg7, %arg8] : memref + func private @polybench_timer_stop() + func private @polybench_timer_print() + func @kernel_trmm(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.if #set()[%0, %1] { + affine.for %arg6 = 0 to #map6()[%0] { + affine.for %arg7 = #map0(%arg6) to #map7()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map8(%arg6, %arg7)[%0] { + affine.for %arg9 = max #map3(%arg7, %arg8) to min #map9(%arg7)[%0] { + affine.for %arg10 = 0 to %1 { + %2 = affine.load %arg3[%arg9, %arg8] : memref + %3 = affine.load %arg4[%arg9, %arg10] : memref + %4 = mulf %2, %3 {scop.splittable = 0 : index} : f64 + affine.store %4, %arg5[%arg9 - %arg8 - 1] : memref + %5 = affine.load %arg4[%arg8, %arg10] : memref + %6 = affine.load %arg5[%arg9 - %arg8 - 1] : memref + %7 = addf %5, %6 : f64 + affine.store %7, %arg4[%arg8, %arg10] : memref + } + } + } + } } - } - affine.for %arg7 = 0 to #map0()[%1] { - affine.store %cst_1, %arg4[%arg7, %arg7] : memref - affine.for %arg8 = #map1(%arg7) to %1 { - affine.store %cst_0, %arg4[%arg7, %arg8] : memref - affine.for %arg9 = 0 to %0 { - %4 = affine.load %arg3[%arg9, %arg7] : memref - %5 = affine.load %arg3[%arg9, %arg8] : memref - %6 = mulf %4, %5 {scop.splittable = 8 : index} : f64 - %7 = affine.load %arg4[%arg7, %arg8] : memref - %8 = addf %7, %6 : f64 - affine.store %8, %arg4[%arg7, %arg8] : memref + affine.for %arg6 = 0 to #map7()[%0] { + affine.for %arg7 = 0 to #map7()[%1] { + affine.for %arg8 = #map1(%arg6) to min #map9(%arg6)[%0] { + affine.for %arg9 = #map1(%arg7) to min #map9(%arg7)[%1] { + %2 = affine.load %arg4[%arg8, %arg9] : memref + %3 = mulf %arg2, %2 : f64 + affine.store %3, %arg4[%arg8, %arg9] : memref + } + } } - %3 = affine.load %arg4[%arg7, %arg8] : memref - affine.store %3, %arg4[%arg8, %arg7] : memref } } - %2 = subi %1, %c1 : index - memref.store %cst_1, %arg4[%2, %2] : memref return } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: memref) { + func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { %c0_i64 = constant 0 : i64 %c0_i32 = constant 0 : i32 %c20_i32 = constant 20 : i32 @@ -178,23 +185,23 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %7 = llvm.mlir.addressof @str2 : !llvm.ptr> %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %9 = llvm.mlir.addressof @str3 : !llvm.ptr> + %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 + %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %25 = cmpi slt, %arg3, %arg0 : i32 + scf.condition(%25) %arg3 : i32 } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 + ^bb0(%arg3: i32): // no predecessors + %25 = index_cast %arg3 : i32 to index + %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { + %28 = cmpi slt, %arg4, %arg1 : i32 + scf.condition(%28) %arg4 : i32 } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 + ^bb0(%arg4: i32): // no predecessors + %28 = index_cast %arg4 : i32 to index + %29 = muli %arg3, %arg0 : i32 + %30 = addi %29, %arg4 : i32 %31 = remi_signed %30, %c20_i32 : i32 %32 = cmpi eq, %31, %c0_i32 : i32 scf.if %32 { @@ -208,20 +215,20 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %35 = llvm.mlir.addressof @str5 : !llvm.ptr> %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref + %37 = memref.load %arg2[%25, %28] : memref %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 + %39 = addi %arg4, %c1_i32 : i32 scf.yield %39 : i32 } - %27 = addi %arg2, %c1_i32 : i32 + %27 = addi %arg3, %c1_i32 : i32 scf.yield %27 : i32 } %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %15 = llvm.mlir.addressof @str6 : !llvm.ptr> %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %17 = llvm.mlir.addressof @str3 : !llvm.ptr> + %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> diff --git a/example/polybench/split-and-merge/covariance/covariance.origin.mlir b/example/polybench/split-and-merge/trmm/trmm.mlir similarity index 71% rename from example/polybench/split-and-merge/covariance/covariance.origin.mlir rename to example/polybench/split-and-merge/trmm/trmm.mlir index 05d3cacb..14626846 100644 --- a/example/polybench/split-and-merge/covariance/covariance.origin.mlir +++ b/example/polybench/split-and-merge/trmm/trmm.mlir @@ -1,10 +1,10 @@ -#map = affine_map<(d0) -> (d0)> +#map = affine_map<(d0) -> (d0 + 1)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") llvm.mlir.global internal constant @str5("%0.2lf \00") llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("cov\00") + llvm.mlir.global internal constant @str3("B\00") llvm.mlir.global internal constant @str2("begin dump: %s\00") llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> @@ -12,7 +12,7 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 llvm.mlir.global internal constant @str0("\00") llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 + %c2000_i32 = constant 2000 : i32 %c2600_i32 = constant 2600 : i32 %c42_i32 = constant 42 : i32 %c0_i64 = constant 0 : i64 @@ -20,117 +20,110 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %false = constant false %c0_i32 = constant 0 : i32 %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.cast %0 : memref<1xf64> to memref - %5 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %4, %5) : (i32, i32, memref, memref) -> () + %1 = memref.alloc() : memref<2000x2000xf64> + %2 = memref.alloc() : memref<2000x2600xf64> + %3 = memref.cast %0 : memref<1xf64> to memref + %4 = memref.cast %1 : memref<2000x2000xf64> to memref + %5 = memref.cast %2 : memref<2000x2600xf64> to memref + call @init_array(%c2000_i32, %c2600_i32, %3, %4, %5) : (i32, i32, memref, memref, memref) -> () call @polybench_timer_start() : () -> () %6 = affine.load %0[0] : memref<1xf64> - %7 = memref.cast %2 : memref<2600x2600xf64> to memref - %8 = memref.cast %3 : memref<2600xf64> to memref - call @kernel_covariance(%c2600_i32, %c3000_i32, %6, %5, %7, %8) : (i32, i32, f64, memref, memref, memref) -> () + call @kernel_trmm(%c2000_i32, %c2600_i32, %6, %4, %5) : (i32, i32, f64, memref, memref) -> () call @polybench_timer_stop() : () -> () call @polybench_timer_print() : () -> () - %9 = cmpi sgt, %arg0, %c42_i32 : i32 - %10 = scf.if %9 -> (i1) { - %11 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %12 = llvm.load %11 : !llvm.ptr> - %13 = llvm.mlir.addressof @str0 : !llvm.ptr> - %14 = llvm.getelementptr %13[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %15 = llvm.call @strcmp(%12, %14) : (!llvm.ptr, !llvm.ptr) -> i32 - %16 = trunci %15 : i32 to i1 - %17 = xor %16, %true : i1 - scf.yield %17 : i1 + %7 = cmpi sgt, %arg0, %c42_i32 : i32 + %8 = scf.if %7 -> (i1) { + %9 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> + %10 = llvm.load %9 : !llvm.ptr> + %11 = llvm.mlir.addressof @str0 : !llvm.ptr> + %12 = llvm.getelementptr %11[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %13 = llvm.call @strcmp(%10, %12) : (!llvm.ptr, !llvm.ptr) -> i32 + %14 = trunci %13 : i32 to i1 + %15 = xor %14, %true : i1 + scf.yield %15 : i1 } else { scf.yield %false : i1 } - scf.if %10 { - call @print_array(%c2600_i32, %7) : (i32, memref) -> () + scf.if %8 { + call @print_array(%c2000_i32, %c2600_i32, %5) : (i32, i32, memref) -> () } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> + memref.dealloc %1 : memref<2000x2000xf64> + memref.dealloc %2 : memref<2000x2600xf64> return %c0_i32 : i32 } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { + func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref, %arg4: memref) { + %cst = constant 1.500000e+00 : f64 %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 + %cst_0 = constant 1.000000e+00 : f64 %c1_i32 = constant 1 : i32 - %c3000 = constant 3000 : index - %c2600 = constant 2600 : index - %c0 = constant 0 : index - %c1 = constant 1 : index - %0 = sitofp %arg1 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.for %arg4 = %c0 to %c3000 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %2 = index_cast %arg5 : i32 to index - %3 = scf.for %arg6 = %c0 to %c2600 step %c1 iter_args(%arg7 = %c0_i32) -> (i32) { - %5 = index_cast %arg7 : i32 to index - %6 = sitofp %arg5 : i32 to f64 - %7 = sitofp %arg7 : i32 to f64 - %8 = mulf %6, %7 : f64 - %9 = sitofp %c2600_i32 : i32 to f64 + affine.store %cst, %arg2[0] : memref + %0 = scf.while (%arg5 = %c0_i32) : (i32) -> i32 { + %1 = cmpi slt, %arg5, %arg0 : i32 + scf.condition(%1) %arg5 : i32 + } do { + ^bb0(%arg5: i32): // no predecessors + %1 = index_cast %arg5 : i32 to index + %2 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { + %5 = cmpi slt, %arg6, %arg5 : i32 + scf.condition(%5) %arg6 : i32 + } do { + ^bb0(%arg6: i32): // no predecessors + %5 = index_cast %arg6 : i32 to index + %6 = addi %arg5, %arg6 : i32 + %7 = remi_signed %6, %arg0 : i32 + %8 = sitofp %7 : i32 to f64 + %9 = sitofp %arg0 : i32 to f64 %10 = divf %8, %9 : f64 - memref.store %10, %arg3[%2, %5] : memref - %11 = addi %arg7, %c1_i32 : i32 + memref.store %10, %arg3[%1, %5] : memref + %11 = addi %arg6, %c1_i32 : i32 scf.yield %11 : i32 } + memref.store %cst_0, %arg3[%1, %1] : memref + %3 = scf.while (%arg6 = %c0_i32) : (i32) -> i32 { + %5 = cmpi slt, %arg6, %arg1 : i32 + scf.condition(%5) %arg6 : i32 + } do { + ^bb0(%arg6: i32): // no predecessors + %5 = index_cast %arg6 : i32 to index + %6 = subi %arg5, %arg6 : i32 + %7 = addi %arg1, %6 : i32 + %8 = remi_signed %7, %arg1 : i32 + %9 = sitofp %8 : i32 to f64 + %10 = sitofp %arg1 : i32 to f64 + %11 = divf %9, %10 : f64 + memref.store %11, %arg4[%1, %5] : memref + %12 = addi %arg6, %c1_i32 : i32 + scf.yield %12 : i32 + } %4 = addi %arg5, %c1_i32 : i32 scf.yield %4 : i32 } return } func private @polybench_timer_start() - func private @kernel_covariance(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { - %cst = constant 0.000000e+00 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg6 = 0 to %1 { - affine.store %cst, %arg5[%arg6] : memref - affine.for %arg7 = 0 to %0 { - %4 = affine.load %arg3[%arg7, %arg6] : memref - %5 = affine.load %arg5[%arg6] : memref - %6 = addf %5, %4 : f64 - affine.store %6, %arg5[%arg6] : memref - } - %2 = affine.load %arg5[%arg6] : memref - %3 = divf %2, %arg2 : f64 - affine.store %3, %arg5[%arg6] : memref - } - affine.for %arg6 = 0 to %0 { - affine.for %arg7 = 0 to %1 { - %2 = affine.load %arg5[%arg7] : memref - %3 = affine.load %arg3[%arg6, %arg7] : memref - %4 = subf %3, %2 : f64 - affine.store %4, %arg3[%arg6, %arg7] : memref - } - } - affine.for %arg6 = 0 to %1 { - affine.for %arg7 = #map(%arg6) to %1 { - affine.store %cst, %arg4[%arg6, %arg7] : memref - affine.for %arg8 = 0 to %0 { - %5 = affine.load %arg3[%arg8, %arg6] : memref - %6 = affine.load %arg3[%arg8, %arg7] : memref - %7 = mulf %5, %6 : f64 - %8 = affine.load %arg4[%arg6, %arg7] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg4[%arg6, %arg7] : memref + func private @kernel_trmm(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref) { + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.for %arg5 = 0 to %0 { + affine.for %arg6 = 0 to %1 { + affine.for %arg7 = #map(%arg5) to %0 { + %4 = affine.load %arg3[%arg7, %arg5] : memref + %5 = affine.load %arg4[%arg7, %arg6] : memref + %6 = mulf %4, %5 : f64 + %7 = affine.load %arg4[%arg5, %arg6] : memref + %8 = addf %7, %6 : f64 + affine.store %8, %arg4[%arg5, %arg6] : memref } - %2 = subf %arg2, %cst_0 : f64 - %3 = affine.load %arg4[%arg6, %arg7] : memref - %4 = divf %3, %2 : f64 - affine.store %4, %arg4[%arg6, %arg7] : memref - affine.store %4, %arg4[%arg7, %arg6] : memref + %2 = affine.load %arg4[%arg5, %arg6] : memref + %3 = mulf %arg2, %2 : f64 + affine.store %3, %arg4[%arg5, %arg6] : memref } } return } func private @polybench_timer_stop() func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: memref) { + func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { %c0_i64 = constant 0 : i64 %c0_i32 = constant 0 : i32 %c20_i32 = constant 20 : i32 @@ -144,23 +137,23 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %7 = llvm.mlir.addressof @str2 : !llvm.ptr> %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %9 = llvm.mlir.addressof @str3 : !llvm.ptr> + %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 + %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %25 = cmpi slt, %arg3, %arg0 : i32 + scf.condition(%25) %arg3 : i32 } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 + ^bb0(%arg3: i32): // no predecessors + %25 = index_cast %arg3 : i32 to index + %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { + %28 = cmpi slt, %arg4, %arg1 : i32 + scf.condition(%28) %arg4 : i32 } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 + ^bb0(%arg4: i32): // no predecessors + %28 = index_cast %arg4 : i32 to index + %29 = muli %arg3, %arg0 : i32 + %30 = addi %29, %arg4 : i32 %31 = remi_signed %30, %c20_i32 : i32 %32 = cmpi eq, %31, %c0_i32 : i32 scf.if %32 { @@ -174,20 +167,20 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %35 = llvm.mlir.addressof @str5 : !llvm.ptr> %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref + %37 = memref.load %arg2[%25, %28] : memref %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 + %39 = addi %arg4, %c1_i32 : i32 scf.yield %39 : i32 } - %27 = addi %arg2, %c1_i32 : i32 + %27 = addi %arg3, %c1_i32 : i32 scf.yield %27 : i32 } %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %15 = llvm.mlir.addressof @str6 : !llvm.ptr> %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %17 = llvm.mlir.addressof @str3 : !llvm.ptr> + %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> diff --git a/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.par.log b/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.par.log new file mode 100644 index 00000000..f36d4579 --- /dev/null +++ b/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.par.log @@ -0,0 +1,263 @@ +Pluto schedule elapsed time: 8.112634e-02s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +2 + +# =============================================== Statement 1 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +12 10 6 0 0 2 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 1 0 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 1 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 -1 0 1 0 0 -1 ## -i0+i2-1 >= 0 + 1 0 0 0 0 0 -1 1 0 -1 ## -i2+P0-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 ## -32*fk0+i1 >= 0 + 1 32 0 0 0 -1 0 0 0 31 ## 32*fk0-i1+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 0 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 17 7 6 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == fk2 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c7 == i1 + +# ---------------------------------------------- 1.3 Access +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S0(i0, i1, i2) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 2.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Extensions + +# Number of arrays +2 +# Mapping array-identifiers/array-names +1 A1 +2 A2 + + + +kernel_trmm + + +t1 t2 t3 t4 t5 t6 t7 + + + +# Number of loops +2 +# =========================================== +# Loop number 1 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +1 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 +# =========================================== +# Loop number 2 +# Iterator name +t2 +# Number of stmts +1 +# Statement identifiers +2 +# Private variables +t3,t4,t5,t6,t7 +# Directive +1 + + + + +[CLooG] INFO: 1 dimensions (over 7) are scalar. +if ((P0 >= 1) && (P1 >= 1)) { + if (P0 >= 2) { + lbp=0; + ubp=floord(P1-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P0-2,32);t3++) { + for (t4=t3;t4<=floord(P0-1,32);t4++) { + for (t5=32*t3;t5<=min(min(P0-2,32*t3+31),32*t4+30);t5++) { + for (t6=max(32*t4,t5+1);t6<=min(P0-1,32*t4+31);t6++) { + for (t7=32*t2;t7<=min(P1-1,32*t2+31);t7++) { + S0(t5, t7, t6) + } + } + } + } + } + } + } + lbp=0; + ubp=floord(P0-1,32); +#pragma omp parallel for private(lbv,ubv,t3,t4,t5,t6,t7) + for (t2=lbp;t2<=ubp;t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + S1(t4, t5) + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.1108 seconds + + ---Wall Time--- --- Name --- + 0.0002 ( 0.2%) 'func' Pipeline + 0.0001 ( 0.1%) {anonymous}::RegToMemPass + 0.0001 ( 0.1%) {anonymous}::InsertRedundantLoadPass + 0.0002 ( 0.2%) {anonymous}::ExtractScopStmtPass + 0.1078 ( 97.3%) {anonymous}::PlutoTransformPass + 0.0006 ( 0.5%) Canonicalizer + 0.0014 ( 1.3%) Inliner + 0.0011 ( 1.0%) 'func' Pipeline + 0.0011 ( 1.0%) Canonicalizer + 0.0000 ( 0.0%) (A) CallGraph + 0.0006 ( 0.5%) Canonicalizer + 0.1108 (100.0%) Total diff --git a/example/polybench/split-and-merge/covariance/covariance.origin.splittable.mlir b/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.par.mlir similarity index 64% rename from example/polybench/split-and-merge/covariance/covariance.origin.splittable.mlir rename to example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.par.mlir index 0e795070..bee280c4 100644 --- a/example/polybench/split-and-merge/covariance/covariance.origin.splittable.mlir +++ b/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.par.mlir @@ -1,10 +1,21 @@ -#map = affine_map<(d0) -> (d0)> +#map0 = affine_map<(d0) -> (d0)> +#map1 = affine_map<(d0) -> (d0 * 32)> +#map2 = affine_map<(d0, d1) -> (1999, d0 * 32 + 32, d1 * 32 + 31)> +#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> +#map4 = affine_map<(d0) -> (2000, d0 * 32 + 32)> +#map5 = affine_map<(d0) -> (2600, d0 * 32 + 32)> +#map6 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map7 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> +#map8 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> +#map9 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#set0 = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> +#set1 = affine_set<()[s0] : (s0 - 2 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") llvm.mlir.global internal constant @str5("%0.2lf \00") llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("cov\00") + llvm.mlir.global internal constant @str3("B\00") llvm.mlir.global internal constant @str2("begin dump: %s\00") llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> @@ -12,125 +23,157 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 llvm.mlir.global internal constant @str0("\00") llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 + %c2000_i32 = constant 2000 : i32 %c2600_i32 = constant 2600 : i32 %c42_i32 = constant 42 : i32 %c0_i64 = constant 0 : i64 %true = constant true %false = constant false + %cst = constant 1.500000e+00 : f64 %c0_i32 = constant 0 : i32 + %cst_0 = constant 1.000000e+00 : f64 + %c1_i32 = constant 1 : i32 %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.cast %0 : memref<1xf64> to memref - %5 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %4, %5) : (i32, i32, memref, memref) -> () + %1 = memref.alloc() : memref<2000x2000xf64> + %2 = memref.alloc() : memref<2000x2600xf64> + %3 = memref.cast %2 : memref<2000x2600xf64> to memref + affine.store %cst, %0[0] : memref<1xf64> + %4 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { + %8 = cmpi slt, %arg2, %c2000_i32 : i32 + scf.condition(%8) %arg2 : i32 + } do { + ^bb0(%arg2: i32): // no predecessors + %8 = index_cast %arg2 : i32 to index + %9 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %12 = cmpi slt, %arg3, %arg2 : i32 + scf.condition(%12) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %12 = index_cast %arg3 : i32 to index + %13 = addi %arg2, %arg3 : i32 + %14 = remi_signed %13, %c2000_i32 : i32 + %15 = sitofp %14 : i32 to f64 + %16 = sitofp %c2000_i32 : i32 to f64 + %17 = divf %15, %16 : f64 + memref.store %17, %1[%8, %12] : memref<2000x2000xf64> + %18 = addi %arg3, %c1_i32 : i32 + scf.yield %18 : i32 + } + memref.store %cst_0, %1[%8, %8] : memref<2000x2000xf64> + %10 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %12 = cmpi slt, %arg3, %c2600_i32 : i32 + scf.condition(%12) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %12 = index_cast %arg3 : i32 to index + %13 = subi %arg2, %arg3 : i32 + %14 = addi %13, %c2600_i32 : i32 + %15 = remi_signed %14, %c2600_i32 : i32 + %16 = sitofp %15 : i32 to f64 + %17 = sitofp %c2600_i32 : i32 to f64 + %18 = divf %16, %17 : f64 + memref.store %18, %2[%8, %12] : memref<2000x2600xf64> + %19 = addi %arg3, %c1_i32 : i32 + scf.yield %19 : i32 + } + %11 = addi %arg2, %c1_i32 : i32 + scf.yield %11 : i32 + } call @polybench_timer_start() : () -> () - %6 = affine.load %0[0] : memref<1xf64> - %7 = memref.cast %2 : memref<2600x2600xf64> to memref - %8 = memref.cast %3 : memref<2600xf64> to memref - call @kernel_covariance(%c2600_i32, %c3000_i32, %6, %5, %7, %8) : (i32, i32, f64, memref, memref, memref) -> () + %5 = affine.load %0[0] : memref<1xf64> + affine.for %arg2 = 0 to 82 { + affine.for %arg3 = 0 to 63 { + affine.for %arg4 = #map0(%arg3) to 63 { + affine.for %arg5 = #map1(%arg3) to min #map2(%arg3, %arg4) { + affine.for %arg6 = max #map3(%arg4, %arg5) to min #map4(%arg4) { + affine.for %arg7 = #map1(%arg2) to min #map5(%arg2) { + %8 = affine.load %2[%arg5, %arg7] : memref<2000x2600xf64> + %9 = affine.load %1[%arg6, %arg5] : memref<2000x2000xf64> + %10 = affine.load %2[%arg6, %arg7] : memref<2000x2600xf64> + %11 = mulf %9, %10 : f64 + %12 = addf %8, %11 : f64 + affine.store %12, %2[%arg5, %arg7] : memref<2000x2600xf64> + } + } + } + } + } + } {scop.parallelizable} + affine.for %arg2 = 0 to 63 { + affine.for %arg3 = 0 to 82 { + affine.for %arg4 = #map1(%arg2) to min #map4(%arg2) { + affine.for %arg5 = #map1(%arg3) to min #map5(%arg3) { + %8 = affine.load %2[%arg4, %arg5] : memref<2000x2600xf64> + %9 = mulf %5, %8 : f64 + affine.store %9, %2[%arg4, %arg5] : memref<2000x2600xf64> + } + } + } + } {scop.parallelizable} call @polybench_timer_stop() : () -> () call @polybench_timer_print() : () -> () - %9 = cmpi sgt, %arg0, %c42_i32 : i32 - %10 = scf.if %9 -> (i1) { - %11 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %12 = llvm.load %11 : !llvm.ptr> - %13 = llvm.mlir.addressof @str0 : !llvm.ptr> - %14 = llvm.getelementptr %13[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %15 = llvm.call @strcmp(%12, %14) : (!llvm.ptr, !llvm.ptr) -> i32 - %16 = trunci %15 : i32 to i1 - %17 = xor %16, %true : i1 - scf.yield %17 : i1 + %6 = cmpi sgt, %arg0, %c42_i32 : i32 + %7 = scf.if %6 -> (i1) { + %8 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> + %9 = llvm.load %8 : !llvm.ptr> + %10 = llvm.mlir.addressof @str0 : !llvm.ptr> + %11 = llvm.getelementptr %10[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %12 = llvm.call @strcmp(%9, %11) : (!llvm.ptr, !llvm.ptr) -> i32 + %13 = trunci %12 : i32 to i1 + %14 = xor %13, %true : i1 + scf.yield %14 : i1 } else { scf.yield %false : i1 } - scf.if %10 { - call @print_array(%c2600_i32, %7) : (i32, memref) -> () + scf.if %7 { + call @print_array(%c2000_i32, %c2600_i32, %3) : (i32, i32, memref) -> () } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> + memref.dealloc %1 : memref<2000x2000xf64> + memref.dealloc %2 : memref<2000x2600xf64> return %c0_i32 : i32 } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %c3000 = constant 3000 : index - %c2600 = constant 2600 : index - %c0 = constant 0 : index - %c1 = constant 1 : index - %0 = sitofp %arg1 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.for %arg4 = %c0 to %c3000 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %2 = index_cast %arg5 : i32 to index - %3 = scf.for %arg6 = %c0 to %c2600 step %c1 iter_args(%arg7 = %c0_i32) -> (i32) { - %5 = index_cast %arg7 : i32 to index - %6 = sitofp %arg5 : i32 to f64 - %7 = sitofp %arg7 : i32 to f64 - %8 = mulf %6, %7 : f64 - %9 = sitofp %c2600_i32 : i32 to f64 - %10 = divf %8, %9 : f64 - memref.store %10, %arg3[%2, %5] : memref - %11 = addi %arg7, %c1_i32 : i32 - scf.yield %11 : i32 - } - %4 = addi %arg5, %c1_i32 : i32 - scf.yield %4 : i32 - } - return - } func private @polybench_timer_start() - func private @kernel_covariance(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { - %cst = constant 0.000000e+00 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg6 = 0 to %1 { - affine.store %cst, %arg5[%arg6] : memref - affine.for %arg7 = 0 to %0 { - %4 = affine.load %arg3[%arg7, %arg6] : memref - %5 = affine.load %arg5[%arg6] : memref - %6 = addf %5, %4 : f64 - affine.store %6, %arg5[%arg6] : memref - } - %2 = affine.load %arg5[%arg6] : memref - %3 = divf %2, %arg2 : f64 - affine.store %3, %arg5[%arg6] : memref - } - affine.for %arg6 = 0 to %0 { - affine.for %arg7 = 0 to %1 { - %2 = affine.load %arg5[%arg7] : memref - %3 = affine.load %arg3[%arg6, %arg7] : memref - %4 = subf %3, %2 : f64 - affine.store %4, %arg3[%arg6, %arg7] : memref + func private @polybench_timer_stop() + func private @polybench_timer_print() + func @kernel_trmm(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref) { + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.if #set0()[%0, %1] { + affine.if #set1()[%0] { + affine.for %arg5 = 0 to #map6()[%1] { + affine.for %arg6 = 0 to #map7()[%0] { + affine.for %arg7 = #map0(%arg6) to #map6()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map8(%arg6, %arg7)[%0] { + affine.for %arg9 = max #map3(%arg7, %arg8) to min #map9(%arg7)[%0] { + affine.for %arg10 = #map1(%arg5) to min #map9(%arg5)[%1] { + %2 = affine.load %arg4[%arg8, %arg10] : memref + %3 = affine.load %arg3[%arg9, %arg8] : memref + %4 = affine.load %arg4[%arg9, %arg10] : memref + %5 = mulf %3, %4 : f64 + %6 = addf %2, %5 : f64 + affine.store %6, %arg4[%arg8, %arg10] : memref + } + } + } + } + } + } {scop.parallelizable} } - } - affine.for %arg6 = 0 to %1 { - affine.for %arg7 = #map(%arg6) to %1 { - affine.store %cst, %arg4[%arg6, %arg7] : memref - affine.for %arg8 = 0 to %0 { - %5 = affine.load %arg3[%arg8, %arg6] : memref - %6 = affine.load %arg3[%arg8, %arg7] : memref - %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 - %8 = affine.load %arg4[%arg6, %arg7] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg4[%arg6, %arg7] : memref + affine.for %arg5 = 0 to #map6()[%0] { + affine.for %arg6 = 0 to #map6()[%1] { + affine.for %arg7 = #map1(%arg5) to min #map9(%arg5)[%0] { + affine.for %arg8 = #map1(%arg6) to min #map9(%arg6)[%1] { + %2 = affine.load %arg4[%arg7, %arg8] : memref + %3 = mulf %arg2, %2 : f64 + affine.store %3, %arg4[%arg7, %arg8] : memref + } + } } - %2 = subf %arg2, %cst_0 : f64 - %3 = affine.load %arg4[%arg6, %arg7] : memref - %4 = divf %3, %2 : f64 - affine.store %4, %arg4[%arg6, %arg7] : memref - affine.store %4, %arg4[%arg7, %arg6] : memref - } + } {scop.parallelizable} } return } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: memref) { + func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { %c0_i64 = constant 0 : i64 %c0_i32 = constant 0 : i32 %c20_i32 = constant 20 : i32 @@ -144,23 +187,23 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %7 = llvm.mlir.addressof @str2 : !llvm.ptr> %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %9 = llvm.mlir.addressof @str3 : !llvm.ptr> + %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 + %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %25 = cmpi slt, %arg3, %arg0 : i32 + scf.condition(%25) %arg3 : i32 } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 + ^bb0(%arg3: i32): // no predecessors + %25 = index_cast %arg3 : i32 to index + %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { + %28 = cmpi slt, %arg4, %arg1 : i32 + scf.condition(%28) %arg4 : i32 } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 + ^bb0(%arg4: i32): // no predecessors + %28 = index_cast %arg4 : i32 to index + %29 = muli %arg3, %arg0 : i32 + %30 = addi %29, %arg4 : i32 %31 = remi_signed %30, %c20_i32 : i32 %32 = cmpi eq, %31, %c0_i32 : i32 scf.if %32 { @@ -174,20 +217,20 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %35 = llvm.mlir.addressof @str5 : !llvm.ptr> %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref + %37 = memref.load %arg2[%25, %28] : memref %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 + %39 = addi %arg4, %c1_i32 : i32 scf.yield %39 : i32 } - %27 = addi %arg2, %c1_i32 : i32 + %27 = addi %arg3, %c1_i32 : i32 scf.yield %27 : i32 } %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %15 = llvm.mlir.addressof @str6 : !llvm.ptr> %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %17 = llvm.mlir.addressof @str3 : !llvm.ptr> + %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> diff --git a/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.seq.log b/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.seq.log new file mode 100644 index 00000000..ac5eb508 --- /dev/null +++ b/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.seq.log @@ -0,0 +1,228 @@ +Pluto schedule elapsed time: 8.112123e-02s +# [File generated by the OpenScop Library 0.9.2] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +0 4 0 0 0 2 + +# Parameters are provided +1 + +P0 P1 + + +# Number of statements +2 + +# =============================================== Statement 1 +# Number of relations describing the statement: +6 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +12 10 6 0 0 2 +# e/i| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 1 0 0 0 1 0 0 0 0 0 ## i0 >= 0 + 1 0 0 0 -1 0 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 0 1 0 0 0 0 ## i1 >= 0 + 1 0 0 0 0 -1 0 0 1 -1 ## -i1+P1-1 >= 0 + 1 0 0 0 -1 0 1 0 0 -1 ## -i0+i2-1 >= 0 + 1 0 0 0 0 0 -1 1 0 -1 ## -i2+P0-1 >= 0 + 1 -32 0 0 0 1 0 0 0 0 ## -32*fk0+i1 >= 0 + 1 32 0 0 0 -1 0 0 0 31 ## 32*fk0-i1+31 >= 0 + 1 0 -32 0 1 0 0 0 0 0 ## -32*fk1+i0 >= 0 + 1 0 32 0 -1 0 0 0 0 31 ## 32*fk1-i0+31 >= 0 + 1 0 0 -32 0 0 1 0 0 0 ## -32*fk2+i2 >= 0 + 1 0 0 32 0 0 -1 0 0 31 ## 32*fk2-i2+31 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +7 17 7 6 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c4 == fk2 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c5 == i0 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## c6 == i2 + 0 0 0 0 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## c7 == i1 + +# ---------------------------------------------- 1.3 Access +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 1 0 0 0 0 0 ## [2] == i0 + 0 -1 0 0 0 0 0 0 0 0 0 0 2 ## Arr == A2 + +READ +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 0 0 1 0 0 0 ## [1] == i2 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +3 13 3 6 0 2 +# e/i| Arr [1] [2]| fk0 fk1 fk2 i0 i1 i2 | P0 P1 | 1 + 0 0 -1 0 0 0 0 1 0 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 0 1 0 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +6 +# List of original iterators +fk0 fk1 fk2 i0 i1 i2 +# Statement body expression +S0(i0, i1, i2) + + +# =============================================== Statement 2 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +9 8 4 0 0 2 +# e/i| fk0 fk1 i0 i1 | P0 P1 | 1 + 1 0 0 1 0 0 0 0 ## i0 >= 0 + 1 0 0 -1 0 1 0 -1 ## -i0+P0-1 >= 0 + 1 0 0 0 1 0 0 0 ## i1 >= 0 + 1 0 0 0 -1 0 1 -1 ## -i1+P1-1 >= 0 + 0 0 0 0 0 0 0 0 ## 0 == 0 + 1 -32 0 1 0 0 0 0 ## -32*fk0+i0 >= 0 + 1 32 0 -1 0 0 0 31 ## 32*fk0-i0+31 >= 0 + 1 0 -32 0 1 0 0 0 ## -32*fk1+i1 >= 0 + 1 0 32 0 -1 0 0 31 ## 32*fk1-i1+31 >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +7 15 7 4 0 2 +# e/i| c1 c2 c3 c4 c5 c6 c7 | fk0 fk1 i0 i1 | P0 P1 | 1 + 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 1 ## c1 == 1 + 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 ## c2 == fk0 + 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 0 ## c3 == fk1 + 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 0 ## c4 == i0 + 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 ## c5 == i1 + 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 ## c6 == 0 + 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 ## c7 == 0 + +# ---------------------------------------------- 2.3 Access +READ +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +WRITE +3 11 3 4 0 2 +# e/i| Arr [1] [2]| fk0 fk1 i0 i1 | P0 P1 | 1 + 0 0 -1 0 0 0 1 0 0 0 0 ## [1] == i0 + 0 0 0 -1 0 0 0 1 0 0 0 ## [2] == i1 + 0 -1 0 0 0 0 0 0 0 0 1 ## Arr == A1 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +4 +# List of original iterators +fk0 fk1 i0 i1 +# Statement body expression +S1(i0, i1) + + +# =============================================== Extensions + +# Number of arrays +2 +# Mapping array-identifiers/array-names +1 A1 +2 A2 + + + +kernel_trmm + + +t1 t2 t3 t4 t5 t6 t7 + + + + +[CLooG] INFO: 1 dimensions (over 7) are scalar. +if ((P0 >= 1) && (P1 >= 1)) { + if (P0 >= 2) { + for (t2=0;t2<=floord(P1-1,32);t2++) { + for (t3=0;t3<=floord(P0-2,32);t3++) { + for (t4=t3;t4<=floord(P0-1,32);t4++) { + for (t5=32*t3;t5<=min(min(P0-2,32*t3+31),32*t4+30);t5++) { + for (t6=max(32*t4,t5+1);t6<=min(P0-1,32*t4+31);t6++) { + for (t7=32*t2;t7<=min(P1-1,32*t2+31);t7++) { + S0(t5, t7, t6) + } + } + } + } + } + } + } + for (t2=0;t2<=floord(P0-1,32);t2++) { + for (t3=0;t3<=floord(P1-1,32);t3++) { + for (t4=32*t2;t4<=min(P0-1,32*t2+31);t4++) { + for (t5=32*t3;t5<=min(P1-1,32*t3+31);t5++) { + S1(t4, t5) + } + } + } + } +} +===-------------------------------------------------------------------------=== + ... Pass statistics report ... +===-------------------------------------------------------------------------=== +'func' Pipeline + {anonymous}::RegToMemPass + {anonymous}::InsertRedundantLoadPass +{anonymous}::ExtractScopStmtPass +{anonymous}::PlutoTransformPass +Canonicalizer +Inliner +Canonicalizer + +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.1196 seconds + + ---User Time--- ---Wall Time--- --- Name --- + 0.0009 ( 0.8%) 0.0004 ( 0.3%) 'func' Pipeline + 0.0006 ( 0.5%) 0.0002 ( 0.2%) {anonymous}::RegToMemPass + 0.0003 ( 0.3%) 0.0002 ( 0.1%) {anonymous}::InsertRedundantLoadPass + 0.0005 ( 0.5%) 0.0005 ( 0.5%) {anonymous}::ExtractScopStmtPass + 0.1161 ( 96.7%) 0.1161 ( 97.1%) {anonymous}::PlutoTransformPass + 0.0006 ( 0.5%) 0.0006 ( 0.5%) Canonicalizer + 0.0013 ( 1.1%) 0.0013 ( 1.1%) Inliner + 0.0010 ( 0.8%) 0.0010 ( 0.8%) 'func' Pipeline + 0.0010 ( 0.8%) 0.0010 ( 0.8%) Canonicalizer + 0.0000 ( 0.0%) 0.0000 ( 0.0%) (A) CallGraph + 0.0006 ( 0.5%) 0.0006 ( 0.5%) Canonicalizer + 0.1201 (100.0%) 0.1196 (100.0%) Total diff --git a/example/polybench/split-and-merge/covariance/covariance.splittable.mlir b/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.seq.mlir similarity index 64% rename from example/polybench/split-and-merge/covariance/covariance.splittable.mlir rename to example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.seq.mlir index 0e795070..ec59c334 100644 --- a/example/polybench/split-and-merge/covariance/covariance.splittable.mlir +++ b/example/polybench/split-and-merge/trmm/trmm.nosplit.polymer.seq.mlir @@ -1,10 +1,21 @@ -#map = affine_map<(d0) -> (d0)> +#map0 = affine_map<(d0) -> (d0)> +#map1 = affine_map<(d0) -> (d0 * 32)> +#map2 = affine_map<(d0, d1) -> (1999, d0 * 32 + 32, d1 * 32 + 31)> +#map3 = affine_map<(d0, d1) -> (d0 * 32, d1 + 1)> +#map4 = affine_map<(d0) -> (2000, d0 * 32 + 32)> +#map5 = affine_map<(d0) -> (2600, d0 * 32 + 32)> +#map6 = affine_map<()[s0] -> ((s0 - 1) floordiv 32 + 1)> +#map7 = affine_map<()[s0] -> ((s0 - 2) floordiv 32 + 1)> +#map8 = affine_map<(d0, d1)[s0] -> (s0 - 1, d0 * 32 + 32, d1 * 32 + 31)> +#map9 = affine_map<(d0)[s0] -> (s0, d0 * 32 + 32)> +#set0 = affine_set<()[s0, s1] : (s0 - 1 >= 0, s1 - 1 >= 0)> +#set1 = affine_set<()[s0] : (s0 - 2 >= 0)> module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", llvm.target_triple = "x86_64-unknown-linux-gnu"} { llvm.mlir.global internal constant @str7("==END DUMP_ARRAYS==\0A\00") llvm.mlir.global internal constant @str6("\0Aend dump: %s\0A\00") llvm.mlir.global internal constant @str5("%0.2lf \00") llvm.mlir.global internal constant @str4("\0A\00") - llvm.mlir.global internal constant @str3("cov\00") + llvm.mlir.global internal constant @str3("B\00") llvm.mlir.global internal constant @str2("begin dump: %s\00") llvm.mlir.global internal constant @str1("==BEGIN DUMP_ARRAYS==\0A\00") llvm.mlir.global external @stderr() : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>> @@ -12,125 +23,157 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 llvm.mlir.global internal constant @str0("\00") llvm.func @strcmp(!llvm.ptr, !llvm.ptr) -> i32 func @main(%arg0: i32, %arg1: !llvm.ptr>) -> i32 { - %c3000_i32 = constant 3000 : i32 + %c2000_i32 = constant 2000 : i32 %c2600_i32 = constant 2600 : i32 %c42_i32 = constant 42 : i32 %c0_i64 = constant 0 : i64 %true = constant true %false = constant false + %cst = constant 1.500000e+00 : f64 %c0_i32 = constant 0 : i32 + %cst_0 = constant 1.000000e+00 : f64 + %c1_i32 = constant 1 : i32 %0 = memref.alloca() : memref<1xf64> - %1 = memref.alloc() : memref<3000x2600xf64> - %2 = memref.alloc() : memref<2600x2600xf64> - %3 = memref.alloc() : memref<2600xf64> - %4 = memref.cast %0 : memref<1xf64> to memref - %5 = memref.cast %1 : memref<3000x2600xf64> to memref - call @init_array(%c2600_i32, %c3000_i32, %4, %5) : (i32, i32, memref, memref) -> () + %1 = memref.alloc() : memref<2000x2000xf64> + %2 = memref.alloc() : memref<2000x2600xf64> + %3 = memref.cast %2 : memref<2000x2600xf64> to memref + affine.store %cst, %0[0] : memref<1xf64> + %4 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { + %8 = cmpi slt, %arg2, %c2000_i32 : i32 + scf.condition(%8) %arg2 : i32 + } do { + ^bb0(%arg2: i32): // no predecessors + %8 = index_cast %arg2 : i32 to index + %9 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %12 = cmpi slt, %arg3, %arg2 : i32 + scf.condition(%12) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %12 = index_cast %arg3 : i32 to index + %13 = addi %arg2, %arg3 : i32 + %14 = remi_signed %13, %c2000_i32 : i32 + %15 = sitofp %14 : i32 to f64 + %16 = sitofp %c2000_i32 : i32 to f64 + %17 = divf %15, %16 : f64 + memref.store %17, %1[%8, %12] : memref<2000x2000xf64> + %18 = addi %arg3, %c1_i32 : i32 + scf.yield %18 : i32 + } + memref.store %cst_0, %1[%8, %8] : memref<2000x2000xf64> + %10 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %12 = cmpi slt, %arg3, %c2600_i32 : i32 + scf.condition(%12) %arg3 : i32 + } do { + ^bb0(%arg3: i32): // no predecessors + %12 = index_cast %arg3 : i32 to index + %13 = subi %arg2, %arg3 : i32 + %14 = addi %13, %c2600_i32 : i32 + %15 = remi_signed %14, %c2600_i32 : i32 + %16 = sitofp %15 : i32 to f64 + %17 = sitofp %c2600_i32 : i32 to f64 + %18 = divf %16, %17 : f64 + memref.store %18, %2[%8, %12] : memref<2000x2600xf64> + %19 = addi %arg3, %c1_i32 : i32 + scf.yield %19 : i32 + } + %11 = addi %arg2, %c1_i32 : i32 + scf.yield %11 : i32 + } call @polybench_timer_start() : () -> () - %6 = affine.load %0[0] : memref<1xf64> - %7 = memref.cast %2 : memref<2600x2600xf64> to memref - %8 = memref.cast %3 : memref<2600xf64> to memref - call @kernel_covariance(%c2600_i32, %c3000_i32, %6, %5, %7, %8) : (i32, i32, f64, memref, memref, memref) -> () + %5 = affine.load %0[0] : memref<1xf64> + affine.for %arg2 = 0 to 82 { + affine.for %arg3 = 0 to 63 { + affine.for %arg4 = #map0(%arg3) to 63 { + affine.for %arg5 = #map1(%arg3) to min #map2(%arg3, %arg4) { + affine.for %arg6 = max #map3(%arg4, %arg5) to min #map4(%arg4) { + affine.for %arg7 = #map1(%arg2) to min #map5(%arg2) { + %8 = affine.load %2[%arg5, %arg7] : memref<2000x2600xf64> + %9 = affine.load %1[%arg6, %arg5] : memref<2000x2000xf64> + %10 = affine.load %2[%arg6, %arg7] : memref<2000x2600xf64> + %11 = mulf %9, %10 : f64 + %12 = addf %8, %11 : f64 + affine.store %12, %2[%arg5, %arg7] : memref<2000x2600xf64> + } + } + } + } + } + } + affine.for %arg2 = 0 to 63 { + affine.for %arg3 = 0 to 82 { + affine.for %arg4 = #map1(%arg2) to min #map4(%arg2) { + affine.for %arg5 = #map1(%arg3) to min #map5(%arg3) { + %8 = affine.load %2[%arg4, %arg5] : memref<2000x2600xf64> + %9 = mulf %5, %8 : f64 + affine.store %9, %2[%arg4, %arg5] : memref<2000x2600xf64> + } + } + } + } call @polybench_timer_stop() : () -> () call @polybench_timer_print() : () -> () - %9 = cmpi sgt, %arg0, %c42_i32 : i32 - %10 = scf.if %9 -> (i1) { - %11 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> - %12 = llvm.load %11 : !llvm.ptr> - %13 = llvm.mlir.addressof @str0 : !llvm.ptr> - %14 = llvm.getelementptr %13[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %15 = llvm.call @strcmp(%12, %14) : (!llvm.ptr, !llvm.ptr) -> i32 - %16 = trunci %15 : i32 to i1 - %17 = xor %16, %true : i1 - scf.yield %17 : i1 + %6 = cmpi sgt, %arg0, %c42_i32 : i32 + %7 = scf.if %6 -> (i1) { + %8 = llvm.getelementptr %arg1[%c0_i64] : (!llvm.ptr>, i64) -> !llvm.ptr> + %9 = llvm.load %8 : !llvm.ptr> + %10 = llvm.mlir.addressof @str0 : !llvm.ptr> + %11 = llvm.getelementptr %10[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %12 = llvm.call @strcmp(%9, %11) : (!llvm.ptr, !llvm.ptr) -> i32 + %13 = trunci %12 : i32 to i1 + %14 = xor %13, %true : i1 + scf.yield %14 : i1 } else { scf.yield %false : i1 } - scf.if %10 { - call @print_array(%c2600_i32, %7) : (i32, memref) -> () + scf.if %7 { + call @print_array(%c2000_i32, %c2600_i32, %3) : (i32, i32, memref) -> () } - memref.dealloc %1 : memref<3000x2600xf64> - memref.dealloc %2 : memref<2600x2600xf64> - memref.dealloc %3 : memref<2600xf64> + memref.dealloc %1 : memref<2000x2000xf64> + memref.dealloc %2 : memref<2000x2600xf64> return %c0_i32 : i32 } - func private @init_array(%arg0: i32, %arg1: i32, %arg2: memref, %arg3: memref) { - %c0_i32 = constant 0 : i32 - %c2600_i32 = constant 2600 : i32 - %c1_i32 = constant 1 : i32 - %c3000 = constant 3000 : index - %c2600 = constant 2600 : index - %c0 = constant 0 : index - %c1 = constant 1 : index - %0 = sitofp %arg1 : i32 to f64 - affine.store %0, %arg2[0] : memref - %1 = scf.for %arg4 = %c0 to %c3000 step %c1 iter_args(%arg5 = %c0_i32) -> (i32) { - %2 = index_cast %arg5 : i32 to index - %3 = scf.for %arg6 = %c0 to %c2600 step %c1 iter_args(%arg7 = %c0_i32) -> (i32) { - %5 = index_cast %arg7 : i32 to index - %6 = sitofp %arg5 : i32 to f64 - %7 = sitofp %arg7 : i32 to f64 - %8 = mulf %6, %7 : f64 - %9 = sitofp %c2600_i32 : i32 to f64 - %10 = divf %8, %9 : f64 - memref.store %10, %arg3[%2, %5] : memref - %11 = addi %arg7, %c1_i32 : i32 - scf.yield %11 : i32 - } - %4 = addi %arg5, %c1_i32 : i32 - scf.yield %4 : i32 - } - return - } func private @polybench_timer_start() - func private @kernel_covariance(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref, %arg5: memref) { - %cst = constant 0.000000e+00 : f64 - %cst_0 = constant 1.000000e+00 : f64 - %0 = index_cast %arg1 : i32 to index - %1 = index_cast %arg0 : i32 to index - affine.for %arg6 = 0 to %1 { - affine.store %cst, %arg5[%arg6] : memref - affine.for %arg7 = 0 to %0 { - %4 = affine.load %arg3[%arg7, %arg6] : memref - %5 = affine.load %arg5[%arg6] : memref - %6 = addf %5, %4 : f64 - affine.store %6, %arg5[%arg6] : memref - } - %2 = affine.load %arg5[%arg6] : memref - %3 = divf %2, %arg2 : f64 - affine.store %3, %arg5[%arg6] : memref - } - affine.for %arg6 = 0 to %0 { - affine.for %arg7 = 0 to %1 { - %2 = affine.load %arg5[%arg7] : memref - %3 = affine.load %arg3[%arg6, %arg7] : memref - %4 = subf %3, %2 : f64 - affine.store %4, %arg3[%arg6, %arg7] : memref + func private @polybench_timer_stop() + func private @polybench_timer_print() + func @kernel_trmm(%arg0: i32, %arg1: i32, %arg2: f64, %arg3: memref, %arg4: memref) { + %0 = index_cast %arg0 : i32 to index + %1 = index_cast %arg1 : i32 to index + affine.if #set0()[%0, %1] { + affine.if #set1()[%0] { + affine.for %arg5 = 0 to #map6()[%1] { + affine.for %arg6 = 0 to #map7()[%0] { + affine.for %arg7 = #map0(%arg6) to #map6()[%0] { + affine.for %arg8 = #map1(%arg6) to min #map8(%arg6, %arg7)[%0] { + affine.for %arg9 = max #map3(%arg7, %arg8) to min #map9(%arg7)[%0] { + affine.for %arg10 = #map1(%arg5) to min #map9(%arg5)[%1] { + %2 = affine.load %arg4[%arg8, %arg10] : memref + %3 = affine.load %arg3[%arg9, %arg8] : memref + %4 = affine.load %arg4[%arg9, %arg10] : memref + %5 = mulf %3, %4 : f64 + %6 = addf %2, %5 : f64 + affine.store %6, %arg4[%arg8, %arg10] : memref + } + } + } + } + } + } } - } - affine.for %arg6 = 0 to %1 { - affine.for %arg7 = #map(%arg6) to %1 { - affine.store %cst, %arg4[%arg6, %arg7] : memref - affine.for %arg8 = 0 to %0 { - %5 = affine.load %arg3[%arg8, %arg6] : memref - %6 = affine.load %arg3[%arg8, %arg7] : memref - %7 = mulf %5, %6 {scop.splittable = 0 : index} : f64 - %8 = affine.load %arg4[%arg6, %arg7] : memref - %9 = addf %8, %7 : f64 - affine.store %9, %arg4[%arg6, %arg7] : memref + affine.for %arg5 = 0 to #map6()[%0] { + affine.for %arg6 = 0 to #map6()[%1] { + affine.for %arg7 = #map1(%arg5) to min #map9(%arg5)[%0] { + affine.for %arg8 = #map1(%arg6) to min #map9(%arg6)[%1] { + %2 = affine.load %arg4[%arg7, %arg8] : memref + %3 = mulf %arg2, %2 : f64 + affine.store %3, %arg4[%arg7, %arg8] : memref + } + } } - %2 = subf %arg2, %cst_0 : f64 - %3 = affine.load %arg4[%arg6, %arg7] : memref - %4 = divf %3, %2 : f64 - affine.store %4, %arg4[%arg6, %arg7] : memref - affine.store %4, %arg4[%arg7, %arg6] : memref } } return } - func private @polybench_timer_stop() - func private @polybench_timer_print() - func private @print_array(%arg0: i32, %arg1: memref) { + func private @print_array(%arg0: i32, %arg1: i32, %arg2: memref) { %c0_i64 = constant 0 : i64 %c0_i32 = constant 0 : i32 %c20_i32 = constant 20 : i32 @@ -144,23 +187,23 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %6 = llvm.load %5 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %7 = llvm.mlir.addressof @str2 : !llvm.ptr> %8 = llvm.getelementptr %7[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %9 = llvm.mlir.addressof @str3 : !llvm.ptr> - %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %9 = llvm.mlir.addressof @str3 : !llvm.ptr> + %10 = llvm.getelementptr %9[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr %11 = llvm.call @fprintf(%6, %8, %10) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 - %12 = scf.while (%arg2 = %c0_i32) : (i32) -> i32 { - %25 = cmpi slt, %arg2, %arg0 : i32 - scf.condition(%25) %arg2 : i32 + %12 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { + %25 = cmpi slt, %arg3, %arg0 : i32 + scf.condition(%25) %arg3 : i32 } do { - ^bb0(%arg2: i32): // no predecessors - %25 = index_cast %arg2 : i32 to index - %26 = scf.while (%arg3 = %c0_i32) : (i32) -> i32 { - %28 = cmpi slt, %arg3, %arg0 : i32 - scf.condition(%28) %arg3 : i32 + ^bb0(%arg3: i32): // no predecessors + %25 = index_cast %arg3 : i32 to index + %26 = scf.while (%arg4 = %c0_i32) : (i32) -> i32 { + %28 = cmpi slt, %arg4, %arg1 : i32 + scf.condition(%28) %arg4 : i32 } do { - ^bb0(%arg3: i32): // no predecessors - %28 = index_cast %arg3 : i32 to index - %29 = muli %arg2, %arg0 : i32 - %30 = addi %29, %arg3 : i32 + ^bb0(%arg4: i32): // no predecessors + %28 = index_cast %arg4 : i32 to index + %29 = muli %arg3, %arg0 : i32 + %30 = addi %29, %arg4 : i32 %31 = remi_signed %30, %c20_i32 : i32 %32 = cmpi eq, %31, %c0_i32 : i32 scf.if %32 { @@ -174,20 +217,20 @@ module attributes {llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i6 %34 = llvm.load %33 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %35 = llvm.mlir.addressof @str5 : !llvm.ptr> %36 = llvm.getelementptr %35[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %37 = memref.load %arg1[%25, %28] : memref + %37 = memref.load %arg2[%25, %28] : memref %38 = llvm.call @fprintf(%34, %36, %37) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, f64) -> i32 - %39 = addi %arg3, %c1_i32 : i32 + %39 = addi %arg4, %c1_i32 : i32 scf.yield %39 : i32 } - %27 = addi %arg2, %c1_i32 : i32 + %27 = addi %arg3, %c1_i32 : i32 scf.yield %27 : i32 } %13 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %14 = llvm.load %13 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %15 = llvm.mlir.addressof @str6 : !llvm.ptr> %16 = llvm.getelementptr %15[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr - %17 = llvm.mlir.addressof @str3 : !llvm.ptr> - %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr + %17 = llvm.mlir.addressof @str3 : !llvm.ptr> + %18 = llvm.getelementptr %17[%c0_i64, %c0_i64] : (!llvm.ptr>, i64, i64) -> !llvm.ptr %19 = llvm.call @fprintf(%14, %16, %18) : (!llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>, !llvm.ptr, !llvm.ptr) -> i32 %20 = llvm.mlir.addressof @stderr : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>> %21 = llvm.load %20 : !llvm.ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr>, ptr>, i32, i32, i64, i16, i8, array<1 x i8>, ptr, i64, ptr>, ptr>, ptr>, ptr, i64, i32, array<20 x i8>)>>>