Commit Graph

6186 Commits

Author SHA1 Message Date
Harold Brenes
147542b5cc Allow pointers to types which have subtype fields at offset 0
to be assignable in proc parameters.

```odin
// Virtual interface
IFoo :: struct {
	foo: proc( self: ^IFoo ),
}

// Implements IFoo interface
Foo :: struct {
	using vt: IFoo,
	name: string,
}

// Implement interface via `Foo`
Foo_Impl :: IFoo {
	// `self` of type `^Foo` (not `^IFoo`) is now accepted as a valid parameter.
	foo = proc( self: ^Foo ) {
		...
	},
}
```
2026-03-23 20:55:44 -04:00
gingerBill
111bee6ecd Fix scope->elements iteration causing a few bugs in the doc-format 2026-03-19 20:31:01 +00:00
gingerBill
3fb430ceb7 Merge branch 'master' of https://github.com/odin-lang/Odin 2026-03-19 18:50:17 +00:00
gingerBill
e6521ed269 Inline the generic count stuff 2026-03-19 18:50:01 +00:00
Jeroen van Rijn
ea1d97f703 Merge pull request #6448 from SpaceTravelCompany/master
fixes Android build
2026-03-19 19:45:33 +01:00
Jeroen van Rijn
c29fd7f872 Merge pull request #6436 from nathanchere/patch-1
Update build_odin.sh to support LLVM 22
2026-03-19 19:18:31 +01:00
Yawning Angel
62d78d61fa src: Allow clang-style +/- for target features
This largely works as expected, except that as far as I can tell,
without explicit annotations added to the caller, (or a
`#force_inline`), the LLVM `target-features` function attribute
gets ignored by the inliner under the rationale of `-sse,-avx,-avx2`
is a subset of `+sse,+avx,+avx2`.

With `#force_no_inline` the correct code does get generated, but in
the regression I am trying to fix, the caller gratuitously also uses
SIMD, leading to horrific performance.
2026-03-19 19:25:23 +09:00
xfitgd
b965e46d7c fixes Android build 2026-03-19 08:27:09 +09:00
Nathan Chere
d18eff9a93 Fix LLVMStructType calls deprecated as of LLVM 22 2026-03-18 21:21:00 +01:00
Nathan Chere
c2e42fe455 Remove deprecated LLVMGetGlobalContext calls 2026-03-18 21:11:12 +01:00
Nathan Chere
82d985b458 add LLVM 22 support to optimisation pass pipelines 2026-03-18 20:31:27 +01:00
Nathan Chere
eddc8084f1 update microarch table for LLVM 22 2026-03-18 18:30:39 +01:00
gingerBill
85c05b238e Handle bit fields separately 2026-03-17 13:50:49 +00:00
gingerBill
d28e19c957 Minor improve to check if the entity was already there 2026-03-17 13:47:02 +00:00
gingerBill
153a522228 Use normal i64 arithmetic instead of big-ints for hot path 2026-03-17 13:34:06 +00:00
gingerBill
46936e0e52 General improvements 2026-03-17 12:55:25 +00:00
gingerBill
e18b15e8f0 Move error-only things to the error scopes 2026-03-17 12:16:44 +00:00
gingerBill
9ad3a23f27 More improvements to performance; AtomicFreelist abstraction 2026-03-17 12:10:49 +00:00
gingerBill
b19e89578f Improve check_struct_fields performance; use CheckerTypePath free list 2026-03-17 11:42:03 +00:00
gingerBill
04cb889aed Begin interning ScopeMap strings 2026-03-17 11:04:32 +00:00
gingerBill
d5a78a9cf1 Remove canonical hash shortcut 2026-03-17 09:43:16 +00:00
gingerBill
239b86c566 Fix typos 2026-03-17 09:20:14 +00:00
gingerBill
a8c6ea7c8a Implement a new StringInterner 2026-03-17 09:18:39 +00:00
gingerBill
f7ede8632f Minor changes 2026-03-17 08:10:13 +00:00
gingerBill
cb7a87773b Split keys and slots and allocate them both together 2026-03-16 18:04:25 +00:00
gingerBill
36d5a19115 Replace Scope.elements to use a custom hash map ScopeMap
This hash map is robin hood based with a inline slot amount for small scopes
2026-03-16 17:41:58 +00:00
gingerBill
1744f57d01 Use permanent_alloc_item directly rather than through the gb_alloc_item generic interface 2026-03-16 16:03:27 +00:00
gingerBill
3dc68c2e08 In PtrSet permanent_allocator instead of heap_allocator 2026-03-16 15:50:13 +00:00
gingerBill
ef36a18323 Enable some RVO by default 2026-03-16 14:52:07 +00:00
gingerBill
fc41e44140 Improve bounds checking to minimize its need 2026-03-16 14:29:44 +00:00
gingerBill
0bf2d01a04 Work on improving bounds checking with constant known indices and lb_add_local_generated 2026-03-16 14:06:23 +00:00
gingerBill
93852df29e Support #unroll(N) for for FCD arrays 2026-03-16 12:28:18 +00:00
gingerBill
e87564b205 Support for in for FCD arrays 2026-03-16 12:21:41 +00:00
gingerBill
5fa274cb6a -internal-rvo 2026-03-15 22:10:03 +00:00
gingerBill
b3b31cdba7 -internal-llvm-mem2reg 2026-03-15 22:04:27 +00:00
gingerBill
5d165f70e1 Add loads of RVO optimizations for basic 1-value return cases 2026-03-15 21:53:38 +00:00
gingerBill
fa6109ca1e Properly dispose of LLVMTargetDataRef 2026-03-15 21:35:26 +00:00
gingerBill
38d7f45e64 Fix race condition with code_gen_module 2026-03-15 21:35:02 +00:00
gingerBill
2de214418c Fix LTO with debug info by passing -g 2026-03-15 21:29:54 +00:00
gingerBill
dc72e8210f Support proc(q: $Q) -> type_of(Q{}.data[0]) in return types 2026-03-15 21:28:58 +00:00
gingerBill
eecb67cb89 Implement fused nested slice chain optimizations src[a:b][c:d][e:f]... 2026-03-15 21:17:05 +00:00
gingerBill
6b2853d9f1 Improve matrix * vector code gen 2026-03-15 21:03:31 +00:00
gingerBill
12b06887a3 Remove dead code 2026-03-15 20:36:02 +00:00
gingerBill
f8f96905ae Fix typos 2026-03-15 20:27:14 +00:00
gingerBill
a56c3da149 Support select fast path for or_else 2026-03-15 20:02:48 +00:00
gingerBill
f70bceec84 Add optimization for improving side-effect-free use of a select for ternary if. 2026-03-15 19:58:57 +00:00
gingerBill
bb2e42faa6 More uses of SSA aggregation values 2026-03-15 19:49:26 +00:00
gingerBill
0dbda03890 Simplify slice creation as LLVM values 2026-03-15 19:40:57 +00:00
gingerBill
55b3ea7c2d Allow @(deprecated=<string>) on types 2026-03-15 18:58:48 +00:00
gingerBill
6fc80d9562 Correct write_type_to_canonical_string for "untyped" types 2026-03-15 18:33:20 +00:00