Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions test.sh.in
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Comment on lines +227 to +229
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These scop files need to have at least one CHECK line comment of the expected output.

"
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

Expand Down
231 changes: 231 additions & 0 deletions test/simple-case-computation.scop
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
# [File generated by the OpenScop Library 0.9.5]

<OpenScop>

# =============================================== 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
<strings>
chunk_lower chunk_upper
</strings>

# 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
<body>
# Number of original iterators
2
# List of original iterators
vi_0 vi_1
# Statement body expression
apollo_bone.nest_0.stmt_0
</body>

# =============================================== 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
<body>
# Number of original iterators
1
# List of original iterators
vi_0
# Statement body expression
apollo_bone.nest_0.stmt_2
</body>

# =============================================== Extensions
<arrays>
# Number of arrays
2
# Mapping array-identifiers/array-names
1 Mem_1
2 Mem_2
</arrays>

<dependence>
# 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
</dependence>

</OpenScop>
36 changes: 36 additions & 0 deletions test/simple-case-verification.scop
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# [File generated by the OpenScop Library 0.9.5]

<OpenScop>

# =============================================== 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
<strings>
chunk_lower chunk_upper
</strings>

# Number of statements
0

# =============================================== Extensions
<arrays>
# Number of arrays
2
# Mapping array-identifiers/array-names
1 Mem_1
2 Mem_2
</arrays>

</OpenScop>
10 changes: 9 additions & 1 deletion tool/osl_pluto.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Loading