Hi,
this is a report derived from a crash in Polly:
https://github.com/llvm/llvm-project/issues/180000
$ gcc isltrace.c -o isltrace -I ~/src/isl/include/ -L ~/src/isl -g -l isl
$ ./isltrace
### ISL version : isl-0.27-326-g3dfaad2d-IMath-32-cmake
### at generation: isl-0.27-77-g99a07a03-IMath-32
/home/meinersbur/src/isl/isl_ast_build_expr.c:2211: cannot handle void
expression
Aborted (core dumped)
gdb stack trace:
#0 __pthread_kill_implementation (no_tid=0, signo=6,
threadid=<optimized out>) at ./nptl/pthread_kill.c:44
#1 __pthread_kill_internal (signo=6, threadid=<optimized out>) at
./nptl/pthread_kill.c:78
#2 __GI___pthread_kill (threadid=<optimized out>,
signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3 0x00007fffff5c527e in __GI_raise (sig=sig@entry=6) at
../sysdeps/posix/raise.c:26
#4 0x00007fffff5a88ff in __GI_abort () at ./stdlib/abort.c:79
#5 0x0000000008087f6f in isl_handle_error (ctx=0x81fe390,
error=isl_error_invalid, msg=0x819eb00 "cannot handle void
expression", file=0x819eac0
"/home/meinersbur/src/isl/isl_ast_build_expr.c", line=2211) at
/home/meinersbur/src/isl/isl_ctx.c:158
#6 0x0000000008061bda in isl_from_pw_aff_data_init
(data=0x7ffffffea5d0, build=0x8215610, pa=0x82128a0) at
/home/meinersbur/src/isl/isl_ast_build_expr.c:2211
#7 0x0000000008063028 in isl_ast_build_expr_from_pw_aff_internal
(build=0x8215610, pa=0x82128a0) at
/home/meinersbur/src/isl/isl_ast_build_expr.c:2767
#8 0x0000000008063274 in isl_ast_build_with_arguments
(build=0x8215610, type=isl_ast_expr_op_call, arg0=0x8212b40,
mpa=0x82120d0) at /home/meinersbur/src/isl/isl_ast_build_expr.c:2854
#9 0x00000000080634c2 in isl_ast_build_from_multi_pw_aff_internal
(build=0x8215610, type=isl_ast_expr_op_call, mpa=0x82120d0) at
/home/meinersbur/src/isl/isl_ast_build_expr.c:2937
#10 0x0000000008063517 in isl_ast_build_from_pw_multi_aff_internal
(build=0x8215610, type=isl_ast_expr_op_call, pma=0x82111c0) at
/home/meinersbur/src/isl/isl_ast_build_expr.c:2957
#11 0x00000000080637a3 in isl_ast_build_call_from_executed
(build=0x8215610, executed=0x82076c0) at
/home/meinersbur/src/isl/isl_ast_build_expr.c:3089
#12 0x000000000806ea8f in isl_ast_graft_alloc_domain
(executed=0x82076c0, build=0x8215610) at
/home/meinersbur/src/isl/isl_ast_graft.c:111
#13 0x0000000008063aaa in add_domain (executed=0x82076c0,
data=0x7ffffffea8e0) at /home/meinersbur/src/isl/isl_ast_codegen.c:167
#14 0x0000000008063bf6 in generate_domain (executed=0x82076c0,
user=0x7ffffffea8e0) at /home/meinersbur/src/isl/isl_ast_codegen.c:221
#15 0x0000000008159b9d in call_on_copy (entry=0x8214048,
user=0x7ffffffea890) at /home/meinersbur/src/isl/isl_union_map.c:615
#16 0x0000000008091c6d in isl_hash_table_foreach (ctx=0x81fe390,
table=0x8210a10, fn=0x8159b4f <call_on_copy>, user=0x7ffffffea890) at
/home/meinersbur/src/isl/isl_hash.c:227
#17 0x0000000008159c5b in isl_union_map_foreach_map (umap=0x8210a00,
fn=0x8063b35 <generate_domain>, user=0x7ffffffea8e0) at
/home/meinersbur/src/isl/isl_union_map.c:636
#18 0x0000000008063e68 in generate_inner_level (executed=0x8210a00,
build=0x82143b0) at /home/meinersbur/src/isl/isl_ast_codegen.c:313
#19 0x000000000806bac2 in build_ast_from_leaf (build=0x82143b0,
node=0x8212b40, executed=0x8210a00) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5172
#20 0x000000000806cba2 in build_ast_from_schedule_node
(build=0x82143b0, node=0x8212b40, executed=0x8210a00) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5761
#21 0x000000000806cd5e in build_ast_from_child (build=0x82143b0,
node=0x8212b40, executed=0x8210a00) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5809
#22 0x000000000806c4ce in build_ast_from_filter (build=0x82143b0,
node=0x8212b40, executed=0x8210a00) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5527
#23 0x000000000806cc66 in build_ast_from_schedule_node
(build=0x82143b0, node=0x8212b40, executed=0x8210b40) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5774
#24 0x000000000806cadd in build_ast_from_sequence (build=0x82143b0,
node=0x8210b10, executed=0x8210b40) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5727
#25 0x000000000806ccb7 in build_ast_from_schedule_node
(build=0x82143b0, node=0x8210b10, executed=0x8210b40) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5781
#26 0x000000000806cd5e in build_ast_from_child (build=0x82143b0,
node=0x8210b10, executed=0x8210b40) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5809
#27 0x0000000008063dff in generate_inner_level (executed=0x8210b40,
build=0x82143b0) at /home/meinersbur/src/isl/isl_ast_codegen.c:305
#28 0x000000000806b44e in generate_next_level (executed=0x8210b40,
build=0x82142b0) at /home/meinersbur/src/isl/isl_ast_codegen.c:4847
#29 0x0000000008065a33 in create_node_scaled (executed=0x8210b40,
bounds=0x8211cd0, domain=0x8210d30, build=0x8211920) at
/home/meinersbur/src/isl/isl_ast_codegen.c:1491
#30 0x0000000008065f4f in create_node (executed=0x8210b40,
bounds=0x820e1d0, domain=0x8210d30, build=0x8210890) at
/home/meinersbur/src/isl/isl_ast_codegen.c:1683
#31 0x000000000806648a in add_node (list=0x82109d0,
executed=0x8210b40, bounds=0x820e1d0, build=0x8210890) at
/home/meinersbur/src/isl/isl_ast_codegen.c:1820
#32 0x0000000008066bb4 in generate_sorted_domains
(domain_list=0x820d710, executed=0x820f210, build=0x8210890) at
/home/meinersbur/src/isl/isl_ast_codegen.c:2057
#33 0x0000000008066e4c in generate_parallel_domains
(domain_list=0x820d710, executed=0x820f210, build=0x8210890) at
/home/meinersbur/src/isl/isl_ast_codegen.c:2175
#34 0x0000000008068cb2 in generate_shifted_component_tree_base
(executed=0x820f210, build=0x8210890, isolated=0) at
/home/meinersbur/src/isl/isl_ast_codegen.c:3371
#35 0x000000000806926c in generate_shifted_component_tree
(executed=0x820f210, build=0x8210890) at
/home/meinersbur/src/isl/isl_ast_codegen.c:3607
#36 0x0000000008069645 in generate_shifted_component
(executed=0x820f210, build=0x8208470) at
/home/meinersbur/src/isl/isl_ast_codegen.c:3674
#37 0x0000000008069759 in generate_shifted_component_from_list
(domain=0x8204dc0, order=0x8208ac0, n=2, build=0x8208470) at
/home/meinersbur/src/isl/isl_ast_codegen.c:3719
#38 0x000000000806a456 in generate_component (domain=0x8204dc0,
order=0x8208ac0, n=2, build=0x8208470) at
/home/meinersbur/src/isl/isl_ast_codegen.c:4236
#39 0x000000000806b2a1 in generate_components (executed=0x8200b10,
build=0x8208470) at /home/meinersbur/src/isl/isl_ast_codegen.c:4789
#40 0x000000000806b493 in generate_next_level (executed=0x8200b10,
build=0x8208470) at /home/meinersbur/src/isl/isl_ast_codegen.c:4855
#41 0x000000000806bdad in build_ast_from_band (build=0x8208470,
node=0x81ffa20, executed=0x8200b10) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5262
#42 0x000000000806cbbe in build_ast_from_schedule_node
(build=0x820a090, node=0x81ffa20, executed=0x8209200) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5763
#43 0x000000000806cd5e in build_ast_from_child (build=0x820a090,
node=0x81ffa20, executed=0x8209200) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5809
#44 0x000000000806cec4 in build_ast_from_domain (build=0x820a090,
node=0x81ffa20) at /home/meinersbur/src/isl/isl_ast_codegen.c:5864
#45 0x000000000806cfdd in isl_ast_build_node_from_schedule
(build=0x8209f90, schedule=0x8201640) at
/home/meinersbur/src/isl/isl_ast_codegen.c:5906
#46 0x0000000008010797 in main () at isltrace.c:2464
The issue seems to be that isl_ast_build has "e != 0" in its domain:
domain: [e] -> { : (e > 0 and e <= 127) or (e >= -128 and e < 0) }
generated: [e] -> { : (e > 0 and e <= 127) or (e >= -128 and e < 0) }
pending: [e] -> { : }
iterators: ()
values: [e] -> { [] -> [] }
strides: []
offsets: [e] -> { [] -> [] }
internal2input: [e] -> { [] -> [] }
but the schedule
domain: "[e] -> { Stmt_for_body9_us94_last[i0] : 0 <= i0 <= 1;
Stmt_cond_false30_us97[i0] : e = 0 and 0 <= i0 <= 1 }"
child:
# YOU ARE HERE
schedule: "[e] -> [{ Stmt_for_body9_us94_last[i0] -> [(i0)];
Stmt_cond_false30_us97[i0] -> [(i0)] }]"
child:
sequence:
- filter: "[e] -> { Stmt_for_body9_us94_last[i0] }"
- filter: "[e] -> { Stmt_cond_false30_us97[i0] }"
has `Stmt_cond_false30_us97` requiring "e == 0" to execute. The
intersection with isl_ast_build's domain is therefore empty.
The behavior I would expect here is that no AST node for
Stmt_cond_false30_us97 emitted; it is never executed. This is what
happens when using isl_schedule_intersect_domain on that schedule
before passing it to isl_ast_build_node_from_schedule, and what I
would make Polly do if this is not considered a bug in isl.
Michael
--
Tardyzentrismus verboten!