Where Is LLVM Being Used Today?

Total Page:16

File Type:pdf, Size:1020Kb

Where Is LLVM Being Used Today? Where is LLVM being used today? Tilmann Scheller Senior LLVM Compiler Engineer [email protected] Samsung Open Source Group Samsung Research UK FOSDEM 2016 Brussels, Belgium, January 30 – 31, 2016 Samsung Open Source Group 1 Overview ● Introduction ● LLVM Overview ● Projects ● Summary Samsung Open Source Group 2 Introduction Samsung Open Source Group 3 What is LLVM? ● Mature, production-quality compiler framework ● Modular architecture ● Heavily optimizing static and dynamic compiler ● Supports all major architectures (x86, ARM, MIPS, PowerPC, …) ● Powerful link-time optimizations (LTO) ● Permissive license (BSD-like) Samsung Open Source Group 4 Which companies are contributing? ® Samsung Open Source Group 5 History ● Started as Chris Lattner's Master's Thesis at UIUC ● LLVM 1.0 released in October 2003 ● LLVM 3.8 about to be released ● Today: LLVM + Clang together 2.5 million LOC of C++ code Samsung Open Source Group 6 LLVM sub-projects ● Clang C/C++/Objective C frontend and static analyzer ● LLDB Next generation debugger leveraging the LLVM libraries, e.g. the Clang expression parser ● lld Framework for creating linkers, will make Clang independent of the system linker in the future ● Polly Polyhedral optimizer for LLVM, e.g. high-level loop optimizations and data-locality optimizations Samsung Open Source Group 7 LLVM Overview Samsung Open Source Group 8 LLVM ● LLVM IR (Intermediate Representation) ● Scalar optimizations ● Interprocedural optimizations ● Auto-vectorizer (BB, Loop and SLP) ● Profile-guided optimizations Samsung Open Source Group 9 Compiler architecture C Frontend x86 Backend C++ Frontend Optimizer ARM Backend Fortran Frontend MIPS Backend Samsung Open Source Group 10 Compilation steps ● Many steps involved in the translation from C source code to machine code: – Frontend: ● Lexing, Parsing, AST construction ● Translation to LLVM IR – Middle-end ● Target-independent optimizations (Analyses & Transformations) – Backend: ● Translation into a DAG ● Instruction selection: Pattern matching on the DAG ● Instruction scheduling: Assigning an order of execution ● Register allocation: Trying to reduce memory traffic Samsung Open Source Group 11 Clang ● Goals: – Fast compile time – Low memory usage – GCC compatibility – Expressive diagnostics ● Several tools built on top of Clang: – Clang static analyzer – clang-format, clang-modernize, clang-tidy Samsung Open Source Group 12 Projects Samsung Open Source Group 13 Traditional C/C++ Toolchain ● Apple iOS/OS X SDK ● Android NDK ● Tizen SDK ● Sony PS4 SDK ● Qualcomm Snapdragon LLVM Compiler for Android Samsung Open Source Group 14 Programming languages ● Swift ● Haskell: GHC, LHC, UHC ● Ruby: Rubinius, RubyMotion ● Python: Pyston ● Common Lisp: Clasp ● D: LDC ● Go: llgo Samsung Open Source Group 15 Programming languages ● Standard ML: MLton, SML#, Ex-SML ● Rust ● Julia ● Pure ● Ravi Samsung Open Source Group 16 Language Runtime Systems ● VMKit (unmaintained) ● LLILC - LLVM-based .NET MSIL compiler ● Mono ● OpenJDK Samsung Open Source Group 17 GPU ● LLVMpipe (software rasterizer) ● CUDA ● GLSL (LunarGLASS) ● AMDGPU open source drivers ● SPIR ● Majority of OpenCL implementations based on Clang/LLVM Samsung Open Source Group 18 Web ● PNaCl ● WebKit FTL JIT ● Emscripten ● WebAssembly Samsung Open Source Group 19 Sanitizers ● AddressSanitizers ● MemorySanitizer ● ThreadSanitizer ● LeakSanitizer ● SAFECode Samsung Open Source Group 20 Integrated Development Environments ● Xcode ● KDevelop ● CodeLite ● Qt Creator ● Geany Samsung Open Source Group 21 Source code navigation ● Doxygen ● Woboq Code Browser ● YouCompleteMe - Code completion for Vim ● clang-tags ● clang-ctags ● clang_complete - Code completion for Vim ● rtags - Indexer for C/C++ with Emacs integration Samsung Open Source Group 22 Out of tree LLVM backends ● RISC-V ● OpenRISC 1000 ● VideoCore IV (VPU/QPU) ● LatticeMico32 ● AAP Samsung Open Source Group 23 Binary translation ● llvm-qemu ● Dagger ● McSema ● libcpu ● Fracture ● SkyEye Samsung Open Source Group 24 Symbolic Execution/Formal Verification ● KLEE ● S2E ● K framework with formal semantics for LLVM IR Samsung Open Source Group 25 Linux/FreeBSD ● Debian experimenting with Clang as an additional compiler (94.1% of ~22k packages successfully build with Clang 3.6) ● LLVMLinux ● OpenMandriva Lx ● FreeBSD Samsung Open Source Group 26 Misc ● Emacs fork using the LLVM JIT for Elisp byte code execution :) ● Cling - C++ interpreter ● CodeChecker - Web frontend for the Clang static analyzer ● include-what-you-use ● clang-closure ● Numba Samsung Open Source Group 27 Summary Samsung Open Source Group 28 Summary ● Wide range of different projects ● New frontends being written constantly ● Great compiler infrastructure ● Fast C/C++ compiler with expressive diagnostics Samsung Open Source Group 29 Give it a try! ● Visit llvm.org ● Distributions with Clang/LLVM packages: – Fedora – Debian/Ubuntu – openSUSE – Arch Linux – ...and many more Samsung Open Source Group 30 Thank you. Samsung Open Source Group 31 Contact Information: Tilmann Scheller [email protected] Samsung Open Source Group Samsung Research UK Samsung Open Source Group 32.
Recommended publications
  • The LLVM Instruction Set and Compilation Strategy
    The LLVM Instruction Set and Compilation Strategy Chris Lattner Vikram Adve University of Illinois at Urbana-Champaign lattner,vadve ¡ @cs.uiuc.edu Abstract This document introduces the LLVM compiler infrastructure and instruction set, a simple approach that enables sophisticated code transformations at link time, runtime, and in the field. It is a pragmatic approach to compilation, interfering with programmers and tools as little as possible, while still retaining extensive high-level information from source-level compilers for later stages of an application’s lifetime. We describe the LLVM instruction set, the design of the LLVM system, and some of its key components. 1 Introduction Modern programming languages and software practices aim to support more reliable, flexible, and powerful software applications, increase programmer productivity, and provide higher level semantic information to the compiler. Un- fortunately, traditional approaches to compilation either fail to extract sufficient performance from the program (by not using interprocedural analysis or profile information) or interfere with the build process substantially (by requiring build scripts to be modified for either profiling or interprocedural optimization). Furthermore, they do not support optimization either at runtime or after an application has been installed at an end-user’s site, when the most relevant information about actual usage patterns would be available. The LLVM Compilation Strategy is designed to enable effective multi-stage optimization (at compile-time, link-time, runtime, and offline) and more effective profile-driven optimization, and to do so without changes to the traditional build process or programmer intervention. LLVM (Low Level Virtual Machine) is a compilation strategy that uses a low-level virtual instruction set with rich type information as a common code representation for all phases of compilation.
    [Show full text]
  • Qt Creator Reference Card Mode File Editor Layout Editor Code Editor
    sidebar opened files symbol overview Menu Qt Creator reference card Welcome (Ctrl+1) Edit Mode File (Ctrl+2) Debug Ctrl+1 activate welcome mode Ctrl+N create new file (Ctrl+3) Ctrl+2 activate edit mode Ctrl+Shift+N create new project Projects (Ctrl+4) Ctrl+3 activate debug mode Ctrl+O open file Help Ctrl+4 activate projects mode Ctrl+S save current document (Ctrl+5) Ctrl+5 activate help mode Ctrl+Shift+S save all documents Output Ctrl+6 activate output mode Ctrl+W close current document (Ctrl+6) Esc go back to code editor Ctrl+Shift+W close all documents Esc,Esc close all secondary windows in editor mode Document navigation Editor layout Ctrl+Tab previous document in history Ctrl+E,2 split run(Ctrl+R) Ctrl+Shift+Tab next document in history Ctrl+E,3 split side by side debug(F5) Alt+← go back Ctrl+E,0 remove current split build all Alt+→ go forward Ctrl+E,1 remove all splits (Ctrl+Shift+B) Ctrl+E,O go to other split (Alt+0) quick open (Ctrl+K) (Alt+1) (Alt+2) (Alt+3) (Alt+4) Quick open Editor Code editor Build & debug Ctrl+K activate locator Ctrl+Z undo Ctrl+I auto-indent selection Ctrl+B build current project <text> files in any project Ctrl+Shift+Z redo Ctrl+/ (un)comment selection Ctrl+Shift+B build all projects l <number> line in current document Ctrl+X cut Ctrl+< collapse block Ctrl+R run project m<text> methods Ctrl+C copy Ctrl+> expand block F5 start debugging c <text> classes Ctrl+V paste Ctrl+[ go to block start Shift+F5 stop debugger : <text> classes and methods Ctrl+A select all Ctrl+] go to block end Ctrl+Shift+F5 reset debugger
    [Show full text]
  • Release Notes and Errata
    OpenMandriva Lx 4.3rc Release Notes The OpenMandriva Lx teams are pleased to announce the availability of OpenMandriva Lx 4.3rc. Available Media This release is available as a live media DVD or USB flash drive (memory stick), downloadable in ISO format. These are available on our downloads page. USB flash drive installation is usually noticeably faster. As always speed depends on many factors. Live media means you are able to run OpenMandriva Lx straight from a DVD or memory stick (see below) and try it before installing it. You may also install the system to hard disk either from the running live image or from the boot manager. Available ISO files are: •x86_64 KDE Plasma desktop full featured (includes the most common used functionalities, multimedia and office software). •znver1 Plasma: we have also built a version specifically for current AMD processors (Ryzen, ThreadRipper, EPYC) that outperforms the generic (x86_64) version by taking advantage of new features in those processors. znver1 is for the listed processors (Ryzen, ThreadRipper, EPYC) only, do not install on any other hardware. Installable images are offered for the Pinebook Pro, Raspberry Pi 4B, Raspberry Pi 3B+, Synquacer, Cubox Pulse and generic UEFI compatible devices (such as most aarch64 server boards) System requirements OpenMandriva Lx 4.3 requires at least 2048 MB of memory and at least 10 GB of hard drive space (see below for known issues with partitioning). Important Note: Graphics Hardware: The KDE Plasma Desktop requires a 3D graphics card that supports OpenGL 2.0 or above. We recommend using AMD, Intel, Adreno or VC4 graphics chips.
    [Show full text]
  • Europass Curriculum Vitae
    Europass Curriculum Vitae Personal Information Surname(s) / First name(s) Moreira da Mota, Eduardo Address(es) Rua Padre António Joaquim Freire 4, 4580-878 Bitarães, Portugal Telephone(s) Mobile #1: +351 910 565 777 / Mobile #2: +49 171 101 4297 Email(s) [email protected] Nationality(-ies) Portuguese Date of Birth 24th November 1988 Gender Male Desired employment/ Electrical and Computer Science Engineer Occupational field Work experience Dates Since June 2012 Occupation or position held Research Scholarship Main activities and Development of software in C/C++ for vehicular networks responsibilities Name and address of employer IT Porto – Rua Dr. Roberto Frias s/n, 4200-465 Porto Portugal Type of business or sector Research & Development Dates October 2011 – May 2012 Occupation or position held Software Engineer Main activities and Development of software/hardware in C/C++, Labview and Eagle responsibilities Name and address of employer Wolf-Messtechnik GmbH – Industriestrasse 6, 91126 Schwabach, Germany Type of business or sector Software/Hardware Development for Measuring and Automation Systems Dates February 2011 – July 2011 Occupation or position held Intern Main activities and Master Thesis development, entitled Motion and Teaching of a NAO Robot. responsibilities Research & Development. Level in national or international 18 out of 20 classification Name and address of employer INESC TEC – Rua Dr. Roberto Frias 378, 4200-465 Porto Portugal Type of business or sector Research & Development Education and training Dates September
    [Show full text]
  • Extending Qt Creator (Without Writing Code)
    Extending Qt Creator (without writing code) Tobias Hunger Configuration Configuration User configuration ● ~/.config/QtProject/(QtCreator*|qtcreator/*) ● Can be changed by “-settingspath <path>” argument ● sqlite db + .ini file ● XML files (and more) in qtcreator subfolder ● Leave alone ● Possible exception: Sessions (*.qws) Configuration System wide configuration ● ../share/qtcreator/QtProject/* ● Same as above (without sqlite file) ● XML files, .ini-file ● Use sdktool to edit XML files Configuration Project configuration ● .user and .shared file ● XML files ● No tool for .shared file, leave .user alone ● Do not check in .user files! Built-in Tools Editors Generic Highlighters ● Configure via Tools>Options> Text Editor> Generic Highlighter ● or by putting files into ../share/qtcreator/ generic-highlighter Editors Macros ● Custom complex edit operations ● Configure via Tools>Macros ● No global configuration, user configuration in .../QtProject/qtcreator/macros (binary files) Documentation Custom Documentation ● Configure via Tools>Options> Help>Documentation ● or by putting [Help] InstalledDocumentation=/path/to/dir (Comma separated list of paths) into QtCreator.ini Debugger ● GDB/LLDB Python code in shared/qtcreator/dumper/qttypes.py or register own files in Tools>Options>Debugger>GDB> Additional Startup Commands – qtdump__type__name(d, value) – qtedit__type__name(d, value) ● CDB C++ code in src/libs/qtcreatorcdbext (Qt Creator sources!) Designer ● Designer plugins for custom widgets Pitfall: Plugin needs to be built for Qt Creator, not for your project! ● Qml Designer offers similar feature for custom QML components Projects ● Custom Build-/Clean-/Deploy Steps ● Run Custom Executables ● Environment ● Variable Substitution: – %{CurrentBuild:Name}, – %{CurrentProject:FilePath}, – %{CurrentDocument:Row}, – %{CurrentKit:Id}, ... many more! External Tools External Tools ● Run stand-alone tools from Qt Creator – Configure executable, arguments, stdin, etc.
    [Show full text]
  • What Is LLVM? and a Status Update
    What is LLVM? And a Status Update. Approved for public release Hal Finkel Leadership Computing Facility Argonne National Laboratory Clang, LLVM, etc. ✔ LLVM is a liberally-licensed(*) infrastructure for creating compilers, other toolchain components, and JIT compilation engines. ✔ Clang is a modern C++ frontend for LLVM ✔ LLVM and Clang will play significant roles in exascale computing systems! (*) Now under the Apache 2 license with the LLVM Exception LLVM/Clang is both a research platform and a production-quality compiler. 2 A role in exascale? Current/Future HPC vendors are already involved (plus many others)... Apple + Google Intel (Many millions invested annually) + many others (Qualcomm, Sony, Microsoft, Facebook, Ericcson, etc.) ARM LLVM IBM Cray NVIDIA (and PGI) Academia, Labs, etc. AMD 3 What is LLVM: LLVM is a multi-architecture infrastructure for constructing compilers and other toolchain components. LLVM is not a “low-level virtual machine”! LLVM IR Architecture-independent simplification Architecture-aware optimization (e.g. vectorization) Assembly printing, binary generation, or JIT execution Backends (Type legalization, instruction selection, register allocation, etc.) 4 What is Clang: LLVM IR Clang is a C++ frontend for LLVM... Code generation Parsing and C++ Source semantic analysis (C++14, C11, etc.) Static analysis ● For basic compilation, Clang works just like gcc – using clang instead of gcc, or clang++ instead of g++, in your makefile will likely “just work.” ● Clang has a scalable LTO, check out: https://clang.llvm.org/docs/ThinLTO.html 5 The core LLVM compiler-infrastructure components are one of the subprojects in the LLVM project. These components are also referred to as “LLVM.” 6 What About Flang? ● Started as a collaboration between DOE and NVIDIA/PGI.
    [Show full text]
  • CUDA Flux: a Lightweight Instruction Profiler for CUDA Applications
    CUDA Flux: A Lightweight Instruction Profiler for CUDA Applications Lorenz Braun Holger Froning¨ Institute of Computer Engineering Institute of Computer Engineering Heidelberg University Heidelberg University Heidelberg, Germany Heidelberg, Germany [email protected] [email protected] Abstract—GPUs are powerful, massively parallel processors, hardware, it lacks verbosity when it comes to analyzing the which require a vast amount of thread parallelism to keep their different types of instructions executed. This problem is aggra- thousands of execution units busy, and to tolerate latency when vated by the recently frequent introduction of new instructions, accessing its high-throughput memory system. Understanding the behavior of massively threaded GPU programs can be for instance floating point operations with reduced precision difficult, even though recent GPUs provide an abundance of or special function operations including Tensor Cores for ma- hardware performance counters, which collect statistics about chine learning. Similarly, information on the use of vectorized certain events. Profiling tools that assist the user in such analysis operations is often lost. Characterizing workloads on PTX for their GPUs, like NVIDIA’s nvprof and cupti, are state-of- level is desirable as PTX allows us to determine the exact types the-art. However, instrumentation based on reading hardware performance counters can be slow, in particular when the number of the instructions a kernel executes. On the contrary, nvprof of metrics is large. Furthermore, the results can be inaccurate as metrics are based on a lower-level representation called SASS. instructions are grouped to match the available set of hardware Still, even if there was an exact mapping, some information on counters.
    [Show full text]
  • MICHEL (WOLF.LU) Automotive Embedded Software Developer
    MICHEL (WOLF.LU) automotive embedded software developer PROFILE CONTACT I am a Software Developer with over 7 years of Address : 10, Rue de Zoufftgen professional experience in position with top notch 57330 ROUSSY LE VILLAGE - France automotive organizations, mentored software Phone : +33 6 74 63 97 90 developer, brilliant and innovative thinking ability, E-Mail : [email protected] professional and simplified approach in organization. LinkedIn : linkedin.com/michelwolflux I also have several web experiences in freelance or as part of a self-built website. LANGUAGES PROFESSIONAL EXPERIENCES French DELPHI TECHNOLOGIES August 2017-Present English Software Developer German • Responsible for analysis of requirements, design and coding of product SKILLS software for engine control modules. • Generates software code for real-time embedded systems. System : Arduino, Rasberry Pi, Windows XP/7/10, Unix (Shell programmation) FREELANCE June 2016-July 2017 Front End Web Developer Language : .Net, Apache Velocity, C, C#, C++, Java SE, PHP, Perl, Python, Qt, UML, Visual • Development of responsive websites using HTML5, CSS3 and Basic JavaScript. • Search Engine Optimization to increase business online conversion Web : Ajax, CSS3, Bootstrap 3, HTML5, Ionic, rate. Javascript, jQuery BRACE AUTOMOTIVE October 2013-May 2016 Database : MSSQL, MySQL Software Architect Software : ClearQuest, Eclipse, Enterprise • Development on Polarion software to ensure the completeness of the Architect, Git, Qt Creator, Telelogic Synergy, information about every step of development process. Introduction to WinCVS, Tortoise SVN, WAMP, PlasticSCM, Application Lifecycle Management. Trace32, Etas Inca • Development of a cross-company solution (AE-ISSUE) to ease the exchange of work requests, to ensure consistencies and to improve Quality : Object Oriented Software, the tracking of customer requirements implementation.
    [Show full text]
  • Implementing Continuation Based Language in LLVM and Clang
    Implementing Continuation based language in LLVM and Clang Kaito TOKUMORI Shinji KONO University of the Ryukyus University of the Ryukyus Email: [email protected] Email: [email protected] Abstract—The programming paradigm which use data seg- 1 __code f(Allocate allocate){ 2 allocate.size = 0; ments and code segments are proposed. This paradigm uses 3 goto g(allocate); Continuation based C (CbC), which a slight modified C language. 4 } 5 Code segments are units of calculation and Data segments are 6 // data segment definition sets of typed data. We use these segments as units of computation 7 // (generated automatically) 8 union Data { and meta computation. In this paper we show the implementation 9 struct Allocate { of CbC on LLVM and Clang 3.7. 10 long size; 11 } allocate; 12 }; I. A PRACTICAL CONTINUATION BASED LANGUAGE TABLE I The proposed units of programming are named code seg- CBCEXAMPLE ments and data segments. Code segments are units of calcu- lation which have no state. Data segments are sets of typed data. Code segments are connected to data segments by a meta data segment called a context. After the execution of a code have input data segments and output data segments. Data segment and its context, the next code segment (continuation) segments have two kind of dependency with code segments. is executed. First, Code segments access the contents of data segments Continuation based C (CbC) [1], hereafter referred to as using field names. So data segments should have the named CbC, is a slight modified C which supports code segments.
    [Show full text]
  • Qt Camera Manager Technical Guide
    Qt Camera Manager Technical guide by Thomas Dubrulle and Antonin Durey with Tomas Holt and Grethe Sandstrak collaboration 2014 edition 1/15 2/15 Table of contents I) Setup the environment 4 1.1) On Windows............................................................................4 1.1.1) Qt......................................................................................................................................4 1.1.2) FlyCapture........................................................................................................................4 1.1.3) Integrated Development Environment (IDE)...................................................................5 1.2) On Linux.................................................................................7 1.2.1) Ubuntu..............................................................................................................................7 1.3) Checking..................................................................................7 II) Implementation 8 2.1) QtCreator and main................................................................8 2.2) MainWindow...........................................................................8 2.2.1) Main presentation.............................................................................................................8 2.2.2) Camera Tree......................................................................................................................9 2.2.3) Project Tree.......................................................................................................................9
    [Show full text]
  • Introduction to Fmxlinux Delphi's Firemonkey For
    Introduction to FmxLinux Delphi’s FireMonkey for Linux Solution Jim McKeeth Embarcadero Technologies [email protected] Chief Developer Advocate & Engineer For quality purposes, all lines except the presenter are muted IT’S OK TO ASK QUESTIONS! Use the Q&A Panel on the Right This webinar is being recorded for future playback. Recordings will be available on Embarcadero’s YouTube channel Your Presenter: Jim McKeeth Embarcadero Technologies [email protected] | @JimMcKeeth Chief Developer Advocate & Engineer Agenda • Overview • Installation • Supported platforms • PAServer • SDK & Packages • Usage • UI Elements • Samples • Database Access FireDAC • Migrating from Windows VCL • midaconverter.com • 3rd Party Support • Broadway Web Why FMX on Linux? • Education - Save money on Windows licenses • Kiosk or Point of Sale - Single purpose computers with locked down user interfaces • Security - Linux offers more security options • IoT & Industrial Automation - Add user interfaces for integrated systems • Federal Government - Many govt systems require Linux support • Choice - Now you can, so might as well! Delphi for Linux History • 1999 Kylix: aka Delphi for Linux, introduced • It was a port of the IDE to Linux • Linux x86 32-bit compiler • Used the Trolltech QT widget library • 2002 Kylix 3 was the last update to Kylix • 2017 Delphi 10.2 “Tokyo” introduced Delphi for x86 64-bit Linux • IDE runs on Windows, cross compiles to Linux via the PAServer • Designed for server side development - no desktop widget GUI library • 2017 Eugene
    [Show full text]
  • Clang & LLVM: How They Can Improve Your Life As a Developer
    Clang & LLVM: How they can improve your life as a developer Tilmann Scheller Overview Introduction LLVM Overview Clang Performance Summary What is LLVM? Mature, production-quality compiler framework Modular architecture Heavily optimizing static and dynamic compiler Supports all major architectures (x86, ARM, MIPS, PowerPC, …) Powerful link-time optimizations (LTO) Permissive license (BSD-like) LLVM sub-projects Clang C/C++/Objective C frontend and static analyzer LLDB Next generation debugger leveraging the LLVM libraries, e.g. the Clang expression parser lld Framework for creating linkers, will make Clang independent of the system linker in the future Polly Polyhedral optimizer for LLVM, e.g. high-level loop optimizations and data- locality optimizations Which companies are contributing? ® Who is using LLVM? WebKit FTL JIT Rust Android (NDK, ART, RenderScript) Portable NativeClient (PNaCl) Majority of OpenCL implementations based on Clang/LLVM CUDA, RenderScript LLVM on Linux: LLVMLinux, LLVMpipe (software rasterizer in Mesa), Radeon R300-R900 drivers in Mesa Clang users Default compiler on OS X Default compiler on FreeBSD Default compiler for native applications on Tizen Default compiler on OpenMandriva Lx starting with the next release (2015.0) Debian experimenting with Clang as an additional compiler (94.3% of ~20k packages successfully build with Clang 3.5) Android NDK ships Clang LLVM LLVM IR Scalar optimizations Interprocedural optimizations Auto-vectorizer (BB, Loop and SLP) Profile-guided optimizations Compiler Architecture
    [Show full text]