Tutorial on Essential Abstractions in GCC
The Retargetability Model of GCC
Uday Khedker
(www.cse.iitb.ac.in/grc) GCC Resource Center, Department of Computer Science and Engineering, Indian Institute of Technology, Bombay
April 2011
The Retargetability Model of GCC Uday Khedker - - PowerPoint PPT Presentation
Tutorial on Essential Abstractions in GCC The Retargetability Model of GCC Uday Khedker (www.cse.iitb.ac.in/grc) GCC Resource Center, Department of Computer Science and Engineering, Indian Institute of Technology, Bombay April 2011 EA-GCC,
(www.cse.iitb.ac.in/grc) GCC Resource Center, Department of Computer Science and Engineering, Indian Institute of Technology, Bombay
April 2011
EA-GCC, Chamonix Retargetability Model: Outline 1/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 2/16
Language Specific Code Language and Machine Independent Generic Code Machine Dependent Generator Code Machine Descriptions Compiler Generation Framework Input Language Target Name Parser Gimplifier Tree SSA Optimizer Expander Optimizer Code Generator Selected Copied Copied Generated Generated Generated Compiler Development Time Build Time Use Time Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 2/16
Language Specific Code Language and Machine Independent Generic Code Machine Dependent Generator Code Machine Descriptions Compiler Generation Framework Input Language Target Name Parser Gimplifier Tree SSA Optimizer Expander Optimizer Code Generator Selected Copied Copied Generated Generated Generated Compiler Development Time Build Time Use Time
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 2/16
Language Specific Code Language and Machine Independent Generic Code Machine Dependent Generator Code Machine Descriptions Compiler Generation Framework Input Language Target Name Parser Gimplifier Tree SSA Optimizer Expander Optimizer Code Generator Selected Copied Copied Generated Generated Generated Compiler Development Time Build Time Use Time
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 2/16
Language Specific Code Language and Machine Independent Generic Code Machine Dependent Generator Code Machine Descriptions Compiler Generation Framework Input Language Target Name Parser Gimplifier Tree SSA Optimizer Expander Optimizer Code Generator Selected Copied Copied Generated Generated Generated Compiler Development Time Build Time Use Time
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 2/16
Language Specific Code Language and Machine Independent Generic Code Machine Dependent Generator Code Machine Descriptions Compiler Generation Framework Input Language Target Name Parser Gimplifier Tree SSA Optimizer Expander Optimizer Code Generator Selected Copied Copied Generated Generated Generated Compiler Development Time Build Time Use Time
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 3/16
toplev main front end pass manager pass 1 pass 2
pass expand
pass n double arrow represents control flow whereas single arrow represents pointer or index code for pass 2 code for pass 1 code for pass n expander code
langhook . . . code for language 1 code for language 2 code for language n langhook . . . code for language 1 code for language 2 code for language n
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 3/16
toplev main front end pass manager pass 1 pass 2
pass expand
pass n code for pass 2 code for pass 1 code for pass n expander code
langhook . . . code for language 1 code for language 2 code for language n langhook . . . code for language 1 code for language 2 code for language n insn data generated code for machine 1 MD 1 MD 2 MD n
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 3/16
toplev main front end pass manager pass 1 pass 2
pass expand
pass n code for pass 2 code for pass 1 code for pass n expander code
langhook . . . code for language 1 code for language 2 code for language n langhook . . . code for language 1 code for language 2 code for language n insn data generated code for machine 2 MD 1 MD 2 MD n
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 3/16
toplev main front end pass manager pass 1 pass 2
pass expand
pass n code for pass 2 code for pass 1 code for pass n expander code
langhook . . . code for language 1 code for language 2 code for language n langhook . . . code for language 1 code for language 2 code for language n insn data generated code for machine n MD 1 MD 2 MD n
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 4/16
◮ Listing data structures (e.g. instruction pattern lists) ◮ Indexing data structures, since diff. targets give diff. lists.
◮ Semantic groupings: arithmetic, logical, I/O etc. ◮ Processor unit usage groups for pipeline utilisation
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: A Recap 5/16
◮ Data size limits ◮ One of the operands must be a register ◮ Implicit operands ◮ Register restrictions
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 6/16
GIMPLE ASSIGN (set (<dest>) (<src>))
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 6/16
GIMPLE ASSIGN (set (<dest>) (<src>)) "movsi" Standard Pattern Name
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 6/16
GIMPLE ASSIGN (set (<dest>) (<src>)) "movsi" Standard Pattern Name Separate CGF code and MD GIMPLE ASSIGN "movsi" "movsi" (set (<dest>) (<src>))
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 6/16
GIMPLE ASSIGN (set (<dest>) (<src>)) "movsi" Standard Pattern Name Separate CGF code and MD GIMPLE ASSIGN "movsi" "movsi" (set (<dest>) (<src>)) Implement GIMPLE ASSIGN "movsi" "movsi" (set (<dest>) (<src>)) Unnecessary in CGF; hard code Implement in MD
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 7/16
GIMPLE ASSIGN "movsi" CGF "movsi",(set (<dest>) (<src>)) MD 1 "movsi",(set (<dest>) (<src>)) MD n
An interface immune to MD authoring variations
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 7/16
GIMPLE ASSIGN "movsi" CGF "movsi",(set (<dest>) (<src>)) MD 1 "movsi",(set (<dest>) (<src>)) MD n How ?
An interface immune to MD authoring variations
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 7/16
GIMPLE ASSIGN "movsi" CGF "movsi",(set (<dest>) (<src>)) MD 1 "movsi",(set (<dest>) (<src>)) MD n How ? Basic Approach: Tabulate GIMPLE – RTL struct optab [] struct insn data []
An interface immune to MD authoring variations
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 8/16
◮ Array of each pattern read ◮ Some patterns are SPNs ◮ Each pattern is accessed using the generated index
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab handler
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab handler SI insn code CODE FOR Nothing SF insn code CODE FOR Nothing
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab handler SI insn code CODE FOR Nothing SF insn code CODE FOR Nothing
insn data . . . . . . 1280 "movsi" . . . gen movsi . . .
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab handler SI insn code CODE FOR Nothing SF insn code CODE FOR Nothing
insn data . . . . . . 1280 "movsi" . . . gen movsi . . .
CODE FOR movsi=1280 CODE FOR movsf=CODE FOR nothing
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab handler SI insn code CODE FOR Nothing SF insn code CODE FOR Nothing
insn data . . . . . . 1280 "movsi" . . . gen movsi . . .
CODE FOR movsi=1280 CODE FOR movsf=CODE FOR nothing
...
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab handler SI insn code CODE FOR Nothing SF insn code CODE FOR Nothing
insn data . . . . . . 1280 "movsi" . . . gen movsi . . .
CODE FOR movsi=1280 CODE FOR movsf=CODE FOR nothing
...
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab handler SI insn code CODE FOR movsi SF insn code CODE FOR nothing
insn data . . . . . . 1280 "movsi" . . . gen movsi . . .
CODE FOR movsi=1280 CODE FOR movsf=CODE FOR nothing
...
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 9/16
. . . . . . OTI mov mov optab handler SI insn code CODE FOR movsi SF insn code CODE FOR nothing
insn data . . . . . . 1280 "movsi" . . . gen movsi . . .
CODE FOR movsi=1280 CODE FOR movsf=CODE FOR nothing
...
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 10/16
Generator Generated Information Description from MD genopinit insn-opinit.c void init all optabs (void); Operations Table Initialiser gencodes insn-codes.h enum insn code = {... CODE FOR movsi = 1280, ...} Index of patterns genooutput insn-output.c struct insn data [CODE].genfun = /* fn ptr */ All insn data e.g. gen function genemit insn-emit.c rtx gen rtx movsi (/* args */) {/* body */} RTL emission functions
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 11/16
◮ Function calls ◮ Setting up of activation records ◮ Non-local jumps ◮ etc. (i.e. deeper study is required on this aspect)
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Generating the Code Generators 12/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 13/16
gimple_expand_cfg expand_gimple_basic_block(bb) expand_gimple_cond(stmt) expand_gimple_stmt(stmt) expand_gimple_stmt_1 (stmt) expand_expr_real_2 expand_expr /* Operands */ expand_expr_real
expand_binop /* Now we have rtx for operands */ expand_binop_directly /* The plugin for a machine */ code=optab_handler(binoptab,mode)->insn_code; GEN_FCN emit_insn
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 14/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 14/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 14/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 14/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 14/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 14/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 14/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Using the Code Generators 15/16
Uday Khedker GRC, IIT Bombay
EA-GCC, Chamonix Retargetability Model: Conclusions 16/16
◮ Manually rewriting Expander and patter matcher ◮ Expected to be simple for machines of 1984 Era
◮ List insns as they appear in the chosen MD ◮ Index them ◮ Supply index to the CGF
Uday Khedker GRC, IIT Bombay