| Age | Commit message (Collapse) | Author |
|
* Fix codegen for splat - instead of giving vectors of length N
to shufflevector for both of the operands, it gives vectors of length
1. The mask vector is the only one that needs N elements.
* Separate Splat into SplatSrc and SplatGen; the `len` is not needed
once it gets to codegen since it is redundant with the result type.
* Refactor compile error for wrong vector element type so that the
compile error message is not duplicated in zig source code
* Improve implementation to correctly handle comptime values such as
undefined and lazy values.
* Improve compile error for bad vector element type to point to the
correct place.
* Delete dead code.
* Modify behavior test to use an array cast instead of vector element
indexing since I'm merging this splat commit out-of-order from
Shawn's patch set.
|
|
|
|
* update docs for `@byteSwap`.
* fix hash & eql functions for ZigLLVMFnIdBswap not updated to
include vector len. this was causing incorrect bswap function
being called in unrelated code
* fix `@byteSwap` behavior tests only testing comptime and not
runtime operations
* implement runtime `@byteSwap`
* fix incorrect logic in ir_render_vector_to_array and
ir_render_array_to_vector with regards to whether or not to bitcast
* `@byteSwap` accepts an array operand which it will cast to vector
* simplify `@byteSwap` semantic analysis code and various fixes
|
|
|
|
* update documentation
- move `@shuffle` to be sorted alphabetically
- remove mention of LLVM
- minor clarifications & rewording
* introduce ir_resolve_vector_elem_type to avoid duplicate compile
error message and duplicate vector element checking logic
* rework ir_analyze_shuffle_vector to solve various issues
* improve `@shuffle` to allow implicit cast of arrays
* the shuffle tests weren't being run
|
|
I change the semantics of the mask operand, to make it a little more
flexible. There is no real danger in this because it is a compile-error
if you do it the LLVM way (and there is an appropiate error to tell you
this).
v2: avoid problems with double-free
|
|
The question was:
> // TODO do we need lazy values on vector comparisons?
Nope, in fact the existing code already was returning ErrorNotLazy
for that particular type, and would already goto
never_mind_just_calculate_it_normally. So the explicit check for
ZigTypeIdVector is not needed. I appreciate the caution though.
|
|
|
|
Vectors do not have the same packing as arrays, and just bitcasting
is not the correct way to convert them.
|
|
...runtime condition, comptime prongs.
closes #3244
|
|
Closes #3193
|
|
Closes #2612
|
|
Allow comparison between union tag and enum literal
|
|
Also reduce the size of ZigVar in memory by making the name
a `const char *` rather than a `Buf`.
|
|
|
|
Closes #2810
|
|
closes #3076
|
|
closes #3077
|
|
See #3157
|
|
|
|
See #2749
|
|
|
|
|
|
- print fn name in pass1
- replace scalar with enum IrPass for clarity
|
|
payload of error union
|
|
|
|
|
|
|
|
|
|
When `@frameSize` is never called, and `@asyncCall` on a runtime-known
pointer is never used, no prefix data for async functions is needed.
Related: #3160
|
|
|
|
|
|
|
|
- pass2 now prints missing instructions in a trailing fashion
- instruction struct name added to print as column 2
|
|
* `await @asyncCall` generates better code. See #3065
* `@asyncCall` works with a real `@Frame(func)` in addition to
a byte slice. Closes #3072
* `@asyncCall` allows passing `{}` (a void value) as the result
pointer, which uses the result location inside the frame.
Closes #3068
* support `await @asyncCall` on a non-async function. This is in
preparation for safe recursion (#1006).
|
|
related: #1627
|
|
which heap allocate their own frames
related: #1006
|
|
|
|
|
|
|
|
closes #3067
|
|
|
|
|
|
|
|
closes #3129
|
|
by making optionals even more lazy
closes #1805
|
|
and add check for alignment specified on enum fields
|
|
|
|
|
|
|