package Ġorg . run est ar . classic de ob Ċ Ċ import Ġorg . object web . asm . Op codes .* Ċ import Ġorg . object web . asm . tree . Class Node Ċ import Ġorg . object web . asm . tree . Var Insn Node Ċ Ċ object ĠRemove Unused Math Ġ: ĠTransformer . Single () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġtransform ( klass : ĠClass Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( m Ġin Ġklass . methods ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloads Ġ= ĠHashSet < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstores Ġ= ĠHashMap < Int , ĠVar Insn Node >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( insn Ġin Ġm . instructions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( insn Ġ! is ĠVar Insn Node ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( insn . opcode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI LOAD Ġ-> Ġloads . add ( insn .` var `) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI STORE Ġ-> Ġstores [ insn .` var `] Ġ= Ġinsn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunused Stores Ġ= Ġstores . filter Ġ{ Ġit . key Ġ! in Ġloads Ġ}. map Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore @ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( store Ġin Ġunused Stores ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpre vs Ġ= Ġm . instructions . toArray (). take While Ġ{ Ġit Ġ!= Ġstore Ġ}. take Last ( 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġpre vs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( p . opcode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI LOAD , ĠI ADD , ĠI DIV , ĠIS UB , ĠI REM , ĠB IP USH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI CONST _ 0 , ĠI CONST _ 1 , ĠI CONST _ 2 , ĠI CONST _ 3 , ĠI CONST _ 4 , ĠI CONST _ 5 , ĠI CONST _ M 1 Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcontinue @ store ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġpre vs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm . instructions . remove ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm . instructions . remove ( store ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }