SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
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;
}

Más contenido relacionado

Destacado

Destacado (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
 

Similar 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
 

Más 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

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
anilsa9823
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
anilsa9823
 
+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
 

Último (20)

Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
+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...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 

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; }