@@ -249,6 +249,11 @@ class CodeGen_TC : public Halide::Internal::CodeGen_X86 {
249
249
return std::move (module );
250
250
}
251
251
252
+ // Convert an isl AST expression into an llvm::Value.
253
+ // Only expressions that consist of a pure identifier or
254
+ // a pure integer constant are currently supported.
255
+ llvm::Value* getValue (isl::ast_expr expr);
256
+
252
257
protected:
253
258
using CodeGen_X86::visit;
254
259
void visit (const Halide::Internal::Call* call) override {
@@ -361,6 +366,21 @@ class CodeGen_TC : public Halide::Internal::CodeGen_X86 {
361
366
}
362
367
};
363
368
369
+ llvm::Value* CodeGen_TC::getValue (isl::ast_expr expr) {
370
+ switch (isl_ast_expr_get_type (expr.get ())) {
371
+ case isl_ast_expr_type::isl_ast_expr_id:
372
+ return sym_get (expr.get_id ().get_name ());
373
+ case isl_ast_expr_type::isl_ast_expr_int: {
374
+ auto val = isl::manage (isl_ast_expr_get_val (expr.get ()));
375
+ CHECK (val.is_int ());
376
+ return getLLVMConstantSignedInt64 (val.get_num_si ());
377
+ }
378
+ default :
379
+ LOG (FATAL) << " NYI" ;
380
+ return nullptr ;
381
+ }
382
+ }
383
+
364
384
class LLVMCodegen {
365
385
void collectTensor (const Halide::OutputImageParam& t) {
366
386
auto sizes =
@@ -638,22 +658,7 @@ class LLVMCodegen {
638
658
llvm::SmallVector<llvm::Value*, 5 > subscriptValues;
639
659
640
660
for (const auto & subscript : subscripts) {
641
- switch (isl_ast_expr_get_type (subscript.get ())) {
642
- case isl_ast_expr_type::isl_ast_expr_id: {
643
- subscriptValues.push_back (
644
- halide_cg.sym_get (subscript.get_id ().get_name ()));
645
- break ;
646
- }
647
- case isl_ast_expr_type::isl_ast_expr_int: {
648
- auto val = isl::manage (isl_ast_expr_get_val (subscript.get ()));
649
- CHECK (val.is_int ());
650
- subscriptValues.push_back (
651
- getLLVMConstantSignedInt64 (val.get_num_si ()));
652
- break ;
653
- }
654
- default :
655
- LOG (FATAL) << " NYI" ;
656
- }
661
+ subscriptValues.push_back (halide_cg.getValue (subscript));
657
662
}
658
663
659
664
auto destAddr = halide_cg.get_builder ().CreateInBoundsGEP (
0 commit comments