Skip to content

Commit 42192ff

Browse files
committed
WIP: Implementing Symbolic ASR pass
1 parent 7384e92 commit 42192ff

File tree

5 files changed

+52
-0
lines changed

5 files changed

+52
-0
lines changed

src/libasr/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ set(SRC
4848
pass/unused_functions.cpp
4949
pass/flip_sign.cpp
5050
pass/div_to_mul.cpp
51+
pass/replace_symbolic.cpp
5152
pass/intrinsic_function.cpp
5253
pass/fma.cpp
5354
pass/loop_vectorise.cpp

src/libasr/gen_pass.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"replace_implied_do_loops",
1313
"replace_init_expr",
1414
"inline_function_calls",
15+
"replace_symbolic",
1516
"replace_intrinsic_function",
1617
"loop_unroll",
1718
"loop_vectorise",

src/libasr/pass/pass_manager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <libasr/pass/replace_arr_slice.h>
2929
#include <libasr/pass/replace_flip_sign.h>
3030
#include <libasr/pass/replace_div_to_mul.h>
31+
#include <libasr/pass/replace_symbolic.h>
3132
#include <libasr/pass/replace_intrinsic_function.h>
3233
#include <libasr/pass/replace_fma.h>
3334
#include <libasr/pass/loop_unroll.h>
@@ -71,6 +72,7 @@ namespace LCompilers {
7172
{"global_stmts", &pass_wrap_global_stmts},
7273
{"implied_do_loops", &pass_replace_implied_do_loops},
7374
{"array_op", &pass_replace_array_op},
75+
{"symbolic", &pass_replace_symbolic},
7476
{"intrinsic_function", &pass_replace_intrinsic_function},
7577
{"arr_slice", &pass_replace_arr_slice},
7678
{"print_arr", &pass_replace_print_arr},
@@ -203,6 +205,7 @@ namespace LCompilers {
203205
"subroutine_from_function",
204206
"where",
205207
"array_op",
208+
"symbolic",
206209
"intrinsic_function",
207210
"array_op",
208211
"pass_array_by_data",

src/libasr/pass/replace_symbolic.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include <libasr/asr.h>
2+
#include <libasr/containers.h>
3+
#include <libasr/exception.h>
4+
#include <libasr/asr_utils.h>
5+
#include <libasr/asr_verify.h>
6+
#include <libasr/pass/replace_symbolic.h>
7+
#include <libasr/pass/pass_utils.h>
8+
9+
#include <vector>
10+
11+
12+
namespace LCompilers {
13+
14+
using ASR::down_cast;
15+
using ASR::is_a;
16+
17+
18+
class ReplaceSymbolicVisitor : public PassUtils::PassVisitor<ReplaceSymbolicVisitor>
19+
{
20+
public:
21+
ReplaceSymbolicVisitor(Allocator &al_) :
22+
PassVisitor(al_, nullptr) {
23+
pass_result.reserve(al, 1);
24+
}
25+
};
26+
27+
void pass_replace_symbolic(Allocator &al, ASR::TranslationUnit_t &unit,
28+
const LCompilers::PassOptions& /*pass_options*/) {
29+
ReplaceSymbolicVisitor v(al);
30+
v.visit_TranslationUnit(unit);
31+
}
32+
33+
} // namespace LCompilers

src/libasr/pass/replace_symbolic.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef LIBASR_PASS_REPLACE_SYMBOLIC_H
2+
#define LIBASR_PASS_REPLACE_SYMBOLIC_H
3+
4+
#include <libasr/asr.h>
5+
#include <libasr/utils.h>
6+
7+
namespace LCompilers {
8+
9+
void pass_replace_symbolic(Allocator &al, ASR::TranslationUnit_t &unit,
10+
const PassOptions &pass_options);
11+
12+
} // namespace LCompilers
13+
14+
#endif // LIBASR_PASS_REPLACE_SYMBOLIC_H

0 commit comments

Comments
 (0)