SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
GENERIC
Kai
• The purpose of GENERIC is simply to provide a
language-independent way of representing an
entire function in trees.
• A statement is defined as any expression whose
value is ignored.
• A statement will always have TREE_SIDE_EFFECTS
set
• You can tell what kind of node a particular tree is
by using the TREE_CODE macro.
• All GENERIC trees have two fields in common.
• TREE_CHAIN
• a pointer be used as a singly-linked list
• TREE_TYPE
code & flags
tree type
tree chain
struct tree_base
struct tree_typed
struct tree_common
typedef union tree_node *tree
typedef const union tree_node *const_tree
union tree_node
IDENTIFIER_NODE
• There are never two distinct IDENTIFIER_NODEs
representing the same identifier.
• IDENTIFIER_POINTER
• IDENTIFIER_LENGTH
Container
• Two kinds of container
• TREE_LIST
• TREE_PURPOSE
• TREE_VALUE
• The next node is found by following the TREE_CHAIN
• TREE_VEC
• TREE_VEC_LENGTH
• TREE_VEC_ELT
code & flags
tree type
tree chain
struct tree_base
struct tree_typed
struct tree_common
tree_list
purposetree
valuetree
code & flags
tree type
tree chain
purpose
value
tree_list
NULL_TREE
code & flags
tree type
tree chain
struct tree_base
struct tree_typed
struct tree_common
tree_vec
a[1]tree
TYPE
• INTEGER_TYPE
• REAL_TYPE
• FIXED_POINT_TYPE
• COMPLEX_TYPE
• ENUMERAL_TYPE
• BOOLEAN_TYPE
• POINTER_TYPE
• REFERENCE_TYPE
• FUNCTION_TYPE
• METHOD_TYPE
• ARRAY_TYPE
• RECORD_TYPE
• UNION_TYPE
• QUAL_UNION_TYPE
• LANG_TYPE
• OFFSET_TYPE
Declarations
• LABEL_DECL
• CONST_DECL
• enumeration constants
• RESULT_DECL
• the value returned by a function
• TYPE_DECL
• typedef declarations
• VAR_DECL
• variables with namespace or block scope
• static data members
• PARM_DECL
• a parameter to a function
• DEBUG_EXPR_DECL
• FIELD_DECL
• non-static data members
• NAMESPACE_DECL
VAR_DECL
• DECL_SIZE
• DECL_ALIGN
• DECL_THIS_STATIC
• static variable
• DECL_THIS_EXTERN
• extern variable
• DECL_INITIAL
• an expression for the initialiser
PARM_DECL
• DECL_ARGUMENTS
• DECL_ARG_TYPE
• the type that will actually be used when a value is
passed to this function
Attributes
• TREE_LIST
• TREE_PURPOSE
• the name of the attribute
• TREE_VALUE
• TREE_LIST of the arguments of the attribute
• TREE_CHAIN
• next attribute
• DECL_ATTRIBUTES (tree decl)
• DECL_ATTRIBUTES (tree type)
Statements
• ASM_EXPR
• inline assembly
• DECL_EXPR
• a local declaration
• LABEL_EXPR
• GOTO_EXPR
• goto statement
• RETURN_EXPR
• return statement
• LOOP_EXPR
• infinite loop
• EXIT_EXPR
• conditional exit from the nearest LOOP_EXPR
• SWITCH_EXPR
• switch statement
• CASE_LABEL_EXPR
• a case label
Blocks
• BIND_EXPR
• BIND_EXPR_VARS
• variables in a block
Statement Sequences
• STATEMENT_LIST
FUNCTION_DECL
BIND_EXPR
saved_tree
gimplify_stmt
int test_gimple(int param_a, char param_b, float param_c)
{
int local;
local = param_a + param_b;
local = (int)((float)local * param_c);
return local;
}
locus
VOID_TYPE
type
VAR_DECL
operands[0]
INTEGER_TYPE
type
BLOCK
operands[2]
STATEMENT_LIST
operands[1]
DECL_EXPR
head
VAR_DECL
operands[0]
INTEGER_TYPE
type
MODIFY_EXPR
VAR_DECL PLUS_EXPR
operands[0] operands[1]
INTEGER_TYPE
type
NOP_EXPR PARM_DECL
operands[0] operands[1]
PARM_DECL
operands[0]
Functions
• A function is represented by a FUNCTION_DECL node.
• DECL_NAME
• DECL_ASSEMBLER_NAME
• DECL_ARGUMENTS
• PARM_DECL for the first argument
• Subsequent PARM_DECL nodes can be obtained by following the TREE_CHAIN links.
• DECL_RESULT
• RESULT_DECL
• DECL_SAVED_TREE
• the complete body of the function
• TREE_TYPE
• FUNCTION_TYPE
• METHOD_TYPE
FUNCTION_DECL
FUNCTION_TYPE
PARM_DECL RESULT_DECL
INTEGER_TYPEPARM_DECL
PARM_DECL
type
type arguments result
chain
chain
vec<tree> fnargs
INTEGER_TYPE
initial
gimplify_parameters
INTEGER_TYPE
size_unit
REAL_TYPE
type
REAL_TYPE
initial
int test_gimple(int param_a, char param_b, float param_c)
{
int local;
local = param_a + param_b;
local = (int)((float)local * param_c);
return local;
}

