Mainstream kompilatorer innehåller ett stort antal peephole optimeringar, som utför algebraisk förenkling av inmatningsprogrammet med lokal omskrivning av koden. Dessa optimeringar är en ständig källa till buggar. Vår senaste forskning om Alive, ett domänspecifikt språk för att uttrycka peephole optimeringar i LLVM, tar upp en del av problemet genom att automatiskt verifiera riktigheten av dessa optimeringar och generera C++ kod för användning med LLVM. Detta papper identifierar en klass av icke-terminering buggar som uppstår när en svit av peephole optimeringar utförs tills en fast punkt. En optimering kan upphäva effekten av en annan optimering i sviten, vilket resulterar i icke-avslutande sammanställning. I detta dokument (1) föreslås en metod för att upptäcka icke-terminering buggar med en svit av peephole optimeringar, (2) identifierar det nödvändiga villkoret för att säkerställa uppsägning medan komponera peephole optimeringar, och (3) ger felsökning stöd genom att generera konkreta inmatningsprogram som orsakar icke-avslutande sammanställning. Vi har upptäckt 184 optimeringssekvenser, omfattande 38 optimeringar, som orsakar icke-avslutande sammanställning i LLVM med Alive-genererad C++-kod.
Vårt senaste arbete har utforskat kompilator non-termination fel med en svit av peephole optimeringar REF, som vanligtvis inträffar när lönsamhetsmått ingår i förutsättningen.
Termination-checking for LLVM peephole optimizations
{'venue': "ICSE '16", 'journal': None, 'mag_field_of_study': ['Computer Science']}