diff --git a/test.sh.in b/test.sh.in index 92877885..8779d861 100755 --- a/test.sh.in +++ b/test.sh.in @@ -223,10 +223,14 @@ done # Openscop inputs echo -e "\nTest with Openscop as input" echo "=============================" -TESTS_OPENSCOP="./test/gemver.scop" +TESTS_OPENSCOP="\ + @top_srcdir@/test/gemver.scop \ + @top_srcdir@/test/simple-case-verification.scop \ + @top_srcdir@/test/simple-case-computation.scop \ + " for file in $TESTS_OPENSCOP; do printf '%-50s ' "$file" - $PLUTO --readscop "$file" --tile --parallel -o "$PLUTO_OUTPUT" 2>&1 | $FILECHECK "$file" + $PLUTO --readscop "$file" --tile --parallel -o "$PLUTO_OUTPUT" 2>&1 | $FILECHECK "$file" check_ret_val_emit_status done diff --git a/test/simple-case-computation.scop b/test/simple-case-computation.scop new file mode 100644 index 00000000..b976b3de --- /dev/null +++ b/test/simple-case-computation.scop @@ -0,0 +1,231 @@ +# [File generated by the OpenScop Library 0.9.5] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +4 4 0 0 0 2 +# e/i|chu. chu.| 1 + 1 1 0 -16 ## chunk_lower-16 >= 0 + 1 -1 1 -1 ## -chunk_lower+chunk_upper-1 >= 0 + 1 1 -1 1024 ## chunk_lower-chunk_upper+1024 >= 0 + 1 0 -1 49999 ## -chunk_upper+49999 >= 0 + +# Parameters are provided +1 + +chunk_lower chunk_upper + + +# Number of statements +2 + +# =============================================== Statement 1 +# Number of relations describing the statement: +3 + +# ---------------------------------------------- 1.1 Domain +DOMAIN +4 6 2 0 0 2 +# e/i|vi_0 vi_1|chu. chu.| 1 + 1 1 0 -1 0 0 ## vi_0-chunk_lower >= 0 + 1 -1 0 0 1 0 ## -vi_0+chunk_upper >= 0 + 1 0 1 0 0 0 ## vi_1 >= 0 + 1 0 -1 0 0 49999 ## -vi_1+49999 >= 0 + +# ---------------------------------------------- 1.2 Scattering +SCATTERING +5 11 5 2 0 2 +# e/i| c1 c2 c3 c4 c5 |vi_0 vi_1|chu. chu.| 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 == vi_0 + 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 == vi_1 + 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0 + +# ---------------------------------------------- 1.3 Access +WRITE +2 8 2 2 0 2 +# e/i| Arr [1]|vi_0 vi_1|chu. chu.| 1 + 0 -1 0 0 0 0 0 1 ## Arr == Mem_1 + 0 0 -1 0 1 0 0 0 ## [1] == vi_1 + +# ---------------------------------------------- 1.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +2 +# List of original iterators +vi_0 vi_1 +# Statement body expression +apollo_bone.nest_0.stmt_0 + + +# =============================================== Statement 2 +# Number of relations describing the statement: +4 + +# ---------------------------------------------- 2.1 Domain +DOMAIN +2 5 1 0 0 2 +# e/i|vi_0|chu. chu.| 1 + 1 1 -1 0 0 ## vi_0-chunk_lower >= 0 + 1 -1 0 1 0 ## -vi_0+chunk_upper >= 0 + +# ---------------------------------------------- 2.2 Scattering +SCATTERING +3 8 3 1 0 2 +# e/i| c1 c2 c3 |vi_0|chu. chu.| 1 + 0 -1 0 0 0 0 0 0 ## c1 == 0 + 0 0 -1 0 1 0 0 0 ## c2 == vi_0 + 0 0 0 -1 0 0 0 1 ## c3 == 1 + +# ---------------------------------------------- 2.3 Access +READ +2 7 2 1 0 2 +# e/i| Arr [1]|vi_0|chu. chu.| 1 + 0 -1 0 0 0 0 1 ## Arr == Mem_1 + 0 0 -1 1 0 0 0 ## [1] == vi_0 + +WRITE +2 7 2 1 0 2 +# e/i| Arr [1]|vi_0|chu. chu.| 1 + 0 -1 0 0 0 0 2 ## Arr == Mem_2 + 0 0 -1 1 0 0 -16 ## [1] == vi_0-16 + +# ---------------------------------------------- 2.4 Statement Extensions +# Number of Statement Extensions +1 + +# Number of original iterators +1 +# List of original iterators +vi_0 +# Statement body expression +apollo_bone.nest_0.stmt_2 + + +# =============================================== Extensions + +# Number of arrays +2 +# Mapping array-identifiers/array-names +1 Mem_1 +2 Mem_2 + + + +# Number of dependences +3 +# Description of dependence 1 +# type +WAW #(output) +# From source statement id +0 +# To target statement id +0 +# Depth +1 +# From source access ref +0 +# To target access ref +0 +# Dimension information +# 1 src-out-dom, 2 src-out-acc, 3 tgt-out-dom, 4 tgt-out-acc +# 5 src-loc-dom, 6 src-loc-acc, 7 tgt-loc-dom, 8 tgt-loc-acc +2 2 2 2 0 0 0 0 +# Dependence domain +UNDEFINED +15 12 4 4 0 2 +# e/i| c1 c2 c3 c4 | i1 i2 i3 i4 | P1 P2 | 1 + 1 1 0 0 0 0 0 0 0 -1 0 0 ## c1-P1 >= 0 + 1 -1 0 0 0 0 0 0 0 0 1 0 ## -c1+P2 >= 0 + 1 0 1 0 0 0 0 0 0 0 0 0 ## c2 >= 0 + 1 0 -1 0 0 0 0 0 0 0 0 49999 ## -c2+49999 >= 0 + 1 0 0 0 0 1 0 0 0 -1 0 0 ## i1-P1 >= 0 + 1 0 0 0 0 -1 0 0 0 0 1 0 ## -i1+P2 >= 0 + 1 0 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 0 -1 0 0 0 0 49999 ## -i2+49999 >= 0 + 0 0 0 -1 0 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 1 0 -1 0 0 0 0 0 0 0 ## c2-c4 == 0 + 0 0 0 0 0 0 0 1 0 0 0 -1 ## i3-1 == 0 + 0 0 0 0 0 0 -1 0 1 0 0 0 ## -i2+i4 == 0 + 0 0 0 -1 0 0 0 1 0 0 0 0 ## c3 == i3 + 0 0 0 0 -1 0 0 0 1 0 0 0 ## c4 == i4 + 1 -1 0 0 0 1 0 0 0 0 0 -1 ## -c1+i1-1 >= 0 +# Description of dependence 2 +# type +RAW #(flow) +# From source statement id +0 +# To target statement id +1 +# Depth +1 +# From source access ref +0 +# To target access ref +0 +# Dimension information +# 1 src-out-dom, 2 src-out-acc, 3 tgt-out-dom, 4 tgt-out-acc +# 5 src-loc-dom, 6 src-loc-acc, 7 tgt-loc-dom, 8 tgt-loc-acc +2 2 1 2 0 0 0 0 +# Dependence domain +UNDEFINED +13 11 4 3 0 2 +# e/i| c1 c2 c3 c4 | i1 i2 i3 | P1 P2 | 1 + 1 1 0 0 0 0 0 0 -1 0 0 ## c1-P1 >= 0 + 1 -1 0 0 0 0 0 0 0 1 0 ## -c1+P2 >= 0 + 1 0 1 0 0 0 0 0 0 0 0 ## c2 >= 0 + 1 0 -1 0 0 0 0 0 0 0 49999 ## -c2+49999 >= 0 + 1 0 0 0 0 1 0 0 -1 0 0 ## i1-P1 >= 0 + 1 0 0 0 0 -1 0 0 0 1 0 ## -i1+P2 >= 0 + 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1 + 0 0 1 0 -1 0 0 0 0 0 0 ## c2-c4 == 0 + 0 0 0 0 0 0 1 0 0 0 -1 ## i2-1 == 0 + 0 0 0 0 0 -1 0 1 0 0 0 ## -i1+i3 == 0 + 0 0 0 -1 0 0 1 0 0 0 0 ## c3 == i2 + 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i3 + 1 -1 0 0 0 1 0 0 0 0 0 ## -c1+i1 >= 0 +# Description of dependence 3 +# type +WAR #(anti) +# From source statement id +1 +# To target statement id +0 +# Depth +1 +# From source access ref +0 +# To target access ref +0 +# Dimension information +# 1 src-out-dom, 2 src-out-acc, 3 tgt-out-dom, 4 tgt-out-acc +# 5 src-loc-dom, 6 src-loc-acc, 7 tgt-loc-dom, 8 tgt-loc-acc +1 2 2 2 0 0 0 0 +# Dependence domain +UNDEFINED +13 11 3 4 0 2 +# e/i| c1 c2 c3 | i1 i2 i3 i4 | P1 P2 | 1 + 1 1 0 0 0 0 0 0 -1 0 0 ## c1-P1 >= 0 + 1 -1 0 0 0 0 0 0 0 1 0 ## -c1+P2 >= 0 + 1 0 0 0 1 0 0 0 -1 0 0 ## i1-P1 >= 0 + 1 0 0 0 -1 0 0 0 0 1 0 ## -i1+P2 >= 0 + 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0 + 1 0 0 0 0 -1 0 0 0 0 49999 ## -i2+49999 >= 0 + 0 0 -1 0 0 0 0 0 0 0 1 ## c2 == 1 + 0 1 0 -1 0 0 0 0 0 0 0 ## c1-c3 == 0 + 0 0 0 0 0 0 1 0 0 0 -1 ## i3-1 == 0 + 0 0 0 0 0 -1 0 1 0 0 0 ## -i2+i4 == 0 + 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i3 + 0 0 0 -1 0 0 0 1 0 0 0 ## c3 == i4 + 1 -1 0 0 1 0 0 0 0 0 -1 ## -c1+i1-1 >= 0 + + + diff --git a/test/simple-case-verification.scop b/test/simple-case-verification.scop new file mode 100644 index 00000000..27a8748e --- /dev/null +++ b/test/simple-case-verification.scop @@ -0,0 +1,36 @@ +# [File generated by the OpenScop Library 0.9.5] + + + +# =============================================== Global +# Language +C + +# Context +CONTEXT +4 4 0 0 0 2 +# e/i|chu. chu.| 1 + 1 1 0 -16 ## chunk_lower-16 >= 0 + 1 -1 1 -1 ## -chunk_lower+chunk_upper-1 >= 0 + 1 1 -1 1024 ## chunk_lower-chunk_upper+1024 >= 0 + 1 0 -1 49999 ## -chunk_upper+49999 >= 0 + +# Parameters are provided +1 + +chunk_lower chunk_upper + + +# Number of statements +0 + +# =============================================== Extensions + +# Number of arrays +2 +# Mapping array-identifiers/array-names +1 Mem_1 +2 Mem_2 + + + diff --git a/tool/osl_pluto.c b/tool/osl_pluto.c index f0deff62..f7fffa75 100644 --- a/tool/osl_pluto.c +++ b/tool/osl_pluto.c @@ -1501,15 +1501,20 @@ static Dep **deps_read(osl_dependence_p candlDeps, PlutoProg *prog) { switch (candl_dep->type) { case OSL_DEPENDENCE_RAW: dep->type = PLUTO_DEP_RAW; + break; case OSL_DEPENDENCE_WAW: dep->type = PLUTO_DEP_WAW; + break; case OSL_DEPENDENCE_WAR: dep->type = PLUTO_DEP_WAR; + break; case OSL_DEPENDENCE_RAR: dep->type = PLUTO_DEP_RAR; + break; case OSL_UNDEFINED: default: dep->type = PLUTO_DEP_UNDEFINED; + break; } dep->src = candl_dep->label_source; dep->dest = candl_dep->label_target; @@ -1666,7 +1671,10 @@ PlutoProg *osl_scop_to_pluto_prog(osl_scop_p scop, PlutoContext *context) { osl_statement_p scop_stmt = scop->statement; - prog->nvar = osl_statement_get_nb_iterators(scop_stmt); + // osl_scop_to_pluto_prog crashes if scop->statement is null + // which can happen on empty scop. To fix that, we prevent + // the call to osl_statement_get_nb_iterators + prog->nvar = !scop_stmt ? 0 : osl_statement_get_nb_iterators(scop_stmt); max_sched_rows = 0; for (i = 0; i < prog->nstmts; i++) { int stmt_num_iter = osl_statement_get_nb_iterators(scop_stmt);