Mais conteúdo relacionado

Destaque

Destaque (10)

Safer IoT using functional language
Safer IoT using functional languageSafer IoT using functional language
Safer IoT using functional language
 
SecureAssist Enterprise Portal 導入ガイド
SecureAssist Enterprise Portal 導入ガイドSecureAssist Enterprise Portal 導入ガイド
SecureAssist Enterprise Portal 導入ガイド
 
SecureAssist Eclipse Plug-in 導入ガイド
SecureAssist Eclipse Plug-in 導入ガイドSecureAssist Eclipse Plug-in 導入ガイド
SecureAssist Eclipse Plug-in 導入ガイド
 
SecureAssist Visual Studio Package 導入ガイド
SecureAssist Visual Studio Package 導入ガイドSecureAssist Visual Studio Package 導入ガイド
SecureAssist Visual Studio Package 導入ガイド
 
SecureAssist Enterprise Portal APIガイド
SecureAssist Enterprise Portal APIガイドSecureAssist Enterprise Portal APIガイド
SecureAssist Enterprise Portal APIガイド
 
SecureAssist IntelliJ Plug-in 導入ガイド
SecureAssist IntelliJ Plug-in 導入ガイドSecureAssist IntelliJ Plug-in 導入ガイド
SecureAssist IntelliJ Plug-in 導入ガイド
 
Hot potato Privilege Escalation
Hot potato Privilege EscalationHot potato Privilege Escalation
Hot potato Privilege Escalation
 
Hands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontrollerHands-on VeriFast with STM32 microcontroller
Hands-on VeriFast with STM32 microcontroller
 
Something About Dynamic Linking
Something About Dynamic LinkingSomething About Dynamic Linking
Something About Dynamic Linking
 
Poster: Comparing ATS and VeriFast on RTOS system state
Poster: Comparing ATS and VeriFast on RTOS system statePoster: Comparing ATS and VeriFast on RTOS system state
Poster: Comparing ATS and VeriFast on RTOS system state
 

Semelhante a GCC GENERIC (7)

First Class Variables as AST Annotations
 First Class Variables as AST Annotations First Class Variables as AST Annotations
First Class Variables as AST Annotations
 
First Class Variables as AST Annotations
First Class Variables as AST AnnotationsFirst Class Variables as AST Annotations
First Class Variables as AST Annotations
 
Variables in Pharo
Variables in PharoVariables in Pharo
Variables in Pharo
 
NSCoder Swift - An Introduction to Swift
NSCoder Swift - An Introduction to SwiftNSCoder Swift - An Introduction to Swift
NSCoder Swift - An Introduction to Swift
 
Introduction to Swift 2
Introduction to Swift 2Introduction to Swift 2
Introduction to Swift 2
 
Introduction to c converted-converted
Introduction to c converted-convertedIntroduction to c converted-converted
Introduction to c converted-converted
 
TypeScript
TypeScriptTypeScript
TypeScript
 

Mais de Wang Hsiangkai (12)

Debug Line Issues After Relaxation.
Debug Line Issues After Relaxation.Debug Line Issues After Relaxation.
Debug Line Issues After Relaxation.
 
Machine Trace Metrics
Machine Trace MetricsMachine Trace Metrics
Machine Trace Metrics
 
Instruction Combine in LLVM
Instruction Combine in LLVMInstruction Combine in LLVM
Instruction Combine in LLVM
 
GCC LTO
GCC LTOGCC LTO
GCC LTO
 
LTO plugin
LTO pluginLTO plugin
LTO plugin
 
DWARF Data Representation
DWARF Data RepresentationDWARF Data Representation
DWARF Data Representation
 
Effective Modern C++
Effective Modern C++Effective Modern C++
Effective Modern C++
 
LLVM Register Allocation (2nd Version)
LLVM Register Allocation (2nd Version)LLVM Register Allocation (2nd Version)
LLVM Register Allocation (2nd Version)
 
Perf File Format
Perf File FormatPerf File Format
Perf File Format
 
LLVM Register Allocation
LLVM Register AllocationLLVM Register Allocation
LLVM Register Allocation
 
Introduction to Perf
Introduction to PerfIntroduction to Perf
Introduction to Perf
 
SSA - PHI-functions Placements
SSA - PHI-functions PlacementsSSA - PHI-functions Placements
SSA - PHI-functions Placements
 

Último

%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Último (20)

%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 

