Daniel Jurjo-Rivas, Jose F. Morales, Pedro López-García, Manuel V. Hermenegildo
{"title":"Abstract Environment Trimming","authors":"Daniel Jurjo-Rivas, Jose F. Morales, Pedro López-García, Manuel V. Hermenegildo","doi":"arxiv-2408.09848","DOIUrl":null,"url":null,"abstract":"Variable sharing is a fundamental property in the static analysis of logic\nprograms, since it is instrumental for ensuring correctness and increasing\nprecision while inferring many useful program properties. Such properties\ninclude modes, determinacy, non-failure, cost, etc. This has motivated\nsignificant work on developing abstract domains to improve the precision and\nperformance of sharing analyses. Much of this work has centered around the\nfamily of set-sharing domains, because of the high precision they offer.\nHowever, this comes at a price: their scalability to a wide set of realistic\nprograms remains challenging and this hinders their wider adoption. In this\nwork, rather than defining new sharing abstract domains, we focus instead on\ndeveloping techniques which can be incorporated in the analyzers to address\naspects that are known to affect the efficiency of these domains, such as the\nnumber of variables, without affecting precision. These techniques are inspired\nin others used in the context of compiler optimizations, such as expression\nreassociation and variable trimming. We present several such techniques and\nprovide an extensive experimental evaluation of over 1100 program modules taken\nfrom both production code and classical benchmarks. This includes the\nSpectector cache analyzer, the s(CASP) system, the libraries of the Ciao\nsystem, the LPdoc documenter, the PLAI analyzer itself, etc. The experimental\nresults are quite encouraging: we have obtained significant speed-ups, and,\nmore importantly, the number of modules that require a timeout was cut in half.\nAs a result, many more programs can be analyzed precisely in reasonable times.","PeriodicalId":501197,"journal":{"name":"arXiv - CS - Programming Languages","volume":null,"pages":null},"PeriodicalIF":0.0000,"publicationDate":"2024-08-19","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"0","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"arXiv - CS - Programming Languages","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/arxiv-2408.09848","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 0
Abstract
Variable sharing is a fundamental property in the static analysis of logic
programs, since it is instrumental for ensuring correctness and increasing
precision while inferring many useful program properties. Such properties
include modes, determinacy, non-failure, cost, etc. This has motivated
significant work on developing abstract domains to improve the precision and
performance of sharing analyses. Much of this work has centered around the
family of set-sharing domains, because of the high precision they offer.
However, this comes at a price: their scalability to a wide set of realistic
programs remains challenging and this hinders their wider adoption. In this
work, rather than defining new sharing abstract domains, we focus instead on
developing techniques which can be incorporated in the analyzers to address
aspects that are known to affect the efficiency of these domains, such as the
number of variables, without affecting precision. These techniques are inspired
in others used in the context of compiler optimizations, such as expression
reassociation and variable trimming. We present several such techniques and
provide an extensive experimental evaluation of over 1100 program modules taken
from both production code and classical benchmarks. This includes the
Spectector cache analyzer, the s(CASP) system, the libraries of the Ciao
system, the LPdoc documenter, the PLAI analyzer itself, etc. The experimental
results are quite encouraging: we have obtained significant speed-ups, and,
more importantly, the number of modules that require a timeout was cut in half.
As a result, many more programs can be analyzed precisely in reasonable times.