Knowledge (XXG)

Intermediate representation

Source đź“ť

788:
intermediate language, of which the compact, binary serialized representation is also referred to as "bitcode" and has been productized by Apple. Like GIMPLE Bytecode, LLVM Bitcode is useful in link-time optimization. Like GCC, LLVM also targets some IRs meant for direct distribution, including
530:
which do not output object or machine code themselves, but output the intermediate language only. This intermediate language is submitted to a compiler for such language, which then outputs finished object or machine code. This is usually done to ease the process of
794: 1150: 350: 478:, where the source code of a program is translated into a form more suitable for code-improving transformations before being used to generate 823:
is a toolbox for binary files analysis and reverse-engineering. It uses the intermediate languages ESIL and REIL to analyze binary files.
682: 1080: 1054: 1038: 638:, V, and others make use of C as an intermediate language. Variants of C have been designed to provide C's features as a portable 837: 184: 532: 527: 343: 805:) with the potential to generate code for different heterogeneous targets, and to combine the outputs of different compilers. 1145: 611: 552: 718: 587: 228: 438:
and re-arrangement before execution. Use of an intermediate representation such as this allows compiler systems like the
671: 599: 277: 635: 603: 579: 740: 619: 447: 412: 336: 863: 607: 201: 172: 568: 548: 256: 178: 901: 486:
code for a target machine. The design of an intermediate language typically differs from that of a practical
816: 747: 728: 647: 540: 439: 309: 234: 113: 324: 768: 431: 392: 283: 61: 388: 206: 189: 101: 91: 42: 847: 262: 78: 31: 808:
The ILOC intermediate language is used in classes on compiler design as a simple target language.
520: 512: 1107: 27:
Data structure or code used internally by a compiler or virtual machine to represent source code
403:
of any particular source or target language. An IR may take one of several forms: an in-memory
1050: 1045:
by W. A. Barrett 2007, paraphrasing Keith Cooper and Linda Torczon, "Engineering a Compiler",
732: 639: 572: 556: 544: 713: 487: 483: 471: 467: 56: 1084: 760:. (Lower-level than GENERIC; input for most optimizers; has a compact "bytecode" notation.) 1046: 1042: 868: 802: 776:(converted from GIMPLE in the now-defunct llvm-gcc which uses LLVM optimizers and codegen) 753: 681:
While most intermediate languages are designed to support statically typed languages, the
654: 499: 495: 451: 380: 238: 222: 118: 1035: 1066: 872: 842: 675: 658: 404: 372: 196: 96: 430:
transforms the linear human-readable text representing a program into an intermediate
1139: 790: 665: 435: 17: 858: 505: 151: 71: 731:(GCC) uses several intermediate languages internally to simplify portability and 494:
Each instruction represents exactly one fundamental operation; e.g. "shift-add"
479: 384: 292: 273: 141: 136: 978: 926: 551:. Languages used for this fall in complexity between high-level languages and 108: 685:
is designed to support dynamically typed languages—initially Perl and Python.
631: 583: 399:– capable of representing the source code without loss of information – and 156: 30:"Intermediate form" redirects here. For the use of the term in biology, see 674:
is an intermediate language designed to be shared by all compilers for the
1000: 526:
The term is also used to refer to languages used as intermediates by some
852: 586:
and other operating systems has made it a popular intermediate language:
475: 416: 376: 146: 66: 426:
A canonical example is found in most modern compilers. For example, the
820: 595: 536: 427: 287: 243: 757: 721: 707: 698: 623: 615: 591: 268: 957: 387:. An IR is designed to be conducive to further processing, such as 877: 692: 688: 627: 408: 319: 419:
readable by the program. In the latter case it is also called an
832: 785: 781: 773: 702: 443: 315: 252: 247: 819:
tools often use an intermediate representation. For instance,
643: 539:
by using an intermediate language that has compilers for many
567:
Though not explicitly designed as an intermediate language,
1022: 678:, before static or dynamic compilation to machine code. 508:
information may not be included in the instruction set.
764:
GCC supports generating these IRs, as a final target:
927:"The Challenge of Cross-language Interoperability" 797:. A further development within LLVM is the use of 446:to be used by many different source languages to 902:"CS320: Compilers: Intermediate Representation" 519:A popular format for intermediate languages is 344: 8: 661:can be considered an intermediate language: 351: 337: 38: 895: 893: 889: 799:Multi-Level Intermediate Representation 515:available may be large, even limitless. 301: 214: 164: 128: 48: 41: 7: 1151:Programming language classification 784:compiler framework is based on the 474:. The term comes from their use in 470:designed to aid in the analysis of 683:Parrot intermediate representation 302:Notable compilers & toolchains 25: 1083:. Radare2 Project. Archived from 1106:Sebastian Porst (7 March 2010). 838:Interlingual machine translation 774:LLVM Intermediate Representation 528:high-level programming languages 925:Chow, Fred (22 November 2013). 571:'s nature as an abstraction of 958:"Intermediate Representations" 1: 375:or code used internally by a 1108:"The REIL language – Part I" 735:. Among these languages are 691:is used by compilers on the 672:Common Intermediate Language 259:target-specific initializer) 981:. Hacker News. 10 June 2015 618:'s Smalltalk-subset Slang, 490:in three fundamental ways: 365:intermediate representation 86:Intermediate representation 1167: 1067:"CISC 471 Compiler Design" 1001:"LLVM Bitcode File Format" 741:Register Transfer Language 450:for many different target 29: 864:Source-to-source compiler 653:Any language targeting a 979:"Bitcode (iOS, watchOS)" 575:and its ubiquity as the 1132:The Stanford SUIF Group 729:GNU Compiler Collection 648:C Intermediate Language 440:GNU Compiler Collection 310:GNU Compiler Collection 235:Common Language Runtime 1079:Radare2 Contributors. 769:HSA Intermediate Layer 466:is the language of an 395:. A "good" IR must be 165:Compilation strategies 1146:Compiler construction 464:intermediate language 458:Intermediate language 421:intermediate language 190:Compile and go system 18:Intermediate language 848:Abstract syntax tree 263:Java virtual machine 185:Tracing just-in-time 1036:"An ILOC Simulator" 855:(Intermediate code) 555:languages, such as 513:processor registers 428:CPython interpreter 79:Optimizing compiler 32:Transitional fossil 1041:2009-05-07 at the 746:the tree language 557:assembly languages 521:three-address code 1087:on 18 August 2015 733:cross-compilation 640:assembly language 545:operating systems 472:computer programs 361: 360: 43:Program execution 16:(Redirected from 1158: 1120: 1119: 1117: 1115: 1103: 1097: 1096: 1094: 1092: 1076: 1070: 1064: 1058: 1033: 1027: 1026: 1019: 1013: 1012: 1010: 1008: 997: 991: 990: 988: 986: 975: 969: 968: 966: 964: 953: 947: 946: 944: 942: 922: 916: 915: 913: 911: 906: 905:(Lecture slides) 897: 714:Microsoft P-Code 710:precompiled code 502:are not present. 496:addressing modes 488:machine language 468:abstract machine 353: 346: 339: 215:Notable runtimes 202:Transcompilation 49:General concepts 39: 21: 1166: 1165: 1161: 1160: 1159: 1157: 1156: 1155: 1136: 1135: 1129: 1124: 1123: 1113: 1111: 1105: 1104: 1100: 1090: 1088: 1078: 1077: 1073: 1065: 1061: 1047:Morgan Kaufmann 1043:Wayback Machine 1034: 1030: 1021: 1020: 1016: 1006: 1004: 999: 998: 994: 984: 982: 977: 976: 972: 962: 960: 955: 954: 950: 940: 938: 924: 923: 919: 909: 907: 904: 900:Walker, David. 899: 898: 891: 886: 869:Graph rewriting 829: 817:Static analysis 814: 739:the historical 655:virtual machine 580:system language 565: 535:or to increase 500:microprocessors 460: 432:graph structure 407:, or a special 381:virtual machine 357: 237:(CLR) and  223:Android Runtime 119:Virtual machine 35: 28: 23: 22: 15: 12: 11: 5: 1164: 1162: 1154: 1153: 1148: 1138: 1137: 1134: 1133: 1128: 1127:External links 1125: 1122: 1121: 1110:. zynamics.com 1098: 1071: 1059: 1028: 1014: 992: 970: 948: 917: 888: 887: 885: 882: 881: 880: 875: 873:term rewriting 866: 861: 856: 850: 845: 843:Pivot language 840: 835: 828: 825: 813: 810: 778: 777: 771: 762: 761: 750: 744: 725: 724: 716: 711: 705: 696: 686: 679: 676:.NET Framework 668: 659:p-code machine 564: 561: 517: 516: 511:The number of 509: 503: 459: 456: 405:data structure 373:data structure 359: 358: 356: 355: 348: 341: 333: 330: 329: 328: 327: 322: 313: 304: 303: 299: 298: 297: 296: 290: 281: 271: 266: 260: 250: 241: 232: 226: 217: 216: 212: 211: 210: 209: 204: 199: 197:Precompilation 194: 193: 192: 187: 176: 167: 166: 162: 161: 160: 159: 154: 149: 144: 139: 131: 130: 126: 125: 124: 123: 122: 121: 116: 111: 106: 105: 104: 97:Runtime system 89: 83: 82: 81: 76: 75: 74: 59: 51: 50: 46: 45: 26: 24: 14: 13: 10: 9: 6: 4: 3: 2: 1163: 1152: 1149: 1147: 1144: 1143: 1141: 1131: 1130: 1126: 1109: 1102: 1099: 1086: 1082: 1075: 1072: 1069:by Uli Kremer 1068: 1063: 1060: 1056: 1055:1-55860-698-X 1052: 1048: 1044: 1040: 1037: 1032: 1029: 1024: 1018: 1015: 1002: 996: 993: 980: 974: 971: 959: 952: 949: 936: 932: 928: 921: 918: 903: 896: 894: 890: 883: 879: 876: 874: 870: 867: 865: 862: 860: 857: 854: 851: 849: 846: 844: 841: 839: 836: 834: 831: 830: 826: 824: 822: 818: 811: 809: 806: 804: 800: 796: 792: 787: 783: 775: 772: 770: 767: 766: 765: 759: 755: 751: 749: 745: 742: 738: 737: 736: 734: 730: 723: 720: 717: 715: 712: 709: 706: 704: 700: 697: 694: 690: 687: 684: 680: 677: 673: 669: 667: 666:Java bytecode 664: 663: 662: 660: 656: 651: 649: 645: 641: 637: 633: 629: 625: 621: 617: 613: 609: 605: 601: 597: 593: 589: 585: 581: 578: 574: 570: 562: 560: 558: 554: 550: 546: 542: 538: 534: 529: 524: 522: 514: 510: 507: 504: 501: 497: 493: 492: 491: 489: 485: 481: 477: 473: 469: 465: 457: 455: 453: 452:architectures 449: 448:generate code 445: 441: 437: 436:flow analysis 433: 429: 424: 422: 418: 414: 410: 406: 402: 398: 394: 390: 386: 383:to represent 382: 378: 374: 370: 366: 354: 349: 347: 342: 340: 335: 334: 332: 331: 326: 323: 321: 317: 314: 311: 308: 307: 306: 305: 300: 294: 291: 289: 285: 282: 279: 275: 272: 270: 267: 264: 261: 258: 254: 251: 249: 245: 242: 240: 236: 233: 230: 227: 224: 221: 220: 219: 218: 213: 208: 207:Recompilation 205: 203: 200: 198: 195: 191: 188: 186: 183: 182: 180: 177: 174: 173:Ahead-of-time 171: 170: 169: 168: 163: 158: 155: 153: 150: 148: 145: 143: 140: 138: 135: 134: 133: 132: 129:Types of code 127: 120: 117: 115: 112: 110: 107: 103: 100: 99: 98: 95: 94: 93: 90: 87: 84: 80: 77: 73: 70: 69: 68: 65: 64: 63: 60: 58: 55: 54: 53: 52: 47: 44: 40: 37: 33: 19: 1112:. Retrieved 1101: 1089:. Retrieved 1085:the original 1074: 1062: 1031: 1017: 1005:. Retrieved 995: 983:. Retrieved 973: 961:. Retrieved 951: 939:. Retrieved 934: 930: 920: 908:. Retrieved 859:Symbol table 815: 807: 798: 779: 763: 726: 670:Microsoft's 652: 642:, including 576: 566: 533:optimization 525: 518: 506:Control flow 463: 461: 434:that allows 425: 420: 400: 396: 389:optimization 368: 364: 362: 179:Just-in-time 152:Machine code 85: 72:Compile time 36: 963:12 February 956:Toal, Ray. 941:12 February 910:12 February 537:portability 401:independent 393:translation 385:source code 293:Zend Engine 274:Objective-C 142:Object code 137:Source code 114:Interpreter 62:Translation 1140:Categories 1003:. llvm.org 884:References 547:, such as 541:processors 498:common in 109:Executable 931:ACM Queue 789:Google's 695:platform. 632:SystemTap 584:Unix-like 563:Languages 553:low-level 476:compilers 371:) is the 318:and  286:and  276:and  246:and  157:Microcode 92:Execution 1049:, 2004. 1039:Archived 853:Bytecode 827:See also 646:and the 600:dialects 577:de facto 573:assembly 397:accurate 377:compiler 231:(Erlang) 147:Bytecode 67:Compiler 1114:17 June 1091:17 June 1007:17 June 985:17 June 821:Radare2 793:IR and 786:LLVM IR 756:-based 748:GENERIC 598:, some 596:Esterel 484:machine 415:-based 288:Node.js 244:CPython 102:Runtime 1081:"ESIL" 1053:  1023:"MLIR" 758:GIMPLE 722:p-code 719:Pascal 708:MATLAB 699:O-code 624:Cython 616:Squeak 612:Gambit 592:Sather 588:Eiffel 480:object 269:LuaJIT 181:(JIT) 878:UNCOL 812:Other 791:PNaCl 743:(RTL) 693:IBM i 628:Seed7 413:stack 411:- or 409:tuple 320:Clang 312:(GCC) 295:(PHP) 278:Swift 265:(JVM) 225:(ART) 175:(AOT) 1116:2015 1093:2015 1051:ISBN 1009:2015 987:2015 965:2016 943:2016 937:(10) 912:2016 871:and 833:BURS 803:MLIR 795:SPIR 782:LLVM 780:The 752:the 727:The 703:BCPL 701:for 689:TIMI 636:Vala 608:Lush 604:Lisp 543:and 444:LLVM 442:and 417:code 391:and 325:MSVC 316:LLVM 253:crt0 248:PyPy 239:Mono 229:BEAM 88:(IR) 57:Code 754:SSA 657:or 644:C-- 620:Nim 614:), 602:of 582:in 482:or 462:An 379:or 363:An 1142:: 935:11 933:. 929:. 892:^ 650:. 634:, 630:, 626:, 622:, 610:, 594:, 590:, 559:. 523:. 454:. 423:. 369:IR 284:V8 280:'s 1118:. 1095:. 1057:. 1025:. 1011:. 989:. 967:. 945:. 914:. 801:( 606:( 569:C 549:C 367:( 352:e 345:t 338:v 257:C 255:( 34:. 20:)

Index

Intermediate language
Transitional fossil
Program execution
Code
Translation
Compiler
Compile time
Optimizing compiler
Intermediate representation
Execution
Runtime system
Runtime
Executable
Interpreter
Virtual machine
Source code
Object code
Bytecode
Machine code
Microcode
Ahead-of-time
Just-in-time
Tracing just-in-time
Compile and go system
Precompilation
Transcompilation
Recompilation
Android Runtime
BEAM
Common Language Runtime

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

↑