GCC GENERIC

  • 2. • The purpose of GENERIC is simply to provide a language-independent way of representing an entire function in trees. • A statement is defined as any expression whose value is ignored. • A statement will always have TREE_SIDE_EFFECTS set
  • 3. • You can tell what kind of node a particular tree is by using the TREE_CODE macro. • All GENERIC trees have two fields in common. • TREE_CHAIN • a pointer be used as a singly-linked list • TREE_TYPE
  • 4. code & flags tree type tree chain struct tree_base struct tree_typed struct tree_common typedef union tree_node *tree typedef const union tree_node *const_tree union tree_node
  • 5. IDENTIFIER_NODE • There are never two distinct IDENTIFIER_NODEs representing the same identifier. • IDENTIFIER_POINTER • IDENTIFIER_LENGTH
  • 6. Container • Two kinds of container • TREE_LIST • TREE_PURPOSE • TREE_VALUE • The next node is found by following the TREE_CHAIN • TREE_VEC • TREE_VEC_LENGTH • TREE_VEC_ELT
  • 7. code & flags tree type tree chain struct tree_base struct tree_typed struct tree_common tree_list purposetree valuetree code & flags tree type tree chain purpose value tree_list NULL_TREE
  • 8. code & flags tree type tree chain struct tree_base struct tree_typed struct tree_common tree_vec a[1]tree
  • 9. TYPE • INTEGER_TYPE • REAL_TYPE • FIXED_POINT_TYPE • COMPLEX_TYPE • ENUMERAL_TYPE • BOOLEAN_TYPE • POINTER_TYPE • REFERENCE_TYPE • FUNCTION_TYPE • METHOD_TYPE • ARRAY_TYPE • RECORD_TYPE • UNION_TYPE • QUAL_UNION_TYPE • LANG_TYPE • OFFSET_TYPE
  • 10. Declarations • LABEL_DECL • CONST_DECL • enumeration constants • RESULT_DECL • the value returned by a function • TYPE_DECL • typedef declarations • VAR_DECL • variables with namespace or block scope • static data members • PARM_DECL • a parameter to a function • DEBUG_EXPR_DECL • FIELD_DECL • non-static data members • NAMESPACE_DECL
  • 11. VAR_DECL • DECL_SIZE • DECL_ALIGN • DECL_THIS_STATIC • static variable • DECL_THIS_EXTERN • extern variable • DECL_INITIAL • an expression for the initialiser
  • 12. PARM_DECL • DECL_ARGUMENTS • DECL_ARG_TYPE • the type that will actually be used when a value is passed to this function
  • 13. Attributes • TREE_LIST • TREE_PURPOSE • the name of the attribute • TREE_VALUE • TREE_LIST of the arguments of the attribute • TREE_CHAIN • next attribute • DECL_ATTRIBUTES (tree decl) • DECL_ATTRIBUTES (tree type)
  • 14. Statements • ASM_EXPR • inline assembly • DECL_EXPR • a local declaration • LABEL_EXPR • GOTO_EXPR • goto statement • RETURN_EXPR • return statement • LOOP_EXPR • infinite loop • EXIT_EXPR • conditional exit from the nearest LOOP_EXPR • SWITCH_EXPR • switch statement • CASE_LABEL_EXPR • a case label
  • 17. FUNCTION_DECL BIND_EXPR saved_tree gimplify_stmt int test_gimple(int param_a, char param_b, float param_c) { int local; local = param_a + param_b; local = (int)((float)local * param_c); return local; } locus VOID_TYPE type VAR_DECL operands[0] INTEGER_TYPE type BLOCK operands[2] STATEMENT_LIST operands[1] DECL_EXPR head VAR_DECL operands[0] INTEGER_TYPE type MODIFY_EXPR VAR_DECL PLUS_EXPR operands[0] operands[1] INTEGER_TYPE type NOP_EXPR PARM_DECL operands[0] operands[1] PARM_DECL operands[0]
  • 18. Functions • A function is represented by a FUNCTION_DECL node. • DECL_NAME • DECL_ASSEMBLER_NAME • DECL_ARGUMENTS • PARM_DECL for the first argument • Subsequent PARM_DECL nodes can be obtained by following the TREE_CHAIN links. • DECL_RESULT • RESULT_DECL • DECL_SAVED_TREE • the complete body of the function • TREE_TYPE • FUNCTION_TYPE • METHOD_TYPE
  • 19. FUNCTION_DECL FUNCTION_TYPE PARM_DECL RESULT_DECL INTEGER_TYPEPARM_DECL PARM_DECL type type arguments result chain chain vec<tree> fnargs INTEGER_TYPE initial gimplify_parameters INTEGER_TYPE size_unit REAL_TYPE type REAL_TYPE initial int test_gimple(int param_a, char param_b, float param_c) { int local; local = param_a + param_b; local = (int)((float)local * param_c); return local; }