Knowledge (XXG)

Dead-code elimination

Source đź“ť

858:
load and relocation method(s) used, the individual features included, and the configuration options specified in the command line. Due to the large number of command line switches and options supported (around fifty switches with multiple possible settings) there is a high number of feature combinations with uncountable dependencies resulting in endless number of different target images. FreeKEYB's Dynamic Dead Code Elimination technique manages to resolve these dependencies and remove dead code and data is not restricted to include or exclude a somewhat limited number of modules or whole sub-routines and fix up some dispatch tables as in classical TSR programming, but works at byte level able to remove individual instructions in the middle of larger routines distributed all over the code to handle a particular case or support a specific feature special tools are used to analyze the code and create fixup tables automated using conditional defines to declare the various cases not only optional at assembly time but at initialization time without the overhead of having at least some amount of dead code left in the runtime image to keep track of all the dependencies between these conditionals, dynamically build and relocate the runtime image, fix up all the references between these small, changing, and moving binary parts still allowing to use the tiny .COM/.SYS style model is done at initialization time API to import and export object structures between FreeKEYB and the calling application to transparently resize and move them internally at runtime
498:(for example different versions of an operating system, or different sets and combinations of drivers or services loaded in a particular target environment), which may require different sets of special cases in the code, but at the same time become conditionally dead code for the other cases. Also, the software (for example, a driver or resident service) may be configurable to include or exclude certain features depending on user preferences, rendering unused code portions useless in a particular scenario. While modular software may be developed to dynamically load libraries on demand only, in most cases, it is not possible to load only the relevant routines from a particular library, and even if this would be supported, a routine may still include code sections which can be considered dead code in a given scenario, but could not be ruled out at compile time, already. 1045:, so you can at installation time specify which components of the driver you want and which you don't. This goes to an extent of dynamic loadable modularization and late linkage I have not seen under DOS so far. If you do not like the screen saver, macros, the calculator, or mouse support, or <almost anything else>, you can specify this at the command line, and FreeKEYB, while taking all the dependencies between the routines into account, will completely remove all the code fragments, which deal with that feature and are not necessary to provide the requested functionality, before the driver relocates the image into the target location and makes itself resident. Removing some smaller features just saves a couple of bytes but excluding more complex components can save you half a Kb and more. You can also specify the size of the data areas 819:), or it can be disabled or enabled at any later time via API functions in case someone wants to keep a user from being able to reboot the machine. we are considering to add more synchronous cache flush calls Due to our Dynamic Dead Code Elimination method this would not cause any kind of bloating when not needed in a particular target configuration as a particular cache flush call would be included in FreeKEYB's runtime image only if the corresponding disk cache is loaded as well or FreeKEYB was told by command line switches to load the corresponding support. 857:
FreeKEYB builds the driver's runtime image at initialization time depending on the type of machine it is being loaded on, the type of keyboard, layout, country and code page used, the type of mouse and video adapter(s) installed, the other drivers loaded on that system, the operating system and the
1225:
technology which removes at byte level any code snippets unused in a particular given driver, user, or system configuration and hardware environment when the driver's installer builds and relocates the load image of itself, this would have no memory impact for non-GEOS users at all, so there's not
280:
Most advanced compilers have options to activate dead-code elimination, sometimes at varying levels. A lower level might only remove instructions that cannot be executed. A higher level might also not reserve space for unused variables. A yet higher level might determine instructions or functions
948:
depending on the underlying hardware, operating system, and driver configuration as well as the selected feature set and locale (about sixty configuration switches with hundreds of options for an almost unlimited number of possible combinations). This complexity and the dynamics are hidden from
995:, die die jeweils notwendigen Bestandteile des Treibers erst zum Installationszeitpunkt zusammenbastelt und reloziert, so daß keine ungenutzten Code- oder Datenbereiche mehr resident bleiben (z.B. wenn jemand ein bestimmtes FreeKEYB-Feature nicht benötigt). 455:
insert new computations into the code and render the older, more expensive computations dead. Subsequent dead-code elimination removes those calculations and completes the effect (without complicating the strength-reduction algorithm).
1396:
Johng, Yessong; Danielsson, Per; Ehnsiö, Per; Hermansson, Mats; Jolanki, Mika; Moore, Scott; Strander, Lars; Wettergren, Lars (2002-11-08). "Chapter 5. Java overview and iSeries implementation - 5.1.1. Miscellaneous components".
953:
widely distributed in Germany at its time, with adaptations to a handful of other European languages available. It supported a sub-set of features already, but did not implement dynamic dead-code elimination.)
1082:
the loader will dynamically optimize the resident data areas and code sections at byte level to remove any redundancy from the driver depending on the given hardware/software/driver configuration and locale.
1400:
Intentia Movex Java on the IBM iSeries Server - An Implementation Guide - Overview of Movex Java on the iSeries server - Movex Java on iSeries installation and configuration - Operational tips and techniques
246:
Furthermore, because the first return statement is executed unconditionally and there is no label after it which a "goto" could reach, no feasible execution path reaches the second assignment to
66:
size, an important consideration in some contexts, it reduces resource usage such as the number of bytes to be transferred and it allows the running program to avoid executing irrelevant
1694: 639:
Malavolta, Ivano et al. “JavaScript Dead Code Identification, Elimination, and Empirical Assessment.” IEEE transactions on software engineering 49.7 (2023): 3692–3714. Web.
471:
form by Ron Cytron et al. Robert Shillingsburg (aka Shillner) improved on the algorithm and developed a companion algorithm for removing useless control-flow operations.
1261: 1721: 1455: 440:, the code inside the if statement can never be executed, and dead-code elimination would remove it entirely from the optimized program. This technique is common in 1252: 1868: 451:
In practice, much of the dead code that an optimizer finds is created by other transformations in the optimizer. For example, the classic techniques for operator
1070: 501:
The techniques used to dynamically detect demand, identify and resolve dependencies, remove such conditionally dead code, and to recombine the remaining code at
1160: 1312: 273:
of this function. Furthermore, given the function returns a static value (96), it may be simplified to the value it returns (this simplification is called
1205: 1126: 979: 1902: 815:
any of the options can be "permanently" excluded at installation time (will also save the memory for the corresponding code excerpts due to our
1629: 949:
users, who deal with a single executable file just like they would do with a conventional driver. K3PLUS was an extended keyboard driver for
565: 1217:
I would be willing to add special hooks into FreeKEYB, our much advanced DOS keyboard driver, would it prove to improve the usability under
1714: 1647:
Muth, Robert; Debray, Saumya K.; Watterson, Scott; De Bosschere, Koen (January 2001) . "alto: a link-time optimizer for the Compaq Alpha".
1372: 1029: 773: 1368: 1176:
to optimize its memory image for the target environment at load time, I would certainly like to add special support into FreeKEYB for
845: 1683: 1459: 2074: 1587: 1558: 1528: 1520: 1421: 269:
Also, even though some calculations are performed in the function, their values are not stored in locations accessible outside the
1951: 1852: 1597: 1415: 718: 694: 678: 654: 74:. It can also enable further optimizations by simplifying program structure. Dead code includes code that can never be executed ( 2100: 1993: 1707: 1360: 650: 803: 1259: 570: 1670: 1888: 1328: 1222: 1173: 1042: 992: 925: 894: 816: 464: 1250: 1972: 585: 2023: 1988: 610: 1278: 444:
to optionally activate blocks of code; using an optimizer with dead-code elimination eliminates the need for using a
1058: 1912: 1787: 1613: 1580: 1550: 1148: 879: 1767: 1007: 620: 580: 544: 529: 1300: 1180:
which could be controlled by a command line option, so the extra code is only loaded when GEOS is used as well.
1488: 1245: 1117:[Loading drivers dynamically (Intra-segment offset relocation to load TSRs into the HMA)] (in German). 537: 91: 1193: 494:, which may not be known at the time of compilation or assembly. Such conditions may be imposed by different 1772: 1538: 1114: 967: 702: 662: 575: 1493:
Proceedings of the ACM SIGPLAN 1997 Conference on Programming Language Design and Implementation (PLDI '97)
1920: 1897: 1873: 1802: 1656: 929: 917: 605: 2049: 2044: 1925: 1749: 1744: 528:, therefore software utilizing dynamic dead-code elimination is very rare in conjunction with languages 71: 55: 1353: 901:
as well as a framework of automatic pre- and post-processing analysis tools to generate dependency and
2079: 2003: 1847: 1508: 1449:"Virtualization Support for Application Runtime Specialization and Extension - Programming Languages" 1283: 62:(code that does not affect the program results). Removing such code has several benefits: it shrinks 490:
However, in practice it is also common for code sections to represent dead or unreachable code only
2059: 1930: 1822: 1730: 1661: 1621: 1339: 1066: 941: 937: 506: 495: 270: 1156: 2054: 2018: 1837: 1827: 1777: 1674: 1600:; Allen, Randy (2002). "Chapter 4.4. Data Flow Analysis - Chapter 4.4.2. Dead Code Elimination". 837: 520:
Most programming languages, compilers and operating systems offer no or little more support than
460: 452: 1021: 1935: 1759: 1635: 1625: 1583: 1554: 1524: 1411: 1308: 1003: 921: 769: 714: 674: 533: 483:. Therefore, it is reasonable attempting to remove dead code through dead-code elimination at 1115:"Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)" 2069: 2008: 1878: 1857: 1817: 1797: 1666: 1601: 1500: 1304: 1197: 1152: 1118: 1062: 971: 284:
A common use of dead-code elimination is as an alternative to optional code inclusion via a
274: 262:
elsewhere in the procedure, then a feasible execution path might exist to the assignment to
75: 1239: 543:
Although with a rather different focus, similar approaches are sometimes also utilized for
2064: 1448: 1398: 1324: 1265: 1256: 1201: 909: 898: 886: 765: 757: 735: 590: 521: 67: 31: 1602: 1122: 975: 795: 2039: 2013: 1812: 1807: 1792: 1609: 1572: 1436: 1241:
A Just in Time Register Allocation and Code Optimization Framework for Embedded Systems
945: 615: 595: 560: 2094: 1543: 1513: 902: 710: 698: 670: 658: 437: 79: 17: 740:
Efficiently Computing Static Single Assignment Form and the Program Dependence Graph
1226:
much to worry about (memory footprint etc.) as in traditionally coded DOS drivers.
600: 548: 525: 484: 445: 285: 255: 1678: 459:
Historically, dead-code elimination was performed using information derived from
243:
and an optimizer can reclaim its storage space and eliminate its initialization.
1782: 913: 1862: 1568: 1504: 1364: 743: 63: 27:
Compiler optimization to remove code which does not affect the program results
1956: 1491:(June 1997). "Partial dead code elimination using slicing transformations". 1407: 933: 905: 890: 502: 441: 59: 998:(NB. This represents the first known implementation of byte-level granular 1604:
Optimizing Compilers for Modern Architectures: A Dependence-Based Approach
1699: 1617: 82:(written to, but never read again), that is, irrelevant to the program. 1218: 1177: 882: 1285: 885:-based dynamically configurable successor of K3PLUS supporting most 1671:
10.1002/1097-024X(200101)31:1<67::AID-SPE357>3.0.CO;2-A
215:
Simple analysis of the uses of values would show that the value of
1639: 1338:, though only conceptually and with a focus on lazy evaluation in 1100:
FreeKEYB - Advanced international DOS keyboard and console driver
1703: 950: 697:(June 1981). "A Survey of Data-flow Analysis Techniques". In 1695:
How to trick C/C++ compilers into generating terrible code?
254:
and can be removed. If the procedure had a more complex
1093: 1091: 1575:; Jacobs, Ceriel J. H.; Langendoen, Koen G. (2000). 1354:"Dynamic Dead-Instruction Detection and Elimination" 1279:"Dynamic dead code elimination and hardware futures" 868: 866: 540:
may dynamically optimize for dead-code elimination.
2032: 1981: 1965: 1944: 1911: 1887: 1836: 1758: 1737: 1294: 1292: 1248:, Engineering: Computer Engineering. ucin982089462. 875:
FreeKEYB - Enhanced DOS keyboard and console driver
258:, such as a label after the return statement and a 1542: 1512: 1359:. San Jose, CA, USA: Computer Science Department, 944:to minimize its memory footprint downto close the 873:Paul, Matthias R.; Frinke, Axel C. (1997-10-13) , 657:(June 1981). "Reduction of Operator Strength". In 1098:Paul, Matthias R.; Frinke, Axel C. (2006-01-16), 831: 829: 827: 467:(SSA) appears in the original journal article on 436:Because the expression 0 will always evaluate to 1456:Universite des Sciences et Technologies de Lille 1022:"[fd-dev] Changing codepages in FreeDOS" 961: 959: 789: 787: 785: 1334:(NB. Possibly the first public use of the term 707:Program Flow Analysis: Theory & Application 667:Program Flow Analysis: Theory & Application 1869:Induction variable recognition and elimination 738:; Rosen, Barry K.; Zadeck, F. Kenneth (1991). 219:after the first assignment is not used inside 1715: 8: 1515:Compilers - Principles, Techniques and Tools 924:, the driver implements byte-level granular 1545:Advanced Compiler Design and Implementation 1352:Butts, J. Adam; Sohi, Guri (October 2002). 1722: 1708: 1700: 1458:. pp. 111–124. HAL Id: tel-01251173. 536:. However, language implementations doing 281:that serve no purpose and eliminate them. 90:Consider the following example written in 1660: 1903:Sparse conditional constant propagation 1238:Thammanur, Sathyanarayan (2001-01-31). 1102:(User Manual) (v7 preliminary ed.) 968:"[ANN] FreeDOS beta 6 released" 632: 227:is declared as a local variable inside 1608:(2011 digital print of 1st ed.). 479:Dead code is normally considered dead 231:, so its value cannot be used outside 566:Simplification (symbolic computation) 7: 515:dynamic dead-instruction elimination 1194:"AltGr keyboard layer under GEOS?" 25: 1649:Software: Practice and Experience 1521:Addison Wesley Publishing Company 1059:"KEYBOARD.SYS internal structure" 993:dynamischen Dead-Code-Elimination 794:Paul, Matthias R. (2002-04-03) . 147:/* Assignment to dead variable */ 1853:Common subexpression elimination 1192:Paul, Matthias R. (2002-03-15). 1147:Paul, Matthias R. (2002-02-24). 1113:Paul, Matthias R. (2002-02-02). 1057:Paul, Matthias R. (2001-12-30). 1020:Paul, Matthias R. (2001-08-21). 966:Paul, Matthias R. (2001-04-10). 836:Paul, Matthias R. (2002-04-06). 1994:Compile-time function execution 1465:from the original on 2017-06-23 1427:from the original on 2013-10-08 1378:from the original on 2019-04-20 1361:University of Wisconsin-Madison 1315:from the original on 2017-09-09 1208:from the original on 2019-04-20 1163:from the original on 2019-04-20 1129:from the original on 2017-09-09 1073:from the original on 2017-09-09 1032:from the original on 2019-04-19 982:from the original on 2017-09-09 848:from the original on 2019-04-27 838:"[fd-dev] Ctrl+Alt+Del" 806:from the original on 2017-09-09 796:"[fd-dev] Ctrl+Alt+Del" 288:. Consider the following code. 571:Partial-redundancy elimination 78:), and code that only affects 1: 1336:dynamic dead-code elimination 1329:dynamic dead code elimination 1299:Conway, Andrew (1995-12-04). 1223:Dynamic Dead Code Elimination 1221:Due to our sophisticated new 1174:dynamic dead-code-elimination 1043:dynamic dead code elimination 1000:dynamic dead-code elimination 926:dynamic dead-code elimination 897:. Utilizing an off-the-shelf 877:(User Manual) (v6.5 ed.) 817:Dynamic Dead Code Elimination 511:dynamic dead-code elimination 475:Dynamic dead-code elimination 465:static single-assignment form 1973:Interprocedural optimization 586:Dynamic coupling (computing) 2024:Profile-guided optimization 1989:Bounds-checking elimination 1581:John Wiley & Sons, Inc. 1149:"GEOS/NDO info for RBIL62?" 1041:a unique feature we call 611:Profile-guided optimization 2117: 1788:Loop-invariant code motion 1614:Morgan Kaufmann Publishers 1551:Morgan Kaufmann Publishers 1447:Polito, Guillermo (2015). 760:; Torczon, Linda (2003) . 448:to perform the same task. 250:. Thus, the assignment is 1768:Automatic parallelization 1277:Glew, Andy (2011-03-02). 940:and reconfigurability at 621:Function multi-versioning 581:Dynamic software updating 545:dynamic software updating 1539:Muchnick, Steven Stanley 1301:"Cyclic data structures" 1246:University of Cincinnati 1172:Since FreeKEYB uses our 1067:comp.os.msdos.programmer 908:to be embedded into the 703:Muchnick, Steven Stanley 663:Muchnick, Steven Stanley 538:just-in-time compilation 492:under certain conditions 463:. An algorithm based on 290: 96: 1773:Automatic vectorization 1371:1-58113-574-2/02/0010. 1157:comp.os.geos.programmer 991:brandneue Feature, der 916:and a self-discarding, 576:Conjunction elimination 2101:Compiler optimizations 1921:Instruction scheduling 1898:Global value numbering 1874:Live-variable analysis 1803:Loop nest optimization 1731:Compiler optimizations 1577:Modern Compiler Design 1008:compiled ahead-of-time 762:Engineering a Compiler 606:Post-pass optimization 530:compiled ahead-of-time 198:/* Unreachable code */ 2050:Control-flow analysis 2045:Array-access analysis 1999:Dead-code elimination 1957:Tail-call elimination 1926:Instruction selection 1750:Local value numbering 1745:Peephole optimization 1509:Ullman, Jeffrey David 235:. Thus, the variable 56:compiler optimization 36:dead-code elimination 18:Dead code elimination 2080:Value range analysis 2004:Expression templates 1848:Available expression 1340:functional languages 1309:comp.lang.functional 496:runtime environments 70:, which reduces its 2060:Dependence analysis 1931:Register allocation 1823:Software pipelining 938:self-modifying code 881:(NB. FreeKEYB is a 48:dead-code stripping 2055:Data-flow analysis 2019:Partial evaluation 1828:Strength reduction 1778:Induction variable 1487:BodĂ­k, Rastislav; 1264:2019-07-28 at the 1255:2019-07-28 at the 768:. pp. 498ff. 461:data-flow analysis 453:strength reduction 2088: 2087: 1936:Rematerialization 1631:978-1-55860-286-1 1501:Aho, Alfred Vaino 1202:comp.os.geos.misc 922:relocating loader 534:assembly language 524:of libraries and 44:dead-code removal 16:(Redirected from 2108: 2070:Pointer analysis 2009:Inline expansion 1879:Use-define chain 1858:Constant folding 1818:Loop unswitching 1798:Loop interchange 1724: 1717: 1710: 1701: 1682: 1664: 1643: 1624:, 145–147, 167. 1607: 1593: 1564: 1548: 1534: 1518: 1496: 1474: 1473: 1471: 1470: 1464: 1453: 1444: 1438: 1435: 1433: 1432: 1426: 1420:. SG24-6545-00. 1405: 1393: 1387: 1386: 1384: 1383: 1377: 1358: 1349: 1343: 1333: 1321: 1320: 1296: 1287: 1282: 1274: 1268: 1249: 1235: 1229: 1228: 1214: 1213: 1189: 1183: 1182: 1169: 1168: 1144: 1138: 1137: 1135: 1134: 1123:de.comp.os.msdos 1110: 1104: 1103: 1095: 1086: 1085: 1079: 1078: 1054: 1048: 1047: 1038: 1037: 1017: 1011: 997: 988: 987: 976:de.comp.os.msdos 963: 954: 887:keyboard layouts 878: 870: 861: 860: 854: 853: 833: 822: 821: 812: 811: 791: 780: 779: 775:978-1-55860698-2 758:Cooper, Keith D. 754: 748: 747: 736:Ferrante, Jeanne 734:Cytron, Ron K.; 731: 725: 724: 691: 685: 684: 649:Allen, Frances; 646: 640: 637: 432: 429: 426: 423: 420: 417: 414: 411: 408: 405: 402: 399: 396: 393: 390: 387: 384: 381: 378: 375: 372: 369: 366: 363: 360: 357: 354: 351: 348: 345: 342: 339: 336: 333: 330: 327: 324: 321: 318: 315: 312: 309: 306: 303: 300: 297: 294: 275:constant folding 265: 261: 249: 238: 234: 230: 226: 222: 218: 211: 208: 205: 202: 199: 196: 193: 190: 187: 184: 181: 178: 175: 172: 169: 166: 163: 160: 157: 154: 151: 148: 145: 142: 139: 136: 133: 130: 127: 124: 121: 118: 115: 112: 109: 106: 103: 100: 76:unreachable code 21: 2116: 2115: 2111: 2110: 2109: 2107: 2106: 2105: 2091: 2090: 2089: 2084: 2065:Escape analysis 2033:Static analysis 2028: 1977: 1961: 1940: 1913:Code generation 1907: 1883: 1839: 1832: 1754: 1733: 1728: 1691: 1646: 1632: 1596: 1590: 1573:Bal, Henri Elle 1567: 1561: 1537: 1531: 1499: 1486: 1483: 1481:Further reading 1478: 1477: 1468: 1466: 1462: 1451: 1446: 1445: 1441: 1430: 1428: 1424: 1418: 1403: 1395: 1394: 1390: 1381: 1379: 1375: 1356: 1351: 1350: 1346: 1325:Lazy evaluation 1318: 1316: 1298: 1297: 1290: 1276: 1275: 1271: 1266:Wayback Machine 1257:Wayback Machine 1237: 1236: 1232: 1211: 1209: 1191: 1190: 1186: 1166: 1164: 1146: 1145: 1141: 1132: 1130: 1112: 1111: 1107: 1097: 1096: 1089: 1076: 1074: 1056: 1055: 1051: 1035: 1033: 1019: 1018: 1014: 985: 983: 965: 964: 957: 910:executable file 899:macro assembler 872: 871: 864: 851: 849: 835: 834: 825: 809: 807: 793: 792: 783: 776: 766:Morgan Kaufmann 756: 755: 751: 733: 732: 728: 721: 693: 692: 688: 681: 648: 647: 643: 638: 634: 629: 591:Self-relocation 557: 522:dynamic loading 481:unconditionally 477: 434: 433: 430: 427: 424: 421: 418: 415: 412: 409: 406: 403: 400: 397: 394: 391: 388: 385: 382: 379: 376: 373: 370: 367: 364: 361: 358: 355: 352: 349: 346: 343: 340: 337: 334: 331: 328: 325: 322: 319: 316: 313: 310: 307: 304: 301: 298: 295: 292: 263: 259: 247: 236: 232: 228: 224: 223:. Furthermore, 220: 216: 213: 212: 209: 206: 203: 200: 197: 194: 191: 188: 185: 182: 179: 176: 173: 170: 167: 164: 161: 158: 155: 152: 149: 146: 143: 140: 137: 134: 131: 128: 125: 122: 119: 116: 113: 110: 107: 104: 101: 98: 88: 52:dead-code strip 32:compiler theory 28: 23: 22: 15: 12: 11: 5: 2114: 2112: 2104: 2103: 2093: 2092: 2086: 2085: 2083: 2082: 2077: 2075:Shape analysis 2072: 2067: 2062: 2057: 2052: 2047: 2042: 2040:Alias analysis 2036: 2034: 2030: 2029: 2027: 2026: 2021: 2016: 2014:Jump threading 2011: 2006: 2001: 1996: 1991: 1985: 1983: 1979: 1978: 1976: 1975: 1969: 1967: 1963: 1962: 1960: 1959: 1954: 1948: 1946: 1942: 1941: 1939: 1938: 1933: 1928: 1923: 1917: 1915: 1909: 1908: 1906: 1905: 1900: 1894: 1892: 1885: 1884: 1882: 1881: 1876: 1871: 1866: 1860: 1855: 1850: 1844: 1842: 1834: 1833: 1831: 1830: 1825: 1820: 1815: 1813:Loop unrolling 1810: 1808:Loop splitting 1805: 1800: 1795: 1793:Loop inversion 1790: 1785: 1780: 1775: 1770: 1764: 1762: 1756: 1755: 1753: 1752: 1747: 1741: 1739: 1735: 1734: 1729: 1727: 1726: 1719: 1712: 1704: 1698: 1697: 1690: 1689:External links 1687: 1686: 1685: 1662:10.1.1.33.4933 1644: 1630: 1610:Academic Press 1594: 1588: 1565: 1559: 1535: 1529: 1497: 1482: 1479: 1476: 1475: 1439: 1416: 1388: 1344: 1288: 1269: 1230: 1184: 1139: 1105: 1087: 1049: 1012: 955: 946:canonical form 932:techniques at 912:alongside the 862: 823: 781: 774: 749: 726: 719: 699:Jones, Neil D. 686: 679: 659:Jones, Neil D. 641: 631: 630: 628: 625: 624: 623: 618: 616:Superoptimizer 613: 608: 603: 598: 596:Software cruft 593: 588: 583: 578: 573: 568: 563: 561:Redundant code 556: 553: 532:or written in 476: 473: 291: 97: 87: 84: 80:dead variables 26: 24: 14: 13: 10: 9: 6: 4: 3: 2: 2113: 2102: 2099: 2098: 2096: 2081: 2078: 2076: 2073: 2071: 2068: 2066: 2063: 2061: 2058: 2056: 2053: 2051: 2048: 2046: 2043: 2041: 2038: 2037: 2035: 2031: 2025: 2022: 2020: 2017: 2015: 2012: 2010: 2007: 2005: 2002: 2000: 1997: 1995: 1992: 1990: 1987: 1986: 1984: 1980: 1974: 1971: 1970: 1968: 1964: 1958: 1955: 1953: 1952:Deforestation 1950: 1949: 1947: 1943: 1937: 1934: 1932: 1929: 1927: 1924: 1922: 1919: 1918: 1916: 1914: 1910: 1904: 1901: 1899: 1896: 1895: 1893: 1890: 1886: 1880: 1877: 1875: 1872: 1870: 1867: 1864: 1861: 1859: 1856: 1854: 1851: 1849: 1846: 1845: 1843: 1841: 1835: 1829: 1826: 1824: 1821: 1819: 1816: 1814: 1811: 1809: 1806: 1804: 1801: 1799: 1796: 1794: 1791: 1789: 1786: 1784: 1781: 1779: 1776: 1774: 1771: 1769: 1766: 1765: 1763: 1761: 1757: 1751: 1748: 1746: 1743: 1742: 1740: 1736: 1732: 1725: 1720: 1718: 1713: 1711: 1706: 1705: 1702: 1696: 1693: 1692: 1688: 1684: 1680: 1676: 1672: 1668: 1663: 1658: 1655:(1): 67–101. 1654: 1650: 1645: 1641: 1637: 1633: 1627: 1623: 1619: 1615: 1611: 1606: 1605: 1599: 1595: 1591: 1589:0-471-97697-0 1585: 1582: 1578: 1574: 1570: 1566: 1562: 1560:1-55860-320-4 1556: 1552: 1547: 1546: 1540: 1536: 1532: 1530:0-201-10194-7 1526: 1522: 1517: 1516: 1510: 1506: 1502: 1498: 1494: 1490: 1485: 1484: 1480: 1461: 1457: 1450: 1443: 1440: 1437: 1423: 1419: 1413: 1409: 1406:. Red Books. 1402: 1401: 1392: 1389: 1374: 1370: 1366: 1362: 1355: 1348: 1345: 1341: 1337: 1332: 1330: 1327:is basically 1326: 1314: 1310: 1306: 1302: 1295: 1293: 1289: 1286: 1284: 1280: 1273: 1270: 1267: 1263: 1260: 1258: 1254: 1251: 1247: 1244:(MS thesis). 1243: 1242: 1234: 1231: 1227: 1224: 1220: 1207: 1203: 1199: 1195: 1188: 1185: 1181: 1179: 1175: 1162: 1158: 1154: 1150: 1143: 1140: 1128: 1124: 1120: 1116: 1109: 1106: 1101: 1094: 1092: 1088: 1084: 1072: 1068: 1064: 1060: 1053: 1050: 1046: 1044: 1031: 1027: 1023: 1016: 1013: 1009: 1005: 1002:for software 1001: 996: 994: 981: 977: 973: 970:(in German). 969: 962: 960: 956: 952: 947: 943: 939: 935: 931: 927: 923: 919: 915: 911: 907: 904: 903:code morphing 900: 896: 895:country codes 892: 888: 884: 880: 876: 869: 867: 863: 859: 847: 843: 839: 832: 830: 828: 824: 820: 818: 805: 801: 797: 790: 788: 786: 782: 777: 771: 767: 763: 759: 753: 750: 745: 741: 737: 730: 727: 722: 716: 712: 711:Prentice-Hall 708: 704: 700: 696: 690: 687: 682: 676: 672: 671:Prentice-Hall 668: 664: 660: 656: 652: 645: 642: 636: 633: 626: 622: 619: 617: 614: 612: 609: 607: 604: 602: 599: 597: 594: 592: 589: 587: 584: 582: 579: 577: 574: 572: 569: 567: 564: 562: 559: 558: 554: 552: 550: 546: 541: 539: 535: 531: 527: 523: 518: 516: 512: 508: 504: 499: 497: 493: 488: 486: 482: 474: 472: 470: 466: 462: 457: 454: 449: 447: 443: 439: 289: 287: 282: 278: 276: 272: 267: 257: 253: 244: 242: 95: 93: 85: 83: 81: 77: 73: 69: 65: 61: 57: 53: 49: 45: 41: 37: 33: 19: 1998: 1652: 1648: 1603: 1598:Kennedy, Ken 1576: 1544: 1514: 1492: 1489:Gupta, Rajiv 1467:. Retrieved 1442: 1429:. Retrieved 1417:0-73842461-7 1410:p. 41. 1399: 1391: 1380:. Retrieved 1347: 1335: 1323: 1317:. Retrieved 1272: 1240: 1233: 1216: 1210:. Retrieved 1187: 1171: 1165:. Retrieved 1142: 1131:. Retrieved 1108: 1099: 1081: 1075:. Retrieved 1052: 1040: 1034:. Retrieved 1025: 1015: 999: 990: 984:. Retrieved 874: 856: 850:. Retrieved 841: 814: 808:. Retrieved 799: 761: 752: 739: 729: 720:0-13729681-9 706: 695:Kennedy, Ken 689: 680:0-13729681-9 666: 655:Kennedy, Ken 644: 635: 601:Tree shaking 549:hot patching 542: 526:late linking 519: 514: 510: 500: 491: 489: 485:compile time 480: 478: 468: 458: 450: 446:preprocessor 435: 286:preprocessor 283: 279: 268: 256:control flow 251: 245: 240: 214: 89: 72:running time 51: 47: 43: 39: 35: 29: 1865:elimination 1783:Loop fusion 1738:Basic block 1620:. pp.  1569:Grune, Dick 1505:Sethi, Ravi 1026:freedos-dev 936:as well as 914:binary code 842:freedos-dev 800:freedos-dev 651:Cocke, John 509:are called 392:/* DEBUG */ 252:unreachable 1945:Functional 1863:Dead store 1640:2001092381 1495:: 682–694. 1469:2017-06-23 1431:2019-04-20 1382:2017-06-23 1319:2017-07-03 1212:2019-04-20 1167:2019-04-20 1133:2017-07-02 1077:2017-07-03 1036:2019-04-20 986:2017-07-02 930:relocation 891:code pages 852:2019-04-27 810:2017-09-09 744:ACM TOPLAS 627:References 68:operations 58:to remove 1838:Data-flow 1657:CiteSeerX 1408:IBM Corp. 1305:Newsgroup 1198:Newsgroup 1153:Newsgroup 1119:Newsgroup 1063:Newsgroup 1004:assembled 972:Newsgroup 934:load-time 906:meta data 442:debugging 60:dead code 2095:Category 1840:analysis 1618:Elsevier 1541:(1997). 1511:(1986). 1460:Archived 1422:Archived 1373:Archived 1313:Archived 1262:Archived 1253:Archived 1206:Archived 1161:Archived 1127:Archived 1071:Archived 1030:Archived 980:Archived 942:run-time 918:relaxing 846:Archived 804:Archived 705:(eds.). 665:(eds.). 555:See also 401:"%d 86:Examples 1307::  1200::  1155::  1121::  1065::  974::  883:Unicode 507:runtime 64:program 54:) is a 1966:Global 1891:-based 1679:442062 1677:  1659:  1638:  1628:  1586:  1557:  1527:  1414:  1365:ASPLOS 893:, and 772:  746:13(4). 717:  677:  422:return 407:" 395:printf 201:return 177:return 1982:Other 1675:S2CID 1463:(PDF) 1452:(PDF) 1425:(PDF) 1404:(PDF) 1376:(PDF) 1357:(PDF) 438:false 271:scope 50:, or 1760:Loop 1636:LCCN 1626:ISBN 1584:ISBN 1555:ISBN 1525:ISBN 1412:ISBN 1219:GEOS 1178:GEOS 928:and 920:and 770:ISBN 715:ISBN 675:ISBN 547:and 503:load 302:void 296:main 260:goto 241:dead 108:void 1889:SSA 1667:doi 1622:137 1369:ACM 1006:or 951:DOS 513:or 505:or 469:SSA 341:int 326:int 311:int 293:int 277:). 239:is 233:foo 229:foo 221:foo 150:int 132:int 117:int 102:foo 99:int 40:DCE 30:In 2097:: 1673:. 1665:. 1653:31 1651:. 1634:. 1616:/ 1612:/ 1579:. 1571:; 1553:. 1549:. 1523:. 1519:. 1507:; 1503:; 1454:. 1367:X 1363:. 1342:.) 1331:. 1322:. 1311:. 1303:. 1291:^ 1215:. 1204:. 1196:. 1170:. 1159:. 1151:. 1125:. 1090:^ 1080:. 1069:. 1061:. 1039:. 1028:. 1024:. 1010:.) 989:. 978:. 958:^ 889:, 865:^ 855:. 844:. 840:. 826:^ 813:. 802:. 798:. 784:^ 764:. 742:. 713:. 709:. 701:; 673:. 669:. 661:; 653:; 551:. 517:. 487:. 416:); 404:\n 377:if 374:); 266:. 192:24 141:25 126:24 94:. 46:, 42:, 34:, 1723:e 1716:t 1709:v 1681:. 1669:: 1642:. 1592:. 1563:. 1533:. 1472:. 1434:. 1385:. 1281:. 1136:. 778:. 723:. 683:. 431:} 428:; 425:c 419:} 413:c 410:, 398:( 389:{ 386:) 383:0 380:( 371:2 368:/ 365:b 362:( 359:* 356:a 353:= 350:c 347:; 344:c 338:; 335:6 332:= 329:b 323:; 320:5 317:= 314:a 308:{ 305:) 299:( 264:b 248:b 237:b 225:b 217:b 210:} 207:; 204:0 195:; 189:= 186:b 183:; 180:c 174:; 171:4 168:* 165:a 162:= 159:c 156:; 153:c 144:; 138:= 135:b 129:; 123:= 120:a 114:{ 111:) 105:( 92:C 38:( 20:)

Index

Dead code elimination
compiler theory
compiler optimization
dead code
program
operations
running time
unreachable code
dead variables
C
control flow
scope
constant folding
preprocessor
false
debugging
preprocessor
strength reduction
data-flow analysis
static single-assignment form
compile time
runtime environments
load
runtime
dynamic loading
late linking
compiled ahead-of-time
assembly language
just-in-time compilation
dynamic software updating

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