David Mak
51671800b6
core/builtins: Extract codegen portion into functions
...
We will need to reuse them when implementing elementwise function
application for ndarrays.
2024-05-06 13:21:54 +08:00
David Mak
7195476edb
core/builtins: Add llvm_intrinsics prefix
2024-05-06 13:21:54 +08:00
David Mak
eecba0b71d
core: Add GenCall::create_dummy
...
A simple abstraction for GenCalls that are already handled elsewhere.
2024-05-06 13:21:54 +08:00
David Mak
7b4253ccd8
core/numpy: Add missing lifetime parameters
2024-05-06 13:21:54 +08:00
David Mak
f58c3a11f8
core/builtins: Rework handling of PrimitiveStore-Unifier tuples
2024-05-06 13:21:54 +08:00
David Mak
d0766a116f
core: Remove Box from GenCallCallback type alias
...
So that references to the function type can be taken.
2024-05-06 13:21:54 +08:00
David Mak
64a3751fc2
core: Remove custom function type definitions for ndarray operators
2024-05-06 13:21:54 +08:00
David Mak
062e318dd5
core/magic_methods: Fix clippy warnings
2024-05-06 13:21:54 +08:00
David Mak
847615fc2f
core: Implement numpy.matmul for 2D-2D ndarrays
2024-04-23 10:27:37 +08:00
David Mak
5dfcc63978
core/classes: Take reference of indexes
2024-04-16 17:20:24 +08:00
David Mak
025b3cd02f
core/stmt: Remove gen_if_chained*
...
Turns out it is really difficult to get lifetimes and closures right, so
let's just provide the most rudimentary if-else codegen and we can nest
them if necessary.
2024-04-16 17:16:50 +08:00
David Mak
e0f440040c
core/expr: Implement negative indices for ndarray
2024-04-15 12:49:42 +08:00
David Mak
f0715e2b6d
core/stmt: Add gen_if* functions
...
For generating if-constructs in IR.
2024-04-15 12:20:34 +08:00
David Mak
e7fca67786
core/stmt: Do not generate jumps if bb is already terminated
...
Future-proofs gen_*_callback functions in case other codegen functions
will delegate to it in the future.
2024-04-15 12:20:34 +08:00
David Mak
52c731c312
core: Implement Not/UAdd/USub for booleans
...
Not sure if this is deliberate or an oversight, but we implement it
anyway for consistency with other Python implementations.
2024-04-12 18:29:58 +08:00
David Mak
00d1b9be9b
core: Fix __inv__ for i8-based boolean operands
2024-04-12 15:35:54 +08:00
David Mak
e614dd4257
core/type_inferencer: Fix location of unary/compare expressions
...
Codegen uses this location information to determine the CallId, and if
a function call is the operand of a unary expression or left-hand
operand of a compare expression, codegen will use the type of the
operator expression rather than the actual operand type.
2024-04-05 15:42:10 +08:00
David Mak
937a8b9698
core/magic_methods: Fix type of unary ops with primitive types
2024-04-05 13:23:08 +08:00
David Mak
876ad6c59c
core/type_inferencer: Include location info if inferencer fails
2024-04-05 13:22:35 +08:00
David Mak
a920fe0501
core: Implement elementwise comparison operators
2024-04-03 00:07:33 +08:00
David Mak
727a1886b3
core: Implement elementwise unary operators
2024-04-03 00:07:33 +08:00
David Mak
6af13a8261
core: Implement elementwise binary operators
...
Including immediate variants of these operators.
2024-04-03 00:07:33 +08:00
David Mak
3540d0ab29
core/magic_methods: Add typeof_*op
...
Used to determine the expected type of the binary operator with
primitive operands.
2024-04-03 00:07:33 +08:00
David Mak
3a6c53d760
core/toplevel/numpy: Split ndarray type var utilities
2024-04-03 00:07:33 +08:00
David Mak
87bc34f7ec
core: Implement calculations for broadcasting ndarrays
2024-04-03 00:07:31 +08:00
David Mak
f50a5f0345
core/type_inferencer: Allow both int32 and isize when indexing ndarray
2024-04-02 16:49:12 +08:00
David Mak
a77fd213e0
core/magic_methods: Allow unknown return types
...
These types can be later inferred by the type inferencer.
2024-04-02 16:49:12 +08:00
David Mak
8f1497df83
core/helper: Add PrimitiveDefinitionIds::iter
2024-04-02 16:49:12 +08:00
David Mak
5ca2dbeec8
core/typedef: Add Type::obj_id to replace get_obj_id
2024-04-02 16:49:10 +08:00
David Mak
9a98cde595
core: Extract codegen portion of gen_*op_expr
...
This allows *ops to be generated internally using LLVM values as
input. Required in a future change.
2024-04-01 16:48:25 +08:00
David Mak
5ba8601b39
core: Remove ArrayValue variants of functions
...
These will be lowered and optimized away later anyways, and we have
ArrayLikeAccessor now.
2024-04-01 16:48:25 +08:00
David Mak
26a01b14d5
core: Use more typed slices in APIs
2024-04-01 16:48:25 +08:00
David Mak
d5f4817134
core/builtins: Fix len() on ndarrays
2024-04-01 16:48:24 +08:00
David Mak
789bfb5a26
core: Fix index-based operations not returning i32
2024-04-01 16:46:45 +08:00
David Mak
4bb0e60981
core: Apply clippy suggestions
2024-04-01 16:46:41 +08:00
David Mak
13f06f3e29
core: Refactor VarMap to IndexMap
...
This is the only Map I can find that preserves insertion order while
also deduplicating elements by key.
2024-03-22 15:51:23 +08:00
David Mak
f0da9c0283
core: Add ArrayLikeValue
...
For exposing LLVM values that can be accessed like an array.
2024-03-22 15:51:06 +08:00
David Mak
2c4bf3ce59
core: Allow unsized CodeGenerator to be passed to some codegen functions
...
Enables codegen_callback to call these codegen functions as well.
2024-03-22 15:07:28 +08:00
David Mak
e980f19c93
core: Simplify typed value assertions
2024-03-22 15:07:28 +08:00
David Mak
cfbc37c1ed
core: Add gen_for_callback_incrementing
...
Simplifies generation of monotonically increasing for loops.
2024-03-22 15:07:28 +08:00
David Mak
50264e8750
core: Add missing unchecked accessors for NDArrayDimsProxy
2024-03-22 15:07:28 +08:00
David Mak
1b77e62901
core: Split numpy into codegen and toplevel
2024-03-22 15:07:28 +08:00
David Mak
fd44ee6887
core: Apply clippy suggestions
2024-03-22 15:07:23 +08:00
David Mak
c8866b1534
core/classes: Rename get_* functions to remove prefix
...
As suggested by Rust API Guidelines.
2024-03-21 15:46:10 +08:00
David Mak
84a888758a
core: Rename unsafe functions to unchecked
...
This is this intended name of the functions.
2024-03-21 15:46:10 +08:00
David Mak
c3b122acfc
core: Implement `ndarray.copy`
2024-03-07 14:59:13 +08:00
David Mak
a94927a11d
core: Update __builtin_assume expressions
...
No dimension size should be 0.
2024-03-07 14:59:13 +08:00
David Mak
ebf86cd134
core: Use size_t for accessing array elements
2024-03-07 14:59:13 +08:00
David Mak
cccd8f2d00
core: Fix ndarray_eye not preserving signness of offset
2024-03-07 14:59:13 +08:00
David Mak
3292aed099
core: Fix ndarray subscript operator returning the wrong object
...
Should be returning the newly created object instead of the original
ndarray...
2024-03-07 14:59:13 +08:00
David Mak
96b7f29679
core: Implement `ndarray.fill`
2024-03-07 14:59:13 +08:00
David Mak
3d2abf73c8
core: Replace ndarray_init_dims IRRT impl with IR impl
...
Implementation of that function in IR allows for more flexibility in
terms of different integer type widths.
2024-03-07 14:59:13 +08:00
David Mak
f682e9bf7a
core: Match IRRT compile flavor with build profile
2024-03-07 14:59:02 +08:00
David Mak
b26cb2b360
core: Express member func def IDs as offsets from class def ID
2024-03-06 12:24:39 +08:00
David Mak
2317516cf6
core: Use tvars from ndarray for class definition
2024-03-04 23:58:02 +08:00
David Mak
77de24ef74
core: Use BTreeMap for type variable mapping
...
There have been multiple instances where I had the need to iterate over
type variables, only to discover that the traversal order is arbitrary.
This commit fixes that by adding SortedMapping, which utilizes BTreeMap
internally to guarantee a traversal order. All instances of VarMap are
now refactored to use this to ensure that type variables are iterated in
the order of its variable ID, which should be monotonically incremented
by the unifier.
2024-03-04 23:56:04 +08:00
David Mak
234a6bde2a
core: Use TObj for NDArray
2024-03-01 15:41:55 +08:00
David Mak
c3db6297d9
core: Add primitive definition-id list
...
So that we have a single ground truth for the definition IDs of
primitive types.
2024-03-01 11:29:10 +08:00
David Mak
82fdb02d13
core: Extract LLVM intrinsic functions to their functions
2024-02-23 15:41:06 +08:00
David Mak
4efdd17513
core: Add missing From implementations for LLVM wrapper classes
2024-02-23 15:41:06 +08:00
David Mak
49de81ef1e
core: Apply clippy suggestions
2024-02-23 15:41:06 +08:00
David Mak
8492503af2
core: Update cargo dependencies
2024-02-23 15:41:04 +08:00
David Mak
cc538d221a
core: Implement codegen for indexing into ndarray
2024-02-19 17:13:09 +08:00
David Mak
0d5c53e60c
core: Implement type inference for indexing into ndarray
2024-02-19 17:13:09 +08:00
David Mak
976a9512c1
core: Add const variants to NDArray element getters
2024-02-19 16:56:21 +08:00
David Mak
1eacaf9afa
core: Fix IRRT argument order to ndarray_flatten_index
2024-02-19 16:37:13 +08:00
David Mak
8c7e44098a
core: Fix IRRT implementation of ndarray_flatten_index
2024-02-19 16:37:13 +08:00
David Mak
282a3e1911
core: Fix typo in error message
2024-02-14 16:26:13 +08:00
David Mak
5cecb2bb74
core: Fix Literal use in variable type annotation
2024-02-06 18:16:14 +08:00
David Mak
1963c30744
core: Use Display output for locations
2024-02-06 18:11:51 +08:00
David Mak
27011f385b
core: Add location to non-primitive value return error
2024-02-02 12:49:21 +08:00
David Mak
d6302b6ec8
core: Allow tuple of primitives to be returned
2024-02-02 12:48:52 +08:00
David Mak
b3736c3e99
core: Disallow returning of non-primitive values
...
Non-primitive values are represented by an `alloca`-ed value in the
function body, and when the pointer is returned from the function, the
`alloca`-ed object is deallocated on the stack.
Related to #54 .
2024-01-29 12:49:24 +08:00
David Mak
8470915809
core: Add NDArrayValue and helper functions
2024-01-25 15:51:39 +08:00
David Mak
148900302e
core: Add RangeValue and helper functions
2024-01-25 15:51:39 +08:00
David Mak
5ee08b585f
core: Add ListValue and helper functions
2024-01-25 15:51:39 +08:00
David Mak
f1581299fc
core: Minor changes to IRRT
...
Add missing documentation, remove redundant lifetime variables, and fix
typos.
2024-01-25 15:50:53 +08:00
David Mak
e3e2c36ef4
core: Mark TNDArray and TLiteral as unimplemented in tests
2024-01-17 09:58:14 +08:00
David Mak
4f9a0110c4
meta: Update insta snapshots
2024-01-17 09:49:50 +08:00
David Mak
12c0eed0a3
core: Fix compilation of tests
2024-01-17 09:49:49 +08:00
David Mak
140f8f8a08
core: Implement most ndarray-creation functions
2023-12-22 16:29:55 +08:00
David Mak
27fcf8926e
core: Implement ndarray constructor and numpy.empty
2023-12-22 16:29:54 +08:00
David Mak
afa7d9b100
core: Implement helper for creation of generic ndarray
2023-12-21 15:39:49 +08:00
David Mak
c395472094
core: Initial infrastructure for ndarray
2023-12-21 15:39:46 +08:00
David Mak
03870f222d
core: Extract special method handling in type inferencer
...
To prepare for more special handling with methods.
2023-12-21 15:38:26 +08:00
David Mak
e435b25756
core: Allow implicit promotions of integral literals
...
It should not matter, since it is the value of the literal that matters
with respect to the const generic variable.
2023-12-21 15:21:08 +08:00
David Mak
bd792904f9
core: Add size_t to primitive store
...
Used for ndims in ndarray.
2023-12-21 15:20:31 +08:00
David Mak
1c3a823670
core: Do not discard value names for IRRT
2023-12-20 15:16:02 +08:00
David Mak
9d64e606f4
core: Reject multiple literal bounds
...
This is currently broken due to how we handle function calls in the
unifier.
2023-12-18 10:04:25 +08:00
David Mak
6dccb343bb
Revert "core: Do not keep unification result for function arguments"
...
This reverts commit f09f3c27a5
.
2023-12-18 10:01:23 +08:00
David Mak
8886964776
core: Remove redundant argument in type annotation parsing
2023-12-16 18:40:48 +08:00
David Mak
f09f3c27a5
core: Do not keep unification result for function arguments
...
For some reason, when unifying a function call parameter with an
argument, subsequent calls to the same function will only accept the
type of the substituted argument.
This affect snippets like:
```
def make1() -> C[Literal[1]]:
return ...
def make2() -> C[Literal[2]]:
return ...
def consume(instance: C[Literal[1, 2]]):
pass
consume(make1())
consume(make2())
```
The last statement will result in a compiler error, as the parameter of
consume is replaced with C[Literal[1]].
We fix this by getting a snapshot before performing unification, and
restoring the snapshot after unification succeeds.
2023-12-16 18:40:48 +08:00
David Mak
0bbc9ce6f5
core: Deduplicate values in `Literal`
...
Matches the behavior with `typing.Literal`.
2023-12-16 18:40:48 +08:00
David Mak
457d3b6cd7
core: Refactor generic constants to `Literal`
...
Better matches the syntax of `typing.Literal`.
2023-12-16 18:40:48 +08:00
David Mak
5f692debd8
core: Add PrimitiveStore into Unifier
...
This will be used during unification between a const generic variable
and a `Literal`.
2023-12-16 18:40:48 +08:00
David Mak
b47ac1b89b
core: Minor formatting cleanup
2023-12-15 17:46:44 +08:00
David Mak
a19f1065e3
meta: Refactor to use more let-else bindings
2023-12-12 16:31:14 +08:00
David Mak
32746c37be
core: Refactor to return errors by HashSet
2023-12-12 15:41:59 +08:00
David Mak
16655959f2
meta: Update cargo dependencies
2023-12-12 15:41:59 +08:00
David Mak
d4c109b6ef
core: Add missing generic constant concrete type
2023-12-12 11:28:01 +08:00
David Mak
5ffd06dd61
core: Remove debugging statement
2023-12-12 11:23:51 +08:00
David Mak
bd3d67f3d6
artiq: Apply clippy pedantic changes
2023-12-11 15:16:23 +08:00
David Mak
02933753ca
core: Apply clippy pedantic changes
2023-12-11 15:16:23 +08:00
David Mak
a1f244834f
meta: Bringup some documentation
2023-12-11 15:16:23 +08:00
David Mak
d304afd333
meta: Apply clippy suggested changes
2023-12-11 15:16:23 +08:00
David Mak
ef04696b02
meta: Lift return out of conditional statement
2023-12-11 15:16:23 +08:00
David Mak
4dc5dbb856
meta: Replace equality assertion with assert_eq
...
Emits a more useful assertion message.
2023-12-11 15:16:23 +08:00
David Mak
fd9f66b8d9
meta: Remove redundant casts and brackets
2023-12-11 15:16:23 +08:00
David Mak
5182453bd9
meta: Remove redundant path prefixes
2023-12-11 15:16:23 +08:00
David Mak
031e660f18
core: Initial implementation for const generics
2023-12-08 18:02:11 +08:00
David Mak
b6dfcfcc38
core: Move some SymbolValue functions to symbol_resolver.rs
2023-12-08 18:00:51 +08:00
David Mak
c93ad152d7
core: Codegen for ellipsis expression as NotImplemented
...
A lot of refactoring was performed, specifically with relaxing
expression codegen to return Option in case where ellipsis are used
within a subexpression.
2023-12-08 18:00:51 +08:00
David Mak
68b97347b1
core: Infer builtins name list using builtin declaration list
2023-12-08 17:29:34 +08:00
David Mak
875d534de4
ast: Use `{filename}:{row}:{col}` for location output
2023-12-08 15:48:54 +08:00
Sebastien Bourdeauducq
cee62aa6c5
pin down LLVM used for IRRT
2023-11-25 20:15:29 +08:00
David Mak
5c5620692f
core: Add np_{round,floor,ceil}
...
These functions are NumPy variants of round/floor/ceil, which returns
floats instead of ints.
2023-11-23 13:45:07 +08:00
David Mak
0af1e37e99
core: Prefix all NumPy/SciPy functions with np_/sp_spec
2023-11-23 13:35:23 +08:00
David Mak
10538b5296
core: Update insta snapshots
2023-11-09 13:00:27 +08:00
David Mak
d322c91697
core: Change bitshift operators to accept int32/uint32 for RHS operand
2023-11-09 12:16:20 +08:00
David Mak
3231eb0d78
core: Add compile-time error and runtime assertion for negative shifts
2023-11-09 12:16:20 +08:00
David Mak
08a5050f9a
core: Implement non-trivial builtin functions using IRRT
2023-11-06 12:57:23 +08:00
David Mak
0a84f7ac31
Add CodeGenerator::gen_block and refactor to use it
2023-11-04 13:42:44 +08:00
David Mak
fd787ca3f5
core: Remove trunc
...
The behavior of trunc is already implemented by casts and is therefore
redundant.
2023-11-04 13:35:53 +08:00
David Mak
4dbe07a0c0
core: Revert breaking changes to round-family functions
...
These functions should return ints as the math.* functions do instead of
following the convention of numpy.* functions.
2023-11-04 13:35:53 +08:00
David Mak
2e055e8ab1
core: Replace rint implementation with LLVM intrinsic
2023-11-04 13:35:53 +08:00
David Mak
c6b9aefe00
core: Fix int32-to-uint64 conversion
...
This conversion should be sign-extended.
2023-11-03 16:24:26 +08:00
David Mak
8ad09748d0
core: Fix conversion from float to unsigned types
...
These conversions also need to wraparound.
2023-11-03 16:24:26 +08:00
David Mak
7a5a2db842
core: Fix handling of float-to-int32 casts
...
Out-of-bound conversions should be wrapped around.
2023-11-03 16:24:26 +08:00
David Mak
92d6f0a5d3
core: Implement bitwise not for unsigned ints and fix implementation
2023-11-03 16:24:26 +08:00
David Mak
ff1fed112c
core: Rework gamma/gammaln to match SciPy behavior
...
Matches behavior for infinities and NaNs.
2023-11-01 18:03:29 +08:00
David Mak
36a6a7b8cd
core: Replace TopLevelDef comments with documentation
2023-11-01 18:03:29 +08:00
David Mak
2b635a0b97
core: Implement numpy and scipy functions
2023-11-01 18:03:29 +08:00
David Mak
60ad100fbb
core: Implement and expose {isinf,isnan}
2023-11-01 18:03:29 +08:00
David Mak
7cf7634985
core: Add create_fn_by_* functions
...
Used for abstracting the creation of function from different sources.
2023-11-01 18:03:29 +08:00
David Mak
068f0d9faf
core: Do not cast floor/ceil result to int
...
NumPy explicitly states that the return type of the floor/ceil is float.
2023-11-01 18:03:29 +08:00
David Mak
95810d4229
core: Remove {ceil64,floor64,round,round64}
...
These are not present in NumPy or Artiq.
2023-11-01 18:03:29 +08:00
David Mak
e95586f61e
core: Fix IR generation of `for` loop containing break/continue
...
Fix cases where the body BB would have two terminators because of a
preceding continue/break statement already emitting a terminator.
2023-11-01 13:21:27 +08:00
David Mak
e1487ed335
cargo: Update dependencies
2023-10-20 18:11:45 +08:00
David Mak
73500c9081
core: Remove lazy_static from dependencies
2023-10-16 15:55:10 +08:00
David Mak
50230e61f3
core: Simplify loop condition check for list comprehension
2023-10-06 12:24:03 +08:00
David Mak
0205161e35
core: Simplify list creation for comprehension
2023-10-06 12:22:38 +08:00
David Mak
a2fce49b26
core: Allocate exceptions at the beginning of function
...
Only one instance of exception is necessary, as exceptions will always
be initialized before being thrown.
2023-10-06 12:13:20 +08:00
David Mak
60a503a791
core: Allocate more stack variables at the beginning of function
...
All allocas for temporary objects are now placed in the beginning of the
function. Allocas for on-temporary objects are not modified because
these variables may appear in a loop and thus must be uniquely
allocated by different allocas.
2023-10-06 11:42:47 +08:00
David Mak
0c49b30a90
core: Restore debug info before function call is invoked
...
Previously, the IR which sets up the call to the target function will
have its debug location pointing at the last argument of the function
call instead of the function call itself.
2023-10-06 11:35:23 +08:00
David Mak
c7de22287e
core: Fix restoration of stack address
...
All allocas for temporary objects are now placed in the beginning of the
function. Allocas for on-temporary objects are not modified because
these variables may appear in a loop and thus must be uniquely
represented.
2023-10-06 11:34:23 +08:00
David Mak
1a54aaa1c0
core: Restore debug location when generating allocas
...
Debug location is lost when moving the builder cursor.
2023-10-06 11:11:50 +08:00
David Mak
480a4bc0ad
core: Implement comparison operators for unsigned types
2023-10-05 17:13:10 +08:00
David Mak
2a775d822e
core: Demote dead code into a stdout warning
2023-10-04 18:03:25 +08:00
David Mak
9b28f23d8c
flake: Add clang alongside clang-unwrapped
2023-09-30 09:31:18 +08:00
David Mak
48c6498d1f
core: Fix restoration of loop target in try statement
...
old_loop_target is only assigned if ctx.loop_target is overwritten,
meaning that if ctx.loop_target is never overwritten, ctx.loop_target
will always be overwritten to None.
We fix this by only restoring from old_loop_target if we previously
assigned to old_loop_target.
2023-09-28 20:00:02 +08:00
David Mak
2a38d5160e
meta: Respect opt flags when performing whole-module optimization
2023-09-28 19:58:54 +08:00
David Mak
cb39f61e79
core: Fix passing structure arguments to extern functions
...
All parameters with a structure type in extern functions are marked as
`byref` instead of `byval`, as most ABIs require the first several
arguments to be passed in registers before spilling into the stack.
`byval` breaks this contract by explicitly requiring all arguments to be
passed in the stack, breaking interop with libraries written in other
languages.
2023-09-28 15:02:35 +08:00
David Mak
176f250bdb
core: Fix missing conversion to i1 for IfExp
2023-09-28 10:06:40 +08:00
David Mak
acdb1de6fe
meta: Improve documentation for various modified classes
2023-09-25 15:42:07 +08:00
David Mak
31dcd2dde9
core: Use i8 for boolean variable allocation
...
In LLVM, i1 represents a 1-byte integer with a single valid bit; The
rest of the 7 upper bits are undefined. This causes problems when
using these variables in memory operations (e.g. memcpy/memmove as
needed by List slicing and assignment).
We fix this by treating all local boolean variables as i8 so that they
are well-defined for memory operations. Function ABIs will continue to
use i1, as memory operations cannot be directly performed on function
arguments or return types, instead they are always converted back into
local boolean variables (which are i8s anyways).
Fixes #315 .
2023-09-25 15:42:07 +08:00
David Mak
fc93fc2f0e
core: Move bitcode verification error message into panic message
2023-09-22 17:16:29 +08:00
David Mak
dd42022633
core: Minor refactor allocate_list
2023-09-22 17:16:29 +08:00
David Mak
6dfc43c8b0
core: Add name to build_gep_and_load
2023-09-22 17:16:29 +08:00
David Mak
ab2360d7a0
core: Remove emit_llvm from CodeGenLLVMOptions
...
We instead output an LLVM bitcode file when the option is specified on
the command-line.
2023-09-22 17:16:29 +08:00
David Mak
ee1ee4ab3b
core: Replace deprecated _ExtInt with _BitInt
2023-09-22 17:16:29 +08:00
David Mak
3e430b9b40
core: Fix missing changes for codegen tests
...
Apparently the changes were dropped after rebasing.
2023-09-22 17:16:21 +08:00
David Mak
048fcb0a69
core: Switch to LLVM New Pass Manager
2023-09-18 11:35:15 +08:00
David Mak
676d07657a
core: Add target field to CodeGenLLVMOptions
...
For specifying the target machine options when optimizing and linking.
This field is currently unused but will be required in a future
commit.
2023-09-18 09:46:24 +08:00
David Mak
2482a1ef9b
core: Add CodeGenTargetMachineOptions
...
Needed in a future commit.
2023-09-18 09:41:49 +08:00
David Mak
eb63f2ad48
meta: Update to Rust Edition 2021
2023-09-15 10:25:50 +08:00
David Mak
3993a5cf3f
core: Add LLVM options to WorkerRegistry
2023-09-12 10:57:05 +08:00
David Mak
39724de598
core: Add CodeGenLLVMOptions
...
For specifying LLVM options during code generation.
2023-09-12 10:57:04 +08:00
David Mak
4481d48709
core: Use C-style for loop logic for iterables
...
Index increment is now performed at the end of the loop body.
2023-09-06 20:09:38 +08:00
David Mak
b4983526bd
core: Remove redundant for.cond BB for iterable loops
...
Simplifies logic for creating basic blocks.
2023-09-06 20:09:37 +08:00
David Mak
b4a9616648
core: Add assertion for when `range` has step of 0
...
Aligns with the behavior in Python.
2023-09-06 20:09:36 +08:00
David Mak
e0de82993f
core: Preserve value of variable shadowed by for loop
...
Previously, the final value of the target expression would be one after
the last element of the loop, which does not match Python's behavior.
This commit fixes this problem while also preserving the last assigned
value of the loop beyond the loop, matching Python's behavior.
2023-09-06 20:09:36 +08:00
David Mak
6805253515
core: Use AST var name for IR name
...
Aids debugging IR.
2023-09-06 20:09:36 +08:00
David Mak
19915bac79
core: Prepend statement type to basic block label names
...
Aids debugging IR.
2023-09-06 20:09:36 +08:00
David Mak
6de0884dc1
core: Use anonymous name for variables if unspecified
...
The current default prefix is only derived from the instruction type,
which is not helpful during the comprehension of the IR. Changing to
anonymous names (e.g. %1) helps understand that the variable is only
needed as part of a larger (possibly named) expression.
2023-09-06 14:02:15 +08:00
David Mak
f1b0e05b3d
core: Rename IR variables
...
Because it is unclear which variables are expressions and
subexpressions, all variables which are previously anonymous are named
using (1) the control flow statement if available, (2) the possible name
of the variable as inferred from the variable name in Rust, and (3) the
"addr" prefix to indicate that the values are pointers. These three
strings are joint together using '.', forming "for.i.addr" for instance.
2023-09-06 14:02:15 +08:00
David Mak
ff23968544
core: Add name parameter to gen_{var_alloc,store_target}
...
This allows variables in the IR to be assigned a custom name as opposed
to names with a default prefix.
2023-09-06 11:00:02 +08:00
David Mak
d37287a33d
Cargo: Update dependencies
2023-09-04 10:43:57 +08:00
Sebastien Bourdeauducq
aead36f0fd
update dependencies
2023-03-08 15:19:09 +08:00
Sebastien Bourdeauducq
c1c45373a6
update dependencies
2023-01-12 19:31:03 +08:00
Sebastien Bourdeauducq
085c6ee738
update dependencies
2022-11-18 16:15:46 +08:00
Sebastien Bourdeauducq
f66ca02b2d
update Rust dependencies
2022-08-05 16:58:57 +08:00
z78078
ebd25af38b
nac3standalone: allow classes without explicit init ( #221 )
...
Reviewed-on: M-Labs/nac3#304
Co-authored-by: z78078 <cc@m-labs.hk>
Co-committed-by: z78078 <cc@m-labs.hk>
2022-07-07 10:36:25 +08:00
z78078
96b3a3bf5c
work around random segmentation fault ( #275 )
...
Reviewed-on: M-Labs/nac3#302
Co-authored-by: z78078 <cc@m-labs.hk>
Co-committed-by: z78078 <cc@m-labs.hk>
2022-07-04 18:06:36 +08:00
ychenfo
a18d095245
nac3core: codegen fix call parameter type error
2022-07-04 14:39:33 +08:00
ychenfo
5d5e9a5e02
nac3core: fix codegen error of inheritance
2022-06-01 17:58:16 +08:00
ychenfo
c4ab2855e5
nac3core: pretty print codegen panic error
2022-05-30 04:09:21 +08:00
ychenfo
ffac37dc48
nac3core: fix exception type in primitive store
2022-05-29 19:14:00 +08:00
ychenfo
76473152e8
nac3core: fix llvm.expect intrinsic name
...
this might be one of the causes for the random segfault bug
2022-05-27 04:23:49 +08:00
ychenfo
096f4b03c0
nac3core: fix assignment
2022-05-14 02:30:08 +08:00
ychenfo
a022005183
nac3core: fix broken tests
2022-05-11 03:53:53 +08:00
ychenfo
325ba0a408
nac3core: add debug info
2022-05-11 03:53:53 +08:00
Sebastien Bourdeauducq
3f327113b2
update dependencies, use upstream inkwell
2022-04-27 15:41:46 +08:00
Sebastien Bourdeauducq
a321b13bec
fix typos
2022-04-27 11:08:10 +08:00
ychenfo
48cb485b89
nac3core: show outer type info in type error messages
...
Reviewed-on: M-Labs/nac3#274
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2022-04-22 15:31:55 +08:00
Sebastien Bourdeauducq
85f21060e4
update to LLVM 14
2022-04-18 18:47:20 +08:00
Sebastien Bourdeauducq
1eac111d4c
cleanup
2022-04-18 15:55:37 +08:00
ychenfo
711c3d3303
nac3core: support custom operators
2022-04-18 15:31:56 +08:00
wylited
35b6459c58
nac3core: replace paramter with parameter
2022-04-13 15:42:26 +08:00
wylited
e94b25f544
spelling ( #264 )
...
Co-authored-by: wylited <ds@m-labs.hk>
Co-committed-by: wylited <ds@m-labs.hk>
2022-04-13 11:32:31 +08:00
Sebastien Bourdeauducq
1e7abf0268
fix tests
2022-04-12 10:06:41 +08:00
Sebastien Bourdeauducq
f5a6d29106
update insta snapshots
2022-04-12 09:56:49 +08:00
Sebastien Bourdeauducq
ca07cb66cd
format typevars consistently
2022-04-12 09:28:17 +08:00
ychenfo
722e3df086
nac3core, artiq: optimize kernel invariant for tuple index
2022-04-11 14:58:40 +08:00
ychenfo
ad9ad22cb8
nac3core: optimize unwrap KernelInvariant
2022-04-11 14:58:35 +08:00
ychenfo
f66f66b3a4
nac3core, artiq: remove unnecessary ptr casts
2022-04-10 01:28:46 +08:00
ychenfo
0e0871bc38
nac3core, artiq: to_basic_value_enum takes an argument indicating the expected type
2022-04-10 01:28:22 +08:00
ychenfo
26187bff0b
nac3core: add missing bound check and negative index handling for list subscription assignment
2022-04-09 04:56:31 +08:00
ychenfo
c29cbf6ddd
nac3core: add bound check for list slice
2022-04-05 18:21:46 +08:00
ychenfo
7443c5ea0f
nac3core: add location information to codegen context
2022-04-05 18:21:46 +08:00
ychenfo
710904f975
nac3core: fix powi with negative integer power
2022-04-04 22:10:56 +08:00
ychenfo
2edeb31d21
nac3core: do not get llvm value too eagerly for kernel invariant
2022-03-31 10:28:16 +08:00
ychenfo
c3156afebd
nac3core: fix broken tests
2022-03-30 04:05:47 +08:00
ychenfo
388c9b7241
nac3core: better check and err msg for default param
2022-03-30 04:05:47 +08:00
ychenfo
6ab73a223c
nac3core/artiq: support default param of option type
2022-03-30 04:05:47 +08:00
ychenfo
a38cc04444
nac3core: assert statement
2022-03-29 06:56:40 +08:00
ychenfo
1f5826d352
fix ternary if ( #250 )
...
Use store and load to handle if expression as the blocks might be changed when generating sub-expressions.
Reviewed-on: M-Labs/nac3#250
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2022-03-29 06:54:00 +08:00
ychenfo
8d7e300a4a
nac3core: do not use const struct for tuple
2022-03-27 10:13:17 +08:00
ychenfo
10d623e36f
nac3core/artiq: fix tuple representation
2022-03-27 07:47:14 +08:00
pca006132
1a82d296e7
nac3core/codegen: prevent users from modifying loop counter
...
Fixes #211
2022-03-26 20:58:37 +08:00
pca006132
bf067e2481
nac3artiq: implement attribute writeback
...
We will only writeback attributes that are supported by the current RPC
implementation: primitives, tuple and lists of lists... of primitives.
2022-03-26 20:13:58 +08:00
ychenfo
26a4834254
fix warnings
2022-03-26 18:52:08 +08:00
ychenfo
80631fc92b
Option type support ( #224 )
...
Co-authored-by: ychenfo <yc@m-labs.hk>
Co-committed-by: ychenfo <yc@m-labs.hk>
2022-03-26 15:09:15 +08:00
pca006132
24a26b53ae
nac3core/toplevel: fixed broken tests
...
We should not include class type variables in functions type variables.
2022-03-24 21:33:09 +08:00
pca006132
1084ba2158
nac3core: fixed typevar with finite range
...
1. Function type variables should not include class type variables,
because they are not bound to the function.
2. Defer type variable constraint evaluation until we get all fields
definition.
2022-03-24 21:31:51 +08:00
ychenfo
be75fa7368
nac3core: fix assign to constant
2022-03-24 07:13:13 +08:00
pca006132
d9be8d3978
nac3core/typecheck/unification_table: fixed snapshot restore bug
...
Closes 229
2022-03-23 00:25:10 +08:00
pca006132
41d62f7325
nac3core/toplevel: fixed typevar substitution bug
2022-03-23 00:25:10 +08:00
Sebastien Bourdeauducq
9332d1643c
irrt: normalize end-of-line characters. Closes #231
2022-03-22 16:04:48 +08:00
Sebastien Bourdeauducq
718b076e50
irrt: use __builtin_alloca
2022-03-22 15:41:25 +08:00
Sebastien Bourdeauducq
9d86b46e86
nac3core: add DEBUG_DUMP_IRRT
2022-03-22 15:39:15 +08:00
pca006132
b97c016629
nac3core: fixed test breakage
2022-03-18 16:52:28 +08:00
pca006132
35ac5cb6f6
nac3core: fixed typevar bug
2022-03-18 01:07:44 +08:00
Sebastien Bourdeauducq
0ca2797428
fix compilation warning
2022-03-17 21:31:45 +08:00
Sebastien Bourdeauducq
c5993c2a58
composer: improve class field typevar error message
2022-03-17 21:04:42 +08:00
pca006132
642e3b2bad
nac3core: moved all builtin errors to nac3artiq code
...
This remove the need for hard-coding those definition IDs.
2022-03-17 00:04:49 +08:00
pca006132
e126fef012
nac3artiq: support more builtin errors
2022-03-16 23:42:08 +08:00
pca006132
2f85bb3837
nac3core: impl call attributes
...
sret for returning large structs, and byval for struct args in extern
function calls.
2022-03-09 22:09:36 +08:00
ychenfo
5006028e2d
nac3core: abs builtin function
2022-03-08 23:23:36 +08:00
ychenfo
8241a29908
nac3core: max builtin function
2022-03-08 22:22:00 +08:00
ychenfo
adb5c69e67
nac3core: min builtin function
2022-03-08 21:59:37 +08:00
ychenfo
f7e62ab5b7
nac3ast/parser/core: use i128 for u64 constants
2022-03-08 18:21:14 +08:00
ychenfo
9f6c7b3359
nac3core: type conversion to/from uint
2022-03-08 13:42:45 +08:00
ychenfo
142e99a0f1
nac3core: fix broken tests
2022-03-08 13:34:08 +08:00
ychenfo
79c469301a
basic unsigned integer support
2022-03-08 13:34:02 +08:00
ychenfo
8602852241
nac3core: use signed extension to convert i32 to i64
2022-03-06 04:49:02 +08:00
ychenfo
42fbe8e383
nac3core: fix err msg of too many args
2022-03-05 03:59:45 +08:00
pca006132
63b0f29728
Fix broken tests
2022-03-05 00:27:51 +08:00
pca006132
294943e303
nac3core: get exception ID from symbol resolver
...
We need to store the exception class somewhere in order to create them
back in the host. Fixes #200
2022-03-05 00:26:35 +08:00
Sebastien Bourdeauducq
59ac5aae8a
fix error message string (2)
2022-03-02 08:33:13 +08:00
Sebastien Bourdeauducq
da039e3acf
fix error message string
2022-03-02 08:04:15 +08:00