@@ -13,7 +13,7 @@ use crate::builder::{Builder, PlaceRef, UNNAMED};
13
13
use crate :: context:: SimpleCx ;
14
14
use crate :: declare:: declare_simple_fn;
15
15
use crate :: llvm;
16
- use crate :: llvm:: { Metadata , TRUE , Type } ;
16
+ use crate :: llvm:: { TRUE , Type } ;
17
17
use crate :: value:: Value ;
18
18
19
19
pub ( crate ) fn adjust_activity_to_abi < ' tcx > (
@@ -159,32 +159,32 @@ fn match_args_from_caller_to_enzyme<'ll, 'tcx>(
159
159
let mut outer_pos: usize = 0 ;
160
160
let mut activity_pos = 0 ;
161
161
162
- let enzyme_const = cx. create_metadata ( b "enzyme_const") ;
163
- let enzyme_out = cx. create_metadata ( b "enzyme_out") ;
164
- let enzyme_dup = cx. create_metadata ( b "enzyme_dup") ;
165
- let enzyme_dupv = cx. create_metadata ( b "enzyme_dupv") ;
166
- let enzyme_dupnoneed = cx. create_metadata ( b "enzyme_dupnoneed") ;
167
- let enzyme_dupnoneedv = cx. create_metadata ( b "enzyme_dupnoneedv") ;
162
+ let global_const = cx. declare_global ( "enzyme_const" , cx . type_ptr ( ) ) ;
163
+ let global_out = cx. declare_global ( "enzyme_out" , cx . type_ptr ( ) ) ;
164
+ let global_dup = cx. declare_global ( "enzyme_dup" , cx . type_ptr ( ) ) ;
165
+ let global_dupv = cx. declare_global ( "enzyme_dupv" , cx . type_ptr ( ) ) ;
166
+ let global_dupnoneed = cx. declare_global ( "enzyme_dupnoneed" , cx . type_ptr ( ) ) ;
167
+ let global_dupnoneedv = cx. declare_global ( "enzyme_dupnoneedv" , cx . type_ptr ( ) ) ;
168
168
169
169
while activity_pos < inputs. len ( ) {
170
170
let diff_activity = inputs[ activity_pos as usize ] ;
171
171
// Duplicated arguments received a shadow argument, into which enzyme will write the
172
172
// gradient.
173
- let ( activity, duplicated) : ( & Metadata , bool ) = match diff_activity {
173
+ let ( activity, duplicated) : ( & llvm :: Value , bool ) = match diff_activity {
174
174
DiffActivity :: None => panic ! ( "not a valid input activity" ) ,
175
- DiffActivity :: Const => ( enzyme_const , false ) ,
176
- DiffActivity :: Active => ( enzyme_out , false ) ,
177
- DiffActivity :: ActiveOnly => ( enzyme_out , false ) ,
178
- DiffActivity :: Dual => ( enzyme_dup , true ) ,
179
- DiffActivity :: Dualv => ( enzyme_dupv , true ) ,
180
- DiffActivity :: DualOnly => ( enzyme_dupnoneed , true ) ,
181
- DiffActivity :: DualvOnly => ( enzyme_dupnoneedv , true ) ,
182
- DiffActivity :: Duplicated => ( enzyme_dup , true ) ,
183
- DiffActivity :: DuplicatedOnly => ( enzyme_dupnoneed , true ) ,
184
- DiffActivity :: FakeActivitySize ( _) => ( enzyme_const , false ) ,
175
+ DiffActivity :: Const => ( global_const , false ) ,
176
+ DiffActivity :: Active => ( global_out , false ) ,
177
+ DiffActivity :: ActiveOnly => ( global_out , false ) ,
178
+ DiffActivity :: Dual => ( global_dup , true ) ,
179
+ DiffActivity :: Dualv => ( global_dupv , true ) ,
180
+ DiffActivity :: DualOnly => ( global_dupnoneed , true ) ,
181
+ DiffActivity :: DualvOnly => ( global_dupnoneedv , true ) ,
182
+ DiffActivity :: Duplicated => ( global_dup , true ) ,
183
+ DiffActivity :: DuplicatedOnly => ( global_dupnoneed , true ) ,
184
+ DiffActivity :: FakeActivitySize ( _) => ( global_const , false ) ,
185
185
} ;
186
186
let outer_arg = outer_args[ outer_pos] ;
187
- args. push ( cx . get_metadata_value ( activity) ) ;
187
+ args. push ( activity) ;
188
188
if matches ! ( diff_activity, DiffActivity :: Dualv ) {
189
189
let next_outer_arg = outer_args[ outer_pos + 1 ] ;
190
190
let elem_bytes_size: u64 = match inputs[ activity_pos + 1 ] {
@@ -244,7 +244,7 @@ fn match_args_from_caller_to_enzyme<'ll, 'tcx>(
244
244
assert_eq ! ( cx. type_kind( next_outer_ty3) , TypeKind :: Integer ) ;
245
245
args. push ( next_outer_arg2) ;
246
246
}
247
- args. push ( cx . get_metadata_value ( enzyme_const ) ) ;
247
+ args. push ( global_const ) ;
248
248
args. push ( next_outer_arg) ;
249
249
outer_pos += 2 + 2 * iterations;
250
250
activity_pos += 2 ;
@@ -353,13 +353,13 @@ pub(crate) fn generate_enzyme_call<'ll, 'tcx>(
353
353
let mut args = Vec :: with_capacity ( num_args as usize + 1 ) ;
354
354
args. push ( fn_to_diff) ;
355
355
356
- let enzyme_primal_ret = cx. create_metadata ( b "enzyme_primal_return") ;
356
+ let global_primal_ret = cx. declare_global ( "enzyme_primal_return" , cx . type_ptr ( ) ) ;
357
357
if matches ! ( attrs. ret_activity, DiffActivity :: Dual | DiffActivity :: Active ) {
358
- args. push ( cx . get_metadata_value ( enzyme_primal_ret ) ) ;
358
+ args. push ( global_primal_ret ) ;
359
359
}
360
360
if attrs. width > 1 {
361
- let enzyme_width = cx. create_metadata ( b "enzyme_width") ;
362
- args. push ( cx . get_metadata_value ( enzyme_width ) ) ;
361
+ let global_width = cx. declare_global ( "enzyme_width" , cx . type_ptr ( ) ) ;
362
+ args. push ( global_width ) ;
363
363
args. push ( cx. get_const_int ( cx. type_i64 ( ) , attrs. width as u64 ) ) ;
364
364
}
365
365
0 commit comments