SlideShare a Scribd company logo
1 of 173
Download to read offline
Min-Yih “Min” Hsu @ COSCUP 2021
LLVM Project:


The Good, The Bad, and The Ugly
“Min” Hsu
about:me
2
“Min” Hsu
• Computer Science PhD Candidate in
University of California, Irvine

• Advised by Prof. Michael Franz
about:me
2
“Min” Hsu
• Computer Science PhD Candidate in
University of California, Irvine

• Advised by Prof. Michael Franz
• LLVM contributor since 2015

• Code owner of M68k LLVM backend

• Author of book “LLVM Techniques,
Tips and Best Practices” (2021)
about:me
2
“Min” Hsu
• Computer Science PhD Candidate in
University of California, Irvine

• Advised by Prof. Michael Franz
• LLVM contributor since 2015

• Code owner of M68k LLVM backend

• Author of book “LLVM Techniques,
Tips and Best Practices” (2021)
• Motorcycle rider and co
ff
ee junkies
about:me
2
*Opinions Are My Own
3
What is this talk?
4
What is this talk?
4
What is this talk?
4
An Overview
5
An Overview
5
Technical Stu
f
An Overview
5
Technical Stu
f
Community
Outline
The Good
Design

Some new features

Community

The Bad
The Ugly
6
Design
8
Frontend Optimizer Backend
Traditional compiler design
9
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
Traditional compiler design
9
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
A Single Compiler Executable
Traditional compiler design
9
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
A Single Compiler Executable
Traditional compiler design
Example: GCC
Scenario
10
We’re adding C++ auto-complete feature
Scenario
10
We’re adding C++ auto-complete feature
Create a new from scratch
Scenario
10
We’re adding C++ auto-complete feature
Create a new from scratch
Re-use gcc’s
frontend
Scenario
10
We’re adding C++ auto-complete feature
Create a new from scratch
Re-use gcc’s
frontend Gimme a raise
Try to re-use gcc’s frontend
11
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
A single compiler executable
Try to re-use gcc’s frontend
11
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
A single compiler executable
Option 1:

Copy / Extract the frontend source code
Try to re-use gcc’s frontend
11
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
A single compiler executable
Option 1:

Copy / Extract the frontend source code
Drawback: Time-consuming
Try to re-use gcc’s frontend
11
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
A single compiler executable
Option 1:

Copy / Extract the frontend source code
Option 2:

> gcc -fsyntax-only code_snapshot.c
Drawback: Time-consuming
Try to re-use gcc’s frontend
11
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
A single compiler executable
Option 1:

Copy / Extract the frontend source code
Option 2:

> gcc -fsyntax-only code_snapshot.c
Drawback: Time-consuming
Drawbacks: 

1. Potentially low performance

2. Interface to the frontend is weak
Potential solution: Code sharing
12
Code
LLVM Project: A collection of compiler libraries
13
LLVM Project: A collection of compiler libraries
13
Clang libraries LLVM libraries
libclangParse libLLVMSupport
libLLVMCore
libLLVMTransformsUtils libLLVMScalarOpts
libLLVMLLParser
libLLVMMC
libLLVMX86Info
libLLVMX86CodeGen
libclangAST
libclangSema
libclangCodeGen
14
Clang libraries LLVM libraries
libclangParse libLLVMSupport libLLVMCore
libLLVMTransformsUtils libLLVMScalarOpts
libLLVMLLParser
libLLVMMC libLLVMX86Info libLLVMX86CodeGen
libclangAST
libclangSema
libclangCodeGen
Tools
opt
15
Clang libraries LLVM libraries
libclangParse libLLVMSupport libLLVMCore
libLLVMTransformsUtils libLLVMScalarOpts
libLLVMLLParser
libLLVMMC libLLVMX86Info libLLVMX86CodeGen
libclangAST
libclangSema
libclangCodeGen
clang
Tools
opt
16
Clang libraries LLVM libraries
libclangParse libLLVMSupport libLLVMCore
libLLVMTransformsUtils libLLVMScalarOpts
libLLVMLLParser
libLLVMMC libLLVMX86Info libLLVMX86CodeGen
libclangAST
libclangSema
libclangCodeGen
Tools
My auto-complete tool
clang
opt
17
P…Pa…
Pass plugin is not the only 

“modular way” to use LLVM
Some (Cool) New Features
Conventional “performance” measuring on compilers
19
Building Flow
Source Code Executable
Conventional “performance” measuring on compilers
19
Building Flow
Source Code Executable
Conventional “performance” measuring on compilers
19
Building Flow
Source Code Executable
Conventional “performance” measuring on compilers
19
Building Flow
Source Code Executable
Conventional “performance” measuring on compilers
19
Building Flow
Source Code Executable
Conventional “performance” measuring on compilers
19
Building Flow
Source Code Executable
LLVM’s improvement on building speeding
20
Building Flow
Source Code Executable
CodeGen Linking
LLVM’s improvement on building speeding
20
Building Flow
Source Code Executable
CodeGen Linking
GlobalISel
Instruction selection in LLVM: Running time
LLVM Passes that have the highest running time
21
Instruction selection in LLVM: Running time
LLVM Passes that have the highest running time
21
LLVM Passes
Running Time
0% 10% 20% 30% 40%
DAG->DAG Instruction Selection
Module Veri
fi
er
Live Variable Analysis
Greedy Register Allocator
Live Debug Value Analysis
Prologue / Epilogue Insertion
Instruction selection in LLVM: Workflow
22
LLVM IR (Linear)
Target Independent
Instruction selection in LLVM: Workflow
22
LLVM IR (Linear) SelectionDAG (DAG)
Target Independent
Instruction selection in LLVM: Workflow
22
LLVM IR (Linear) SelectionDAG (DAG) MachineInstr (Linear)
Target Independent Target Speci
fi
c
Instruction selection in LLVM: Workflow
22
LLVM IR (Linear) SelectionDAG (DAG) MachineInstr (Linear)
Target Independent Target Speci
fi
c
Global Instruction Selection (GlobalISel)
23
LLVM IR (Linear) gMIR (Linear) MachineInstr (Linear)
Target Independent Target Speci
fi
c
Global Instruction Selection (GlobalISel)
23
LLVM IR (Linear) gMIR (Linear) MachineInstr (Linear)
Target Independent Target Speci
fi
c
Hybrid
Global Instruction Selection (GlobalISel)
24
Credit: Ahmad Bougcha et al. @ LLVM Dev Meeting 2017
• Faster compilation
Global Instruction Selection (GlobalISel)
24
Credit: Ahmad Bougcha et al. @ LLVM Dev Meeting 2017
• Faster compilation
• Better codegen
quality
Global Instruction Selection (GlobalISel)
24
Credit: Ahmad Bougcha et al. @ LLVM Dev Meeting 2017
• Faster compilation
• Better codegen
quality
• Testing GlobalISel
is much easier.
25
Building Flow
Source Code Executable
CodeGen Linking
25
Building Flow
Source Code Executable
CodeGen Linking
LLD / ThinLTO
Linker 101
26
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
A.o B.o C.o
Linker
Executable
Linker 101
• Linking speed becomes the
bottleneck while building
large-scale projects.
• We barely can parallelize this
process.
26
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
A.o B.o C.o
Linker
Executable
Thread Thread Thread
LLD: A (much) faster linker
• Gold was the fastest linker, but
now LLD is (mostly) faster than
gold.
27
Credit: Rui Ueyama @ LLVM Dev Meeting 2017
LLD: A (much) faster linker
• Gold was the fastest linker, but
now LLD is (mostly) faster than
gold.
• Secret sauce
27
Credit: Rui Ueyama @ LLVM Dev Meeting 2017
LLD: A (much) faster linker
• Gold was the fastest linker, but
now LLD is (mostly) faster than
gold.
• Secret sauce
• Laziness
27
Credit: Rui Ueyama @ LLVM Dev Meeting 2017
LLD: A (much) faster linker
• Gold was the fastest linker, but
now LLD is (mostly) faster than
gold.
• Secret sauce
• Laziness
• Certain level of parallelization
• Use
fl
ag -fuse-ld=lld on
GCC and Clang to adopt LLD.
27
Credit: Rui Ueyama @ LLVM Dev Meeting 2017
Conventional Linker
28
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
A.o B.o C.o
Linker
Executable
WMO / LTO
29
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
A.ir B.ir C.ir
Linker
Executable
Whole Module / Link Time Optimization
WMO / LTO
29
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
A.ir B.ir C.ir
Linker
Executable
Whole Module / Link Time Optimization
• Perform more aggressive
whole program optimization
during link time.

• Because we can
fi
nally see
the entire program.
WMO / LTO
29
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
A.ir B.ir C.ir
Linker
Executable
Whole Module / Link Time Optimization
• Perform more aggressive
whole program optimization
during link time.

• Because we can
fi
nally see
the entire program.
• (Traditionally) It’s still hard to
parallelize WMO / LTO.
Thread Thread Thread
ThinLTO
30
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
Linker
Executable
Thread Thread Thread
A.o B.o C.o
Optimizer Optimizer Optimizer
ThinLTO
30
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
Linker
Executable
• Perform inter-procedural
optimizations by exchanging
function summary.

• “Seeing” other functions via
function summary.
Thread Thread Thread
A.o B.o C.o
Optimizer Optimizer Optimizer
ThinLTO
30
A.cpp B.cpp C.cpp
Compiler Compiler Compiler
Linker
Executable
• Perform inter-procedural
optimizations by exchanging
function summary.

• “Seeing” other functions via
function summary.
• ~3x speed up*†

• Using ~10x less memory*†
Thread Thread Thread
A.o B.o C.o
Optimizer Optimizer Optimizer
* Teresa Johnson et al. @ LLVM Dev Metting 2016

† Compare to conventional LTO
Community
A federated community
32
A federated community
32
A federated community
33
Code Owner
Code Owner
Code Owner
A federated community
33
Code Owner
Code Owner
Code Owner
M68k Backend
A federated community
33
Code Owner
Code Owner
Code Owner
M68k Backend
(LLVM Foundation) Board Members
“Linux style” contribution process
34
“Linux style” contribution process
34
Maintainer Maintainer
“Linux style” contribution process
34
Individual Branch


(e.g.
fi
lesystem)
Maintainer
Individual Branch


(e.g. network)
Maintainer
“Linux style” contribution process
34
Individual Branch


(e.g.
fi
lesystem)
Maintainer
Individual Branch


(e.g. network)
Maintainer
Patch Patch
“Linux style” contribution process
34
Individual Branch


(e.g.
fi
lesystem)
Maintainer
Individual Branch


(e.g. network)
Maintainer
Primary Tree
Patch Patch
“Linux style” contribution process
34
Individual Branch


(e.g.
fi
lesystem)
Maintainer
Individual Branch


(e.g. network)
Maintainer
Primary Tree
Pull Request
Pull Request
Patch Patch
LLVM’s contribution process
35
The main
branch
LLVM’s contribution process
35
The main
branch
Tip of Tree (ToT)
LLVM’s contribution process
35
The main
branch
Tip of Tree (ToT)
Author
Reviewer Reviewer
Author
LLVM’s contribution process
36
The main
branch
Tip of Tree (ToT)
Author
Reviewer Reviewer
Author
LLVM’s contribution process
36
The main
branch
Tip of Tree (ToT)
Author
Reviewer Reviewer
Author
Commit Commit
Outline
The Good
The Bad (things that LLVM probably should fix)
Code Review

Learning Resources for Beginners

The Ugly
37
Recap: A federated community
38
Code review with community members
39
Code Review
Code review with community members
40
Code Review
New Contributor
Code review with community members
40
Code Review
New Contributor
?
Code review with community members
41
Code Review
New Contributor
?
Why?
Code review with community members
41
Code Review
New Contributor
?
• New member does not have
enough “review currency” yet.
Why?
Code review with community members
41
Code Review
New Contributor
?
• New member does not have
enough “review currency” yet.
• Patches are less visible.
Why?
Code review with community members
41
Code Review
New Contributor
?
• New member does not have
enough “review currency” yet.
• Patches are less visible.
• Most of the core contributors are
busy.
Why?
Code review with community members
41
Code Review
New Contributor
?
• New member does not have
enough “review currency” yet.
• Patches are less visible.
• Most of the core contributors are
busy.
• Nearly all of them are working on
LLVM as their day jobs!
Why?
Code review with community members
41
Code Review
New Contributor
?
• New member does not have
enough “review currency” yet.
• Patches are less visible.
• Most of the core contributors are
busy.
• Nearly all of them are working on
LLVM as their day jobs!
• Code owners are obligate to review
the patch…but they’re also busy.
Why?
Some attempts…
42
http://llvmweekly.org/reviewcorner
Some attempts…
43
Subscribe to (patch) topics that you’re interested in
Learning Resources
For Beginners
45
LLVM
is hard
LLVM is Flexible
46
LLVM is Flexible
47
“Where should I start?”
48
Clang libraries LLVM libraries
libclangParse libLLVMSupport libLLVMCore
libLLVMTransformsUtils libLLVMScalarOpts
libLLVMLLParser
libLLVMMC libLLVMX86Info libLLVMX86CodeGen
libclangAST
libclangSema
libclangCodeGen
clang
Tools
opt My auto-complete tool
48
Clang libraries LLVM libraries
libclangParse libLLVMSupport libLLVMCore
libLLVMTransformsUtils libLLVMScalarOpts
libLLVMLLParser
libLLVMMC libLLVMX86Info libLLVMX86CodeGen
libclangAST
libclangSema
libclangCodeGen
clang
Tools
opt My auto-complete tool
48
Clang libraries LLVM libraries
libclangParse libLLVMSupport libLLVMCore
libLLVMTransformsUtils libLLVMScalarOpts
libLLVMLLParser
libLLVMMC libLLVMX86Info libLLVMX86CodeGen
libclangAST
libclangSema
libclangCodeGen
clang
Tools
opt My auto-complete tool
49
49
What do you think?
50
What do you think?
50
• What’s your story?
• Project-oriented tutorial

v.s.

A broad overview
• Online forum / mailing list
experiences (for newbie questions)?
• Wiki(-style) book?
Outline
The Good
The Bad
The Ugly (things that are difficult to solve)
API & ABI stability
51
API & ABI Stability
API stability in a nutshell
53
lib.h
int foo(int x, int y);
MySrc.cpp
int main() {


return foo(94, 87);


}
Version 0.1
API stability in a nutshell
54
lib.h
int foo(Point point);
MySrc.cpp
int main() {


return foo(94, 87);


}
Version 0.5
API stability in a nutshell
54
lib.h
int foo(Point point);
MySrc.cpp
int main() {


return foo(94, 87);


}
Version 0.5
Compile Error
LLVM API stability for downstream users
Some common LLVM downstream use cases
55
LLVM API stability for downstream users
Some common LLVM downstream use cases
55
My C++ auto-complete plugin
libclangSema libclangParse
LLVM API stability for downstream users
Some common LLVM downstream use cases
55
My C++ auto-complete plugin
libclangSema libclangParse
My Toy compiler
LLVM IR
Optimizer
LLVM X86
Backend
LLVM API stability for downstream users
56
LLVM
C++ API
Stability
Policy
LLVM API stability for downstream users
56
LLVM
C++ API
Stability
Policy
NONE
LLVM API stability for downstream users
56
LLVM
C++ API
Stability
Policy
NONE
• A pain in the a** for downstream users.

• Behaviors of APIs might also
change!
LLVM API stability for downstream users
56
LLVM
C++ API
Stability
Policy
NONE
• A pain in the a** for downstream users.

• Behaviors of APIs might also
change!
• The C API is (mostly) stable…

• …But the provided features are lag
(way) behind.
LLVM API stability for downstream users
56
LLVM
C++ API
Stability
Policy
NONE
• A pain in the a** for downstream users.

• Behaviors of APIs might also
change!
• The C API is (mostly) stable…

• …But the provided features are lag
(way) behind.
• A design decision made since day 1.

• Trade stability for faster feature
delivery.
ABI stability in a nutshell
57
MyExecutable
int foo(Point point);
int main() {


return foo(Point{94, 87});


}
libFoo.so
Version 0.1
ABI stability in a nutshell
57
MyExecutable
int foo(Point point);
int main() {


return foo(Point{94, 87});


}
libFoo.so
Version 0.1
Shared Library
ABI stability in a nutshell
57
MyExecutable
int foo(Point point);
int main() {


return foo(Point{94, 87});


}
libFoo.so
Version 0.1
Shared Library
Plugin
ABI stability in a nutshell
58
MyExecutable
int foo(Point point);
int main() {


return foo(Point{94, 87});


}
libFoo.so
Version 0.5
?
Shared Library
Plugin
ABI stability in a nutshell
Name mangling
59
MyExecutable
int foo(Point point); libFoo.so
Version 0.5
?
Old: _Z3foo5Point
ABI stability in a nutshell
Name mangling
59
MyExecutable
int foo(Point point); libFoo.so
Version 0.5
?
Old: _Z3foo5Point
New: ?foo@@YAHUPoint@@@Z
ABI stability in a nutshell
Type layout
60
MyExecutable
int foo(Point point) {


return point.X + point.Y;


}
libFoo.so
Version 0.5
?
struct Point {


int X;


int Y;


};
Old
ABI stability in a nutshell
Type layout
60
MyExecutable
int foo(Point point) {


return point.X + point.Y;


}
libFoo.so
Version 0.5
?
struct Point {


int X;


int Y;


};
Old
struct Point {


int X;


int LMAO;


int Y;


};
New
LLVM ABI stability for plugins
All available plugin options in Clang & LLVM
61
Clang LLVM
Preprocessor: Pragma plugin
Sema: Attribute plugin
AST: AST plugin
LLVM IR: Pass plugin (old / new)
LLVM ABI stability for plugins
If LLVM Pass plugin has a stable ABI…
62
opt -my-pass
LLVM version X.Y
MyPassPlugin.so
LLVM ABI stability for plugins
If LLVM Pass plugin has a stable ABI…
62
opt -my-pass
LLVM version X.Y
MyPassPlugin.so
LLVM ABI stability for plugins
If LLVM Pass plugin has a stable ABI…
62
opt -my-pass
LLVM version X.Y
opt -my-pass
LLVM version Y.Z
MyPassPlugin.so
LLVM ABI stability for plugins
63
LLVM Plugin
LLVM Plugin
“You have stable

ABI, right?”
“…right?…”
LLVM ABI stability for plugins
63
LLVM Plugin
LLVM Plugin
“You have stable

ABI, right?”
“…right?…”
• Again, trading stability for
fl
exibility
• LLVM plugins are pretty powerful.
LLVM ABI stability for plugins
63
LLVM Plugin
LLVM Plugin
“You have stable

ABI, right?”
“…right?…”
• Again, trading stability for
fl
exibility
• LLVM plugins are pretty powerful.
• Real world use case: Chromium
LLVM ABI stability for plugins
63
LLVM Plugin
LLVM Plugin
“You have stable

ABI, right?”
“…right?…”
• Again, trading stability for
fl
exibility
• LLVM plugins are pretty powerful.
• Real world use case: Chromium
• Using custom clang plugin to enforce
coding styles inside Chromium’s code
base.
• E.g. Catching bad C++ dtor
LLVM ABI stability for plugins
63
LLVM Plugin
LLVM Plugin
“You have stable

ABI, right?”
“…right?…”
• Again, trading stability for
fl
exibility
• LLVM plugins are pretty powerful.
• Real world use case: Chromium
• Using custom clang plugin to enforce
coding styles inside Chromium’s code
base.
• E.g. Catching bad C++ dtor
• “Don’t write a clang plugin” @ Chromium
Docs - https://bit.ly/3rIUg0f
Thank You!
Questions?
65
Email: minyihh@uci.edu 

Github: mshockwave
Appendix
67
67
> ./greeting -say “World”


Hello, World
67
#include “llvm/Support/CommandLine.h”


#include <iostream>


#include <string>


using namespace llvm;


static cl::opt<std::string>


GreetingText(“say”, cl::desc(“What to say?”));


int main(int argc, char **argv) {


cl::ParseCommandLineOptions(argc, argv);


std::cout << “Hello, ” << GreetingText << “n”


return 0;


}
> ./greeting -say “World”


Hello, World
68
#include “llvm/Support/CommandLine.h”


#include <iostream>


#include <string>


using namespace llvm;


static cl::opt<std::string>


GreetingText(“say”, cl::desc(“What to say?”));


int main(int argc, char **argv) {


cl::ParseCommandLineOptions(argc, argv);


std::cout << “Hello, ” << GreetingText << “n”


return 0;


}
> c++ file.cc … -I<LLVM include dir> 


-L<LLVM library path> 


-o greeting -lLLVMSupport
Scenario: Adding a new target (backend)
69
…

Assembly syntax

Instruction encoding

…
70
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
Compiler
Assembler
Assembler
Source Files
70
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
Compiler
Assembler
Assembler
Source Files
Know how to 

print assembly
70
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
Compiler
Assembler
Assembler
Source Files
Know how to 

print assembly
Know how to 

parse assembly
70
Frontend


Source Files
Optimizer


Source Files
Backend


Source Files
Compiler
Assembler
Assembler
Source Files
Know how to 

print assembly
Know how to 

parse assembly
Di
ff
erent Codebases!
71
Frontend
Optimizer
Backend
Assembler
LLVM Solution: Sharing target description library
71
Frontend
Optimizer
Backend
Assembler
Target Description Library


(e.g. libLLVMX86Desc)
LLVM Solution: Sharing target description library
71
Frontend
Optimizer
Backend
Assembler
Target Description Library


(e.g. libLLVMX86Desc)
Assembly Printer
LLVM Solution: Sharing target description library
71
Frontend
Optimizer
Backend
Assembler
Target Description Library


(e.g. libLLVMX86Desc)
Assembly Printer
Assembly Parser
LLVM Solution: Sharing target description library
LLVM’s binary tooling ecosystem
72
Target Description Library
LLVM’s binary tooling ecosystem
72
Target Description Library
MC Layer
Binary Format Library
LLVM’s binary tooling ecosystem
72
Target Description Library
MC Layer
Assembler
Disassembler
Binary Format Library
} llvm-mc
LLVM’s binary tooling ecosystem
72
Target Description Library
MC Layer
Assembler
Disassembler
Binary Format Library
llvm-objdump
llvm-nm
} llvm-mc
LLVM’s binary tooling ecosystem
72
Target Description Library
MC Layer
Assembler
Disassembler
Binary Format Library
llvm-objdump
llvm-nm
LLD (Linker)
} llvm-mc
LLVM’s binary tooling ecosystem
73
Target Description Library
MC Layer
Assembler
Disassembler
llvm-objdump
Binary Format Library
llvm-nm
LLD (Linker)
Why?
LLVM’s binary tooling ecosystem
73
Target Description Library
MC Layer
Assembler
Disassembler
llvm-objdump
Binary Format Library
llvm-nm
LLD (Linker)
Why?
• Binary tools (e.g. binutils) are
essential for many compilation
fl
ows.
LLVM’s binary tooling ecosystem
73
Target Description Library
MC Layer
Assembler
Disassembler
llvm-objdump
Binary Format Library
llvm-nm
LLD (Linker)
Why?
• Binary tools (e.g. binutils) are
essential for many compilation
fl
ows.
• Faster feature updates.
LLVM’s binary tooling ecosystem
73
Target Description Library
MC Layer
Assembler
Disassembler
llvm-objdump
Binary Format Library
llvm-nm
LLD (Linker)
Why?
• Binary tools (e.g. binutils) are
essential for many compilation
fl
ows.
• Faster feature updates.
• Avoid version mismatch.
LLVM’s binary tooling ecosystem
74
Target Description Library
MC Layer
Assembler
Disassembler
llvm-objdump
Binary Format Library
llvm-nm
LLD (Linker)
75
Frontend
Optimizer
Backend
Assembler
Target Description Library


(e.g. libLLVMX86Desc)
Recap: Sharing target information
76
Frontend
Optimizer
Backend
Compiler Process
Assembler Process
Assembler
Linker Process
Linker
Recap: Traditional compilation pipeline
76
Frontend
Optimizer
Backend
Compiler Process
Assembler Process
Assembler
Linker Process
Linker
Recap: Traditional compilation pipeline
.s
fi
le .o
fi
le
77
Frontend
Optimizer
Backend
Compiler + Assembler Process
Assembler
Linker Process
Linker
?
77
Frontend
Optimizer
Backend
Compiler + Assembler Process
Assembler
Linker Process
Linker
?
• An assembly
fi
le always comes

from a single source
fi
le
77
Frontend
Optimizer
Backend
Compiler + Assembler Process
Assembler
Linker Process
Linker
?
• An assembly
fi
le always comes

from a single source
fi
le
• Avoid round-trip (i.e. read/write 

assembly
fi
le) to disk
78
Frontend
Optimizer
Backend
A clang that uses integrated assembler
Assembler
Clang’s integrated assembler
In-memory LLVM IR
In-memory LLVM IR
Textual assembly code
In-memory MCInst objects

More Related Content

What's hot

containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能Kohei Tokunaga
 
Digging for Android Kernel Bugs
Digging for Android Kernel BugsDigging for Android Kernel Bugs
Digging for Android Kernel BugsJiahong Fang
 
Staying Afloat with Buoy: A High-Performance HTTP Client (0.1.1)
Staying Afloat with Buoy: A High-Performance HTTP Client (0.1.1)Staying Afloat with Buoy: A High-Performance HTTP Client (0.1.1)
Staying Afloat with Buoy: A High-Performance HTTP Client (0.1.1)lpgauth
 
How to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineHow to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineChun-Yu Wang
 
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingFaster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingKohei Tokunaga
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するKohei Tokunaga
 
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるDockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるKohei Tokunaga
 
Android Native Development Kit
Android Native Development KitAndroid Native Development Kit
Android Native Development KitPeter R. Egli
 
Starting up Containers Super Fast With Lazy Pulling of Images
Starting up Containers Super Fast With Lazy Pulling of ImagesStarting up Containers Super Fast With Lazy Pulling of Images
Starting up Containers Super Fast With Lazy Pulling of ImagesKohei Tokunaga
 
Staying Afloat with Buoy: A High-Performance HTTP Client
Staying Afloat with Buoy: A High-Performance HTTP ClientStaying Afloat with Buoy: A High-Performance HTTP Client
Staying Afloat with Buoy: A High-Performance HTTP Clientlpgauth
 
BuildKitでLazy Pullを有効にしてビルドを早くする話
BuildKitでLazy Pullを有効にしてビルドを早くする話BuildKitでLazy Pullを有効にしてビルドを早くする話
BuildKitでLazy Pullを有効にしてビルドを早くする話Kohei Tokunaga
 
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...Kohei Tokunaga
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbersDefcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbersAlexandre Moneger
 
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech Talk
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech TalkArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech Talk
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech TalkRed Hat Developers
 
The overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
The overview of lazypull with containerd Remote Snapshotter & Stargz SnapshotterThe overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
The overview of lazypull with containerd Remote Snapshotter & Stargz SnapshotterKohei Tokunaga
 
Improving code quality with continuous integration (PHPBenelux Conference 2011)
Improving code quality with continuous integration (PHPBenelux Conference 2011)Improving code quality with continuous integration (PHPBenelux Conference 2011)
Improving code quality with continuous integration (PHPBenelux Conference 2011)Martin de Keijzer
 
Linux: the first second
Linux: the first secondLinux: the first second
Linux: the first secondAlison Chaiken
 

What's hot (20)

containerdの概要と最近の機能
containerdの概要と最近の機能containerdの概要と最近の機能
containerdの概要と最近の機能
 
Digging for Android Kernel Bugs
Digging for Android Kernel BugsDigging for Android Kernel Bugs
Digging for Android Kernel Bugs
 
Staying Afloat with Buoy: A High-Performance HTTP Client (0.1.1)
Staying Afloat with Buoy: A High-Performance HTTP Client (0.1.1)Staying Afloat with Buoy: A High-Performance HTTP Client (0.1.1)
Staying Afloat with Buoy: A High-Performance HTTP Client (0.1.1)
 
How to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machineHow to implement a simple dalvik virtual machine
How to implement a simple dalvik virtual machine
 
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy PullingFaster Container Image Distribution on a Variety of Tools with Lazy Pulling
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
 
ICSE2011_SRC
ICSE2011_SRC ICSE2011_SRC
ICSE2011_SRC
 
DockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐるDockerとKubernetesをかけめぐる
DockerとKubernetesをかけめぐる
 
Android Native Development Kit
Android Native Development KitAndroid Native Development Kit
Android Native Development Kit
 
Starting up Containers Super Fast With Lazy Pulling of Images
Starting up Containers Super Fast With Lazy Pulling of ImagesStarting up Containers Super Fast With Lazy Pulling of Images
Starting up Containers Super Fast With Lazy Pulling of Images
 
Staying Afloat with Buoy: A High-Performance HTTP Client
Staying Afloat with Buoy: A High-Performance HTTP ClientStaying Afloat with Buoy: A High-Performance HTTP Client
Staying Afloat with Buoy: A High-Performance HTTP Client
 
BuildKitでLazy Pullを有効にしてビルドを早くする話
BuildKitでLazy Pullを有効にしてビルドを早くする話BuildKitでLazy Pullを有効にしてビルドを早くする話
BuildKitでLazy Pullを有効にしてビルドを早くする話
 
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
 
How to Build & Use OpenCL on OpenCV & Android NDK
How to Build & Use OpenCL on OpenCV & Android NDKHow to Build & Use OpenCL on OpenCV & Android NDK
How to Build & Use OpenCL on OpenCV & Android NDK
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbersDefcon 22 - Stitching numbers - generating rop payloads from in memory numbers
Defcon 22 - Stitching numbers - generating rop payloads from in memory numbers
 
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech Talk
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech TalkArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech Talk
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech Talk
 
The overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
The overview of lazypull with containerd Remote Snapshotter & Stargz SnapshotterThe overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
The overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
 
Improving code quality with continuous integration (PHPBenelux Conference 2011)
Improving code quality with continuous integration (PHPBenelux Conference 2011)Improving code quality with continuous integration (PHPBenelux Conference 2011)
Improving code quality with continuous integration (PHPBenelux Conference 2011)
 
Linux: the first second
Linux: the first secondLinux: the first second
Linux: the first second
 

Similar to [COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly

TSC BoF: OSS Toolchain Discussion - SFO17-409
TSC BoF: OSS Toolchain Discussion - SFO17-409TSC BoF: OSS Toolchain Discussion - SFO17-409
TSC BoF: OSS Toolchain Discussion - SFO17-409Linaro
 
Reflections on Trusting Trust for Go
Reflections on Trusting Trust for GoReflections on Trusting Trust for Go
Reflections on Trusting Trust for Goyeokm1
 
Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Fwdays
 
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesJfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesCharlie Gracie
 
Introduction to the LLVM Compiler System
Introduction to the LLVM  Compiler SystemIntroduction to the LLVM  Compiler System
Introduction to the LLVM Compiler Systemzionsaint
 
Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автом...
Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автом...Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автом...
Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автом...CEE-SEC(R)
 
Knowledge Sharing Session on JavaScript Source Maps & Angular Compilation
Knowledge Sharing Session on JavaScript Source Maps & Angular CompilationKnowledge Sharing Session on JavaScript Source Maps & Angular Compilation
Knowledge Sharing Session on JavaScript Source Maps & Angular CompilationMd.Zahidur Rahman
 
SFO15-110: Toolchain Collaboration
SFO15-110: Toolchain CollaborationSFO15-110: Toolchain Collaboration
SFO15-110: Toolchain CollaborationLinaro
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Bram Adams
 
Intro to GitOps with Weave GitOps, Flagger and Linkerd
Intro to GitOps with Weave GitOps, Flagger and LinkerdIntro to GitOps with Weave GitOps, Flagger and Linkerd
Intro to GitOps with Weave GitOps, Flagger and LinkerdWeaveworks
 
Overcoming software development challenges by using an integrated software fr...
Overcoming software development challenges by using an integrated software fr...Overcoming software development challenges by using an integrated software fr...
Overcoming software development challenges by using an integrated software fr...Design World
 
Building A Distributed Build System at Google Scale (StrangeLoop 2016)
Building A Distributed Build System at Google Scale (StrangeLoop 2016)Building A Distributed Build System at Google Scale (StrangeLoop 2016)
Building A Distributed Build System at Google Scale (StrangeLoop 2016)Aysylu Greenberg
 
Guidelines for Working with Contract Developers in Evergreen
Guidelines for Working with Contract Developers in EvergreenGuidelines for Working with Contract Developers in Evergreen
Guidelines for Working with Contract Developers in Evergreenloriayre
 
An Introduction To Linux Development Environment
An Introduction To Linux Development EnvironmentAn Introduction To Linux Development Environment
An Introduction To Linux Development EnvironmentS. M. Hossein Hamidi
 
How to Build a Custom Plugin in Rundeck
How to Build a Custom Plugin in RundeckHow to Build a Custom Plugin in Rundeck
How to Build a Custom Plugin in RundeckRundeck
 
(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel ArchitecturesJoel Falcou
 
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019corehard_by
 

Similar to [COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly (20)

Codeql Variant Analysis
Codeql Variant AnalysisCodeql Variant Analysis
Codeql Variant Analysis
 
TSC BoF: OSS Toolchain Discussion - SFO17-409
TSC BoF: OSS Toolchain Discussion - SFO17-409TSC BoF: OSS Toolchain Discussion - SFO17-409
TSC BoF: OSS Toolchain Discussion - SFO17-409
 
Reflections on Trusting Trust for Go
Reflections on Trusting Trust for GoReflections on Trusting Trust for Go
Reflections on Trusting Trust for Go
 
Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)Lightweight APIs in mRuby (Михаил Бортник)
Lightweight APIs in mRuby (Михаил Бортник)
 
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot RuntimesJfokus 2016 - A JVMs Journey into Polyglot Runtimes
Jfokus 2016 - A JVMs Journey into Polyglot Runtimes
 
Introduction to the LLVM Compiler System
Introduction to the LLVM  Compiler SystemIntroduction to the LLVM  Compiler System
Introduction to the LLVM Compiler System
 
201801 CSE240 Lecture 04
201801 CSE240 Lecture 04201801 CSE240 Lecture 04
201801 CSE240 Lecture 04
 
Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автом...
Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автом...Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автом...
Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автом...
 
Knowledge Sharing Session on JavaScript Source Maps & Angular Compilation
Knowledge Sharing Session on JavaScript Source Maps & Angular CompilationKnowledge Sharing Session on JavaScript Source Maps & Angular Compilation
Knowledge Sharing Session on JavaScript Source Maps & Angular Compilation
 
SFO15-110: Toolchain Collaboration
SFO15-110: Toolchain CollaborationSFO15-110: Toolchain Collaboration
SFO15-110: Toolchain Collaboration
 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
 
Intro to GitOps with Weave GitOps, Flagger and Linkerd
Intro to GitOps with Weave GitOps, Flagger and LinkerdIntro to GitOps with Weave GitOps, Flagger and Linkerd
Intro to GitOps with Weave GitOps, Flagger and Linkerd
 
Besut Kode Challenge 1
Besut Kode Challenge 1Besut Kode Challenge 1
Besut Kode Challenge 1
 
Overcoming software development challenges by using an integrated software fr...
Overcoming software development challenges by using an integrated software fr...Overcoming software development challenges by using an integrated software fr...
Overcoming software development challenges by using an integrated software fr...
 
Building A Distributed Build System at Google Scale (StrangeLoop 2016)
Building A Distributed Build System at Google Scale (StrangeLoop 2016)Building A Distributed Build System at Google Scale (StrangeLoop 2016)
Building A Distributed Build System at Google Scale (StrangeLoop 2016)
 
Guidelines for Working with Contract Developers in Evergreen
Guidelines for Working with Contract Developers in EvergreenGuidelines for Working with Contract Developers in Evergreen
Guidelines for Working with Contract Developers in Evergreen
 
An Introduction To Linux Development Environment
An Introduction To Linux Development EnvironmentAn Introduction To Linux Development Environment
An Introduction To Linux Development Environment
 
How to Build a Custom Plugin in Rundeck
How to Build a Custom Plugin in RundeckHow to Build a Custom Plugin in Rundeck
How to Build a Custom Plugin in Rundeck
 
(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures(Costless) Software Abstractions for Parallel Architectures
(Costless) Software Abstractions for Parallel Architectures
 
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
The Hitchhiker's Guide to Faster Builds. Viktor Kirilov. CoreHard Spring 2019
 

More from Min-Yih Hsu

Debug Information And Where They Come From
Debug Information And Where They Come FromDebug Information And Where They Come From
Debug Information And Where They Come FromMin-Yih Hsu
 
MCA Daemon: Hybrid Throughput Analysis Beyond Basic Blocks
MCA Daemon: Hybrid Throughput Analysis Beyond Basic BlocksMCA Daemon: Hybrid Throughput Analysis Beyond Basic Blocks
MCA Daemon: Hybrid Throughput Analysis Beyond Basic BlocksMin-Yih Hsu
 
Handling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMHandling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMMin-Yih Hsu
 
How to write a TableGen backend
How to write a TableGen backendHow to write a TableGen backend
How to write a TableGen backendMin-Yih Hsu
 
[TGSA Academic Friday] How To Train Your Dragon - Intro to Modern Compiler Te...
[TGSA Academic Friday] How To Train Your Dragon - Intro to Modern Compiler Te...[TGSA Academic Friday] How To Train Your Dragon - Intro to Modern Compiler Te...
[TGSA Academic Friday] How To Train Your Dragon - Intro to Modern Compiler Te...Min-Yih Hsu
 
Paper Study - Demand-Driven Computation of Interprocedural Data Flow
Paper Study - Demand-Driven Computation of Interprocedural Data FlowPaper Study - Demand-Driven Computation of Interprocedural Data Flow
Paper Study - Demand-Driven Computation of Interprocedural Data FlowMin-Yih Hsu
 
Paper Study - Incremental Data-Flow Analysis Algorithms by Ryder et al
Paper Study - Incremental Data-Flow Analysis Algorithms by Ryder et alPaper Study - Incremental Data-Flow Analysis Algorithms by Ryder et al
Paper Study - Incremental Data-Flow Analysis Algorithms by Ryder et alMin-Yih Hsu
 
Souper-Charging Peepholes with Target Machine Info
Souper-Charging Peepholes with Target Machine InfoSouper-Charging Peepholes with Target Machine Info
Souper-Charging Peepholes with Target Machine InfoMin-Yih Hsu
 
From V8 to Modern Compilers
From V8 to Modern CompilersFrom V8 to Modern Compilers
From V8 to Modern CompilersMin-Yih Hsu
 
Introduction to Khronos SYCL
Introduction to Khronos SYCLIntroduction to Khronos SYCL
Introduction to Khronos SYCLMin-Yih Hsu
 
Trace Scheduling
Trace SchedulingTrace Scheduling
Trace SchedulingMin-Yih Hsu
 
Polymer Start-Up (SITCON 2016)
Polymer Start-Up (SITCON 2016)Polymer Start-Up (SITCON 2016)
Polymer Start-Up (SITCON 2016)Min-Yih Hsu
 
War of Native Speed on Web (SITCON2016)
War of Native Speed on Web (SITCON2016)War of Native Speed on Web (SITCON2016)
War of Native Speed on Web (SITCON2016)Min-Yih Hsu
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSPMin-Yih Hsu
 

More from Min-Yih Hsu (14)

Debug Information And Where They Come From
Debug Information And Where They Come FromDebug Information And Where They Come From
Debug Information And Where They Come From
 
MCA Daemon: Hybrid Throughput Analysis Beyond Basic Blocks
MCA Daemon: Hybrid Throughput Analysis Beyond Basic BlocksMCA Daemon: Hybrid Throughput Analysis Beyond Basic Blocks
MCA Daemon: Hybrid Throughput Analysis Beyond Basic Blocks
 
Handling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVMHandling inline assembly in Clang and LLVM
Handling inline assembly in Clang and LLVM
 
How to write a TableGen backend
How to write a TableGen backendHow to write a TableGen backend
How to write a TableGen backend
 
[TGSA Academic Friday] How To Train Your Dragon - Intro to Modern Compiler Te...
[TGSA Academic Friday] How To Train Your Dragon - Intro to Modern Compiler Te...[TGSA Academic Friday] How To Train Your Dragon - Intro to Modern Compiler Te...
[TGSA Academic Friday] How To Train Your Dragon - Intro to Modern Compiler Te...
 
Paper Study - Demand-Driven Computation of Interprocedural Data Flow
Paper Study - Demand-Driven Computation of Interprocedural Data FlowPaper Study - Demand-Driven Computation of Interprocedural Data Flow
Paper Study - Demand-Driven Computation of Interprocedural Data Flow
 
Paper Study - Incremental Data-Flow Analysis Algorithms by Ryder et al
Paper Study - Incremental Data-Flow Analysis Algorithms by Ryder et alPaper Study - Incremental Data-Flow Analysis Algorithms by Ryder et al
Paper Study - Incremental Data-Flow Analysis Algorithms by Ryder et al
 
Souper-Charging Peepholes with Target Machine Info
Souper-Charging Peepholes with Target Machine InfoSouper-Charging Peepholes with Target Machine Info
Souper-Charging Peepholes with Target Machine Info
 
From V8 to Modern Compilers
From V8 to Modern CompilersFrom V8 to Modern Compilers
From V8 to Modern Compilers
 
Introduction to Khronos SYCL
Introduction to Khronos SYCLIntroduction to Khronos SYCL
Introduction to Khronos SYCL
 
Trace Scheduling
Trace SchedulingTrace Scheduling
Trace Scheduling
 
Polymer Start-Up (SITCON 2016)
Polymer Start-Up (SITCON 2016)Polymer Start-Up (SITCON 2016)
Polymer Start-Up (SITCON 2016)
 
War of Native Speed on Web (SITCON2016)
War of Native Speed on Web (SITCON2016)War of Native Speed on Web (SITCON2016)
War of Native Speed on Web (SITCON2016)
 
From Android NDK To AOSP
From Android NDK To AOSPFrom Android NDK To AOSP
From Android NDK To AOSP
 

Recently uploaded

Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Recently uploaded (20)

Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

[COSCUP 2021] LLVM Project: The Good, The Bad, and The Ugly