@@ -10,10 +10,13 @@ namely LLVM, [Cranelift], and [GCC].
10
10
[ GCC ] : https://github.com/rust-lang/rustc_codegen_gcc
11
11
[ `rustc_codegen_ssa` ] : https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/index.html
12
12
13
- # Refactoring of ` rustc_codegen_llvm `
13
+ Below is some background information on the refactoring that created this
14
+ abstract interface.
15
+
16
+ ## Refactoring of ` rustc_codegen_llvm `
14
17
by Denis Merigoux, October 23rd 2018
15
18
16
- ## State of the code before the refactoring
19
+ ### State of the code before the refactoring
17
20
18
21
All the code related to the compilation of MIR into LLVM IR was contained
19
22
inside the ` rustc_codegen_llvm ` crate. Here is the breakdown of the most
@@ -53,7 +56,7 @@ While the LLVM-specific code will be left in `rustc_codegen_llvm`, all the new
53
56
traits and backend-agnostic code will be moved in ` rustc_codegen_ssa ` (name
54
57
suggestion by @eddyb ).
55
58
56
- ## Generic types and structures
59
+ ### Generic types and structures
57
60
58
61
@irinagpopa started to parametrize the types of ` rustc_codegen_llvm ` by a
59
62
generic ` Value ` type, implemented in LLVM by a reference ` &'ll Value ` . This
@@ -105,7 +108,7 @@ of the backend and it makes more sense to leave their definition to the backend
105
108
implementor than to allow just a narrow spot via a generic field for the
106
109
backend's context.
107
110
108
- ## Traits and interface
111
+ ### Traits and interface
109
112
110
113
Because they have to be defined by the backend, ` CodegenCx ` and ` Builder ` will
111
114
be the structures implementing all the traits defining the backend's interface.
@@ -172,7 +175,7 @@ called. However, when implementing a Rust backend for `rustc`, these methods
172
175
will need information from ` CodegenCx ` , hence the additional parameter (unused
173
176
in the LLVM implementation of the trait).
174
177
175
- ## State of the code after the refactoring
178
+ ### State of the code after the refactoring
176
179
177
180
The traits offer an API which is very similar to the API of LLVM. This is not
178
181
the best solution since LLVM has a very special way of doing things: when
0 commit comments