code-containers-impl.lp
No OneTemporary

File Metadata

Created
Sun, Feb 15, 11:08 PM

code-containers-impl.lp

%defines
impl(llvm_array; llvm_const_array; on_the_fly).
op(seqaccess). op(randaccess).
relation(recommends; satisfied; unsupported).
relation_score(satisfied, 0).
relation_score(recommends, 1).
relation_score(unsupported, -1).
score(-1..1).
%domain facts:
relation_op(seqaccess, on_the_fly, recommends).
relation_op(randaccess, llvm_const_array, recommends).
relation_op(randaccess, on_the_fly, unsupported).
%dfa analysis:
dfa_connection((5,0),(4,0),strong).
v((5,0)). %c c = b : [num];
v((3,0)). %a2 a2 = [1 .. 100] : [num];
v((4,0)). %b b = loop map (a1 -> el: num) : [num]
v((2,0)). %a1 a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] : [num];
%compilation:
bind((5,0), op(randaccess)).
bind((4,0),impl(llvm_array)).
bind((3,0),impl(on_the_fly)).
bind((3,0),op(seqaccess)).
bind((2,0),op(seqaccess)).
bind((2,0),impl(llvm_const_array)).
%domain rules:
-impl_fulfill(OP, IMPL) :- relation_op(OP, IMPL, unsupported).
impl_fulfill(OP, IMPL, SCORE):- SCORE = #sum{SCORE1, (OP, IMPL, RL): relation_op(OP, IMPL, RL),relation_score(RL, SCORE1)}
; op(OP); impl(IMPL); not -impl_fulfill(OP, IMPL).
cluster_root(VAR) :- not dfa_connection(VAR, _, strong), v(VAR).
var_cluster(VAR0, VAR_TO) :- dfa_connection(VAR_TO, VAR0, strong), cluster_root(VAR0).
var_cluster(VAR0, VAR_TO2) :- dfa_connection(VAR_TO2, VAR_TO1, strong), var_cluster(VAR0, VAR_TO1).
var_cluster(VAR0, VAR0):- cluster_root(VAR0).
-impl_fulfill_cluster(Var0, Impl) :- var_cluster(Var0, Var_Any); bind(Var_Any, op(Op)); -impl_fulfill(Op, Impl).
impl_fulfill_cluster(VAR0, IMPL, Score) :-
Score = #sum{SCORE, (OP, IMPL, VAR_ANY): impl_fulfill(OP, IMPL, SCORE), var_cluster(VAR0, VAR_ANY), bind(VAR_ANY, op(OP))}
; bind(VAR0, impl(IMPL)); cluster_root(VAR0); not -impl_fulfill_cluster(VAR0, IMPL).
%optimization:
% #maximize {SCORE, (VAR0, IMPL) : impl_fulfill_cluster(VAR0, IMPL, SCORE)}.
#show var_cluster/2.
#show impl_fulfill_cluster/3.

Event Timeline