Repository navigation
What's Changed
- Prefer {Optional,Required}PassInfoMixin by @boomanaiden154 in #2670
- Fix registryutils double reg by @wsmoses in #2676
- Propagate enable_triton to lit config and mark Triton tests with REQU… by @wsmoses in #2677
- Fix sed command for dlopen_checker.cc by @wsmoses in #2681
- gcp cache improvements by @wsmoses in #2680
- Add scf to cf post affine lower by @wsmoses in #2682
- Update ENZYME_COMMIT hash in workspace.bzl by @wsmoses in #2683
- Fix stream pool crash on oom by @wsmoses in #2684
- run symbol-dce after gpu-kernel-outlining by @pengmai in #2688
- Handle semi-affine integer sets in SimplifyAffineExprs by @wsmoses in #2689
- Update jax-ml/jax to commit 4c7da2781a48620f33386f1084ab9069b80f03b9 by @enzymead-bot[bot] in #2639
- Fix Windows JIT failure on floating point constants by @wsmoses in #2691
- checkpointing: forward progress the iv in the inner remat loop by @Pangoraw in #2687
- raise math.atan2 by @Pangoraw in #2694
- Add flag to disable speculation of partial if bodies by @pengmai in #2697
- Allow equivalent affine maps for for to while raising by @Pangoraw in #2695
- Update EnzymeAD/Enzyme to commit e4afe5484901b1e5645cd6f71ec8263030e4b233 by @enzymead-bot[bot] in #2701
- Update ENZYME_COMMIT to new hash value by @wsmoses in #2703
- [enzyme] treat scf.if as a single statement for the purpose of atomic removal by @ftynse in #2669
- polygeist mem2reg on variadic by @wsmoses in #2704
- fix ReduceSliceFusion on empty reduce by @mofeing in #2706
- Handle memref atomics in atomic removal by @ftynse in #2692
- Set atomic_add during raising via target_cpu by @pengmai in #2705
- Fix constant sink by @wsmoses in #2707
- [AffineCFG] Fix then/else operand confusion by @wsmoses in #2711
- Pattern to raise enzyme.atomic_rmw to enzyme.affine_atomic_rmw by @pengmai in #2709
- Account for terminator captures when hoisting affine symbols by @wsmoses in #2712
- Fix affine.if yield captures in isValidSymbolInt (+ then/else guard) by @wsmoses in #2713
- Speculate and canonicalize if -> for by @wsmoses in #2714
- [CanonicalizeFor] Perform the final before-region evaluation in while->for by @wsmoses in #2715
- [AffineCFG] Rewrite unhoistable conditionals in fix() by @wsmoses in #2719
- Update EnzymeAD/Enzyme to commit 8335ea9368f4a25cc53924eb0e948bb41a8ccaba by @enzymead-bot[bot] in #2717
- Update default pipeline by @pengmai in #2720
- Fix affine if handling by @wsmoses in #2722
- Update ENZYME_COMMIT hash value by @wsmoses in #2723
- don't raise to affine.for if has checkpointing attributes & fixup raise pipeline by @Pangoraw in #2718
- [Polymer] Bound the scf.if ancestor check to the scop in IslScopBuilder by @wsmoses in #2725
- [LowerEnzymeXLAMath] Lower binomial_progress to the Revolve advance distance by @Pangoraw in #2721
- Make IR emission order independent of C++ argument evaluation order by @wsmoses in #2726
- Add a lint job for order-dependent IR emission by @wsmoses in #2727
- Add remove atomics option by @wsmoses in #2729
- Fix kernel registration by @wsmoses in #2730
- Properly preserve gpu sm target by @wsmoses in #2732
- Skip the dependence solve for provably disjoint atomics by @wsmoses in #2733
- Fix sort block memory by @wsmoses in #2734
- SortBlock, remove window option by @wsmoses in #2735
- Add a LSP server for Enzyme-JAX by @vimarsh6739 in #2737
- polygeist-mem2reg: understand transfers, offsets and views by @wsmoses in #2743
- Extend CSE coverage to batch_norm, unary math, convolution, fft and slicing by @wsmoses in #2740
- polygeist-mem2reg: track where an access lands with an OffsetTree by @wsmoses in #2745
- Add canonicalize-elementwise-shapes pass by @wsmoses in #2736
- polygeist-mem2reg: forward through transfers by @wsmoses in #2746
- Do not tape the induction variable of a differentiated stablehlo.while by @wsmoses in #2748
- binom: Don't iterate while pushing by @Pangoraw in #2752
- Update EnzymeAD/Enzyme to commit a19edda70155e5e3d35e5199ffecce06b58160d4 by @enzymead-bot[bot] in #2751
- Move stack allocations to where they are freed by @wsmoses in #2755
- Post AD inlining by @wsmoses in #2741
- Let loops derived from a checkpointed loop inherit its attributes by @wsmoses in #2760
- Recognise backward-stepping counters in WhileOpInductionReplacement by @wsmoses in #2759
- Raising: translate LLVM fast-math and overflow flags into their arith spelling by @wsmoses in #2763
- polygeist-mem2reg: read a piece of what a slot holds by @wsmoses in #2750
- RemoveAtomics: keep the atomic's fast-math flags on the arithmetic replacing it by @wsmoses in #2761
- Drop the add from a while scatter accumulator by @wsmoses in #2757
- Fix assertion error in p m2r by @wsmoses in #2764
- PM2R: Don't use subtype by @wsmoses in #2765
- polygeist-mem2reg: a zero offset is a place, not an absence of one (WIP) by @wsmoses in #2766
- polygeist-mem2reg: a fill reaching over a slot writes it by @wsmoses in #2768
- raise: promote after the tape ops are gone, not before by @wsmoses in #2769
- canonicalize-scf-for: a call that stays keeps what it names by @wsmoses in #2770
- Update EnzymeAD/Enzyme to commit 1db6e649de614009527b24004ee85360d6a81de1 by @enzymead-bot[bot] in #2772
- add option to turn hoist allocs by @Pangoraw in #2771
- raise: lower invoke, and keep bitcast from changing shape by @wsmoses in #2774
- affine-cfg: do not ask index for a width by @wsmoses in #2777
- polygeist-mem2reg: look a callee up once, not once per call by @wsmoses in #2775
- polygeist-mem2reg: drop a transfer read nobody asked for by @wsmoses in #2776
- canonicalize-scf-for: forget the induction variable between comparisons by @wsmoses in #2780
- llvm-to-affine-access: build only expressions affine has by @wsmoses in #2781
- Work a shift's power of two out at the width the expression holds by @wsmoses in #2783
- Update EnzymeAD/Enzyme to commit 1361deeecd9fce13f63b5745f587dc22833714b8 by @enzymead-bot[bot] in #2784
- Hand the round-tripped module back as bitcode by @wsmoses in #2786
- Carry an access's alignment through raising and lowering by @wsmoses in #2793
- RemoveIVs: an addi that never reads the iter arg is not an induction by @wsmoses in #2797
- Emit the right zero float for poison of f32 by @Pangoraw in #2792
- refactor git ignore by @mofeing in #2791
- llvm-to-affine-access: distribute a select over both addends, not one by @wsmoses in #2802
- polygeist-mem2reg: offsets of different kinds have no known difference by @wsmoses in #2801
- SimpleMem2Reg: forwarding needs the store and load to address the same slot by @wsmoses in #2805
- llvm-to-affine-access: leave padded-type accesses in llvm form by @wsmoses in #2804
- affine-cfg: gate (a*d + b) urem d fold on nuw by @wsmoses in #2803
- feat(scatter/gather): support iota detection through broadcast_in_dim operation by @avik-pal in #2806
- libdevice-funcs-raise: raise plain libm calls alongside their _nv twins by @wsmoses in #2807
- Add SelectToLogical: fold boolean select into and/or/not by @Pangoraw in #2788
- raise: clean each generated derivative function as an enzyme postpass by @wsmoses in #2810
- polygeist-mem2reg: nocapture does not say the callee will not write by @wsmoses in #2799
- RemoveIVs: count iterations in the type the count is multiplied in by @wsmoses in #2782
- Update Enzyme to a33f4ea by @wsmoses in #2811
- Raise a forward-mode enzyme call, and seed a reverse one by @wsmoses in #2785
- canonicalize-scf-for: the extra do-while iteration is at the top either way by @wsmoses in #2798
- canonicalize-scf-for: exiting a conjunction does not falsify each conjunct by @wsmoses in #2796
- restore-preserve-nvvm: PreserveNVVM(End), said in MLIR by @wsmoses in #2812
- affine-cfg: a question the normalizer cannot answer is not a crash by @wsmoses in #2779
- raise: an unwind edge is kept, not lowered away by @wsmoses in #2800
- canonicalize-scf-for: results of a converted while observe its final evaluation by @wsmoses in #2794
- canonicalize-scf-for: a result yielding the IV is the last executed IV by @wsmoses in #2814
- raising: leave unwind edges standing, in every pass that meets one by @wsmoses in #2813
- polygeist-mem2reg: a partial-overlap transfer clobbers a cached load by @wsmoses in #2816
- llvm-to-affine-access: carry an alloca's alignment onto the memref by @wsmoses in #2817
- Carry alloca/access alignment through GPU lowering and delinearization by @wsmoses in #2818
- Add enzymexla.math.fmuladd: keep fmuladd's fuse-if-profitable contract through the round trip by @wsmoses in #2823
- __enzyme_autodiff raising: the return is activenoneed, not active by @wsmoses in #2824
- Verify the round-trip module once, not after every pass by @wsmoses in #2828
- Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 by @dependabot[bot] in #2739
- Incremental canonicalization: skip functions unchanged since their last run by @wsmoses in #2826
- CUDA host round trip: lower affine_atomic_rmw, drop unresolved stub modules by @wsmoses in #2829
- build(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #2685
- Update jax-ml/jax to commit cec06d116c05f0d52adfceee3d3b730fdbcb0ce5 by @enzymead-bot[bot] in #2698
- affine-cfg: never insert index casts after a terminator by @wsmoses in #2834
- convert-parallel-to-gpu: survive kernels without an exact or recorded shape by @wsmoses in #2835
- parallel-lower: repair yields whose inlined callee cannot return by @wsmoses in #2832
- Never memref.cast across memory spaces by @wsmoses in #2836
- convert-parallel-to-gpu: keep block merging out of the greedy drivers by @wsmoses in #2839
- strip-gpu-info: sweep host-side device residue by @wsmoses in #2838
- Adapt to createShadowValues returning LogicalResult by @wsmoses in #2837
- convert-polygeist-to-llvm: say which unrealized cast is unhandled by @wsmoses in #2841
- convert-parallel-to-gpu: stop erasing values the parallel still reads by @wsmoses in #2842
- convert-parallel-to-gpu: give gpu.launch its stream the way launch_func takes it by @wsmoses in #2844
- convert-parallel-to-gpu: a nested parallel only means split if it is a child by @wsmoses in #2848
- Register device globals with the runtime the module is registered with by @wsmoses in #2850
- Give enzymexla.polygeist_yield its region-terminator AD rule by @wsmoses in #2849
- while: Use generic checkpointing implementation by @Pangoraw in #2787
- mem2reg: take apart a load of an aggregate that is only read field by field by @wsmoses in #2851
- affine-cfg: settle on one shape for a recreated bound by @wsmoses in #2855
- mem2reg: an array of one wraps a value like a struct of one by @wsmoses in #2856
- Fix crash promoting a kernel with no argument attributes by @wsmoses in #2858
- Use inttoptr/ptrtoint to coerce launch arguments by @wsmoses in #2860
- Take a launch's kernel operands by segment, not from the back by @wsmoses in #2863
- Stop reading through a truncation when it changes the number by @wsmoses in #2865
- Only lift a barrier out of a branch every thread decides alike by @wsmoses in #2866
- Read an operand before legalizing it, not after by @wsmoses in #2867
- Say when a kernel is dropped instead of dropping it silently by @wsmoses in #2871
- Do not take a grid dimension into an already full block by @wsmoses in #2870
- Keep kernels whose grid and block parallels were fused by @wsmoses in #2872
- Restate known_block_size as nvvm.maxntid on outlined kernels by @wsmoses in #2874
- Give shared-memory globals the alignment the middle end assumes by @wsmoses in #2873
- Replace the split wrapper's result instead of erasing it away by @wsmoses in #2877
- Serialize reduction-carrying parallels nested at any depth by @wsmoses in #2878
- Do not lift a guarded load into the conditional feeding its index by @wsmoses in #2875
- Fold reading the constant high half of a packed launch dimension by @wsmoses in #2886
- Drop nneg when arith.extui's fold merges extension chains by @wsmoses in #2892
- Barrier before ops moved to after an inner parallel by @wsmoses in #2883
- Improve scf.for to stablehlo.while raising by @Pangoraw in #2882
- Move each write and its feeding slice into one thread-zero if by @wsmoses in #2880
- Decline ParallelizeBlockOps for parallels serialized in a thread by @wsmoses in #2894
- Return the right result when legalizing a multi-result conditional as a symbol by @wsmoses in #2897
- adapt to Enzyme outer/inner swap change for periodic checkpointing by @Pangoraw in #2891
- Cast booleans to index unsigned when legalizing affine operands by @wsmoses in #2900
- fix WhileLoopInfo limit & step outer region check by @Pangoraw in #2696
- Only drop an if constraint subsumed by a parent that implies it by @wsmoses in #2898
- [XLAMath] throw lowering error only on tensor op by @Pangoraw in #2911
- Do not raise a kernel whose function is a bare declaration by @wsmoses in #2912
- Make canonicalize-parallel's multithreading opt-in by @wsmoses in #2914
- Sink cheap address computations after the GPU serializer's LLVM pipeline by @wsmoses in #2907
- Raise math.trunc op by @Pangoraw in #2903
- Fmul lowering for GPU by @wsmoses in #2913
- CI: bust GB-25 Julia depot cache by @wsmoses in #2915
- Preserve the source's launch bounds through raising by @wsmoses in #2918
- Batch dynamic_(update_)slice with varying indices as scatter/gather by @Pangoraw in #2916
- feat(scatter/gather): scatter rewrite to DUS for grid indexing by @avik-pal in #2808
- [EnzymeHLOOpt] don't assume reduce dims are sorted by @Pangoraw in #2923
- Bind kernels to clang's device stub instead of a synthetic one by @wsmoses in #2857
- Treat an address-taken host stub as capturing its kernel by @wsmoses in #2864
- remove assertion in SinkDUS by @Pangoraw in #2924
- fix gitignore special characters by @Pangoraw in #2935
- Rewrite ArithRaising to use a single walk across the module by @Pangoraw in #2920
- add
comm.ncclsubdialect by @mofeing in #2529 - implement MPI FFI handlers by @mofeing in #2822
- mem2reg: forward values across any BranchOpInterface terminator by @wsmoses in #2934
- Normalize invoke-form CUDA runtime calls before launch-recognition rewrites by @wsmoses in #2952
- Run every raising-pipeline rewrite driver at normal region simplification by @wsmoses in #2926
- AffineToStableHLORaising: only splat constants a tensor can hold by @wsmoses in #2930
- Erase invoke-form CUDA runtime calls on the xla/cpu backends by @wsmoses in #2951
- canonicalize-parallel: see through an or a truncation discards by @wsmoses in #2940
- PartialIfToSelect: pointer values are safe to recompute outside the if by @wsmoses in #2931
- Fold a whole-body guard into the parallel bound past local allocations by @wsmoses in #2942
- Prune affine.if results nothing reads by @wsmoses in #2932
- Don't batch or unroll checkpoint segment loops by @ftynse in #2936
- Raise memref.alloca scratch as a zero splat tensor by @wsmoses in #2955
- make sure that slice is along concat dim in BroadcastReshapeSlice by @Pangoraw in #2953
- Raise affine.if integer sets that reference symbols by @wsmoses in #2957
- Gate the MPI FFI handlers on non-Windows builds by @wsmoses in #2956
- Test raised alloca scratch under affine and scf conditionals by @wsmoses in #2958
- Raise sequential affine.for loops over parallel bodies as stablehlo.while by @wsmoses in #2954
- xla_wrapper: carry scalars the runtime specializes executables over by @wsmoses in #2943
- Peel dynamic-extent parallel axes into whiles tagged enzymexla.parallel by @wsmoses in #2944
- Raise block barriers as no-ops by @wsmoses in #2959
- Raise a uniform branch between read-only buffers as a whole-tensor select by @wsmoses in #2962
- Error on kernel launches that survive raising under the xla backends by @wsmoses in #2963
- libdevice raising: map minimumnum/maximumnum intrinsics to arith by @wsmoses in #2964
- Strip access-only memory_space_cast views before raising by @wsmoses in #2970
- MoveWhileToFor: accept a duplicated increment feeding the condition by @wsmoses in #2965
- Convert rotated halving do-whiles to log-space fors by @wsmoses in #2967
- Embed one module string per distinct kernel body by @wsmoses in #2975
- FullReduceTransposeReshape rewrite by @Pangoraw in #2631
- Size the captured-scalar staging copy in bytes by @wsmoses in #2978
- Error on a barrier over a dynamically sized parallel axis by @wsmoses in #2980
- Batch bounded-extent parallel axes behind a guard by @wsmoses in #2981
- Differentiate before the backends diverge; raise __enzyme calls before launch recognition by @wsmoses in #2989
- AlwaysInliner: tolerate a no-return callee's empty terminator by @wsmoses in #2971
- Add custom delete operator to CuFuncWrapper by @wsmoses in #2994
- arith-raise: sign extension of i1 negates the boolean conversion by @wsmoses in #3018
- Raising: ignore llvm.intr.assume by @wsmoses in #3017
- feat: support raising non-continuous indexing by @avik-pal in #3019
- mem2reg: bind all symbol operands when comparing affine offsets by @wsmoses in #3023
- Raise llvm.intr.abs to math.absi by @wsmoses in #3001
- Update EnzymeAD/Enzyme to commit 277ecb5335a75883852c59436e358f82939dd10d by @enzymead-bot[bot] in #2906
- hlo-opt: broadcast unmapped grid dims in single-mapping gather rewrite by @wsmoses in #3024
- Raising: atomic adds as combining scatters by @wsmoses in #3014
- Raising: raise alloca scopes and execute regions in the descent by @wsmoses in #3030
- lower comm.mpi ops to stablehlo.custom_call by @mofeing in #2972
- canonicalize-parallel: sink a select over same-base geps into the index by @wsmoses in #3031
- DotGeneralReshape: keep the dot's own result element type by @AsafManela in #2986
- Update jax-ml/jax to commit 90eac75fcafcc36cc0a59cce35c05a78fa1199f7 by @enzymead-bot[bot] in #2843
- Pointer2MemrefOp canonicalization: hoist a conversion yielded by every arm by @wsmoses in #3033
- Guard the pointer round trip canonicalization; declare dependent dialects by @wsmoses in #3034
- canonicalize-parallel: choose a gep's base or index, not the gep by @wsmoses in #3035
- canonicalize-parallel: merge geps whose flags or element types differ by @wsmoses in #3036
- Adds cuda backend support to MPI Allreduce via NCCL by @romanlee in #2699
- PolygeistMem2Reg: relate accesses by the bytes they touch by @wsmoses in #3037
- Do an access at a branch-chosen index in each arm instead by @wsmoses in #3038
- canonicalize-parallel: sink a cast or a divide into the branch that chose its operand by @wsmoses in #3039
- Also split branched accesses once the accesses are memrefs by @wsmoses in #3040
- delinearize-indexing: rebuild a view of any buffer, not only of an argument by @wsmoses in #3041
- delinearize-indexing: rebuild a view of a buffer a branch chose by @wsmoses in #3043
- Raise the enzyme atomic as a combining scatter too by @wsmoses in #3044
- Fold the gep an atomic is taken through into its index by @wsmoses in #3045
- Carry an atomic's ordering into its affine form, and raise it by @wsmoses in #3047
- Fold the gep an affine atomic is taken through into its index by @wsmoses in #3048
- Read an atomic through a view, beside the loads and stores by @wsmoses in #3046
- Write a zeroing memset of an alloca as a loop of zero stores by @wsmoses in #3054
- Stop the barrier effect walk at a function boundary by @wsmoses in #3053
- canonicalize-parallel: a select of null that is only dereferenced is the pointer by @wsmoses in #3056
- affine-cfg: only the loop's own yield says what it carries by @wsmoses in #3057
- canonicalize-scf-for: a pointer advanced a fixed distance is an induction variable by @wsmoses in #3060
- canonicalize-scf-for: a stride the loop does not vary may be computed inside it by @wsmoses in #3062
- canonicalize-scf-for: a dead iter arg's result is its last yielded value by @wsmoses in #3063
- reuse JIT addresses for MPI FFI handler function bindings by @mofeing in #3051
- refactor MPI constant binding with a generic API by @mofeing in #3052
- Revert "refactor MPI constant binding with a generic API (#3052)" by @mofeing in #3065
- Size a viewed element with the data layout, not by asking for a bit width by @wsmoses in #3064
- Put the shape cast last in the pointer round trip view by @wsmoses in #3068
- CommonCompareExpressionRewrite: place the negation after the op it reads by @wsmoses in #2995
- llvm-to-affine-access: index access builders by base pointer by @wsmoses in #2827
- affine-cfg: a min/max of valid symbols is a valid symbol by @wsmoses in #3074
- affine-cfg: absorb a || (!a && b) so short-circuit guards become affine.if by @wsmoses in #3075
- canonicalize-parallel: a branch between a base and a step off it by @wsmoses in #3072
- simplify-affine-exprs: drop parallel bound operands another operand subsumes by @wsmoses in #2941
- Raise scf.while by rotation by @wsmoses in #2950
- add
MpiConstantOpfor creating MPI constants as values by @mofeing in #3066 - Fold reshape into broadcast when reshape is a transpose by @Pangoraw in #3078
- affine-cfg: an enclosing loop's induction variable is a symbol, not a dim by @wsmoses in #3076
- Raising: unroll budget for constant-bound loops by @wsmoses in #3004
- Count memory intrinsics as dereferences in the null-pointer fold by @wsmoses in #3080
- polygeist-mem2reg: split accesses indexed by a select of constants by @wsmoses in #3083
- canonicalize-parallel: sink ops through a select of constants by @wsmoses in #3082
- Fix two debug-build assertions in llvm-to-affine-access and a gep fold test by @wsmoses in #3084
- affine-cfg: keep normalizer operand lists current across hoists by @wsmoses in #3085
- Fill a zeroing memset of a select between allocations by @wsmoses in #3067
- Prune affine.parallel bounds as a pattern by @wsmoses in #3088
- AffineCFG: any pure op of valid symbols is a valid symbol by @wsmoses in #3086
- Rebuild an affine.if condition inside handleAffineIfOp by @wsmoses in #3089
- affine-cfg: raise the sign extension of an affine condition by @wsmoses in #3090
- Fold comparisons using loop bounds by @wsmoses in #2946
- Inline an scf.while whose condition is false by @wsmoses in #3096
- Fold min/max using loop bounds by @wsmoses in #3091
- Fold an scf.while condition that is false on its first evaluation by @wsmoses in #3093
- Fold a bitwise-or compared against a power of two using loop bounds by @wsmoses in #3095
- Unroll for loops whose trip count the loop bounds decide by @wsmoses in #3092
- affine-cfg: split a loop or guard on an affine.if of constants by @wsmoses in #3094
- Add patch for slice of reshape fix by @Pangoraw in #3099
- Raising: canonicalize maps before permutation matching; while fallback for constant-bound loops by @wsmoses in #2998
- Raising: fail soft instead of asserting on unraisable values by @wsmoses in #3101
- Raising: scf.for with uniform runtime bounds as stablehlo.while by @wsmoses in #3102
- Raising: refine racy stores instead of rejecting them by @wsmoses in #3104
- refactor
comm.ncclsubdialect by @mofeing in #3077 - Raising: loops with per-lane trip counts as a masked stablehlo.while by @wsmoses in #3103
- mem2reg: do an access through a branch between allocations in each arm by @wsmoses in #3116
- Hoist wrapper-invariant pointer compares to the host by @wsmoses in #2977
- Admit dominating symbols into loop bound domains by @wsmoses in #3097
- Raising: an affine mod of a negative exact multiple is 0, not the modulus by @wsmoses in #3118
- fix
EnzymeJaXLookupSymbolby looking onMappedSymbolsinstead of JIT by @mofeing in #3114 - Raising: a signed index_cast of an i1 sign-extends by @wsmoses in #3121
- Raising: never emit a rank-0 dynamic_slice by @wsmoses in #3119
- Raising: check the i1 index_cast test line for line by @wsmoses in #3123
- EnzymeHLOOpt: merged slice bounds are not clamped to a dynamic extent by @wsmoses in #3128
- Raising: pad a dynamic-index load's buffer out to its lane range by @wsmoses in #3120
- mem2reg: split an access through a branch between buffers a kernel was handed by @wsmoses in #3133
- While raising: broadcast under-attributed yields to the carried layout by @wsmoses in #3002
- Pointer2MemrefOp: an access through a view of null folds by @wsmoses in #2976
- Raise scalar control flow: scf loops, per-lane trip counts, racy writes by @wsmoses in #2949
- Raising: build reshape/broadcast/transpose/concat/slice through the no-op-avoiding helpers by @wsmoses in #3136
- EnzymeHLOOpt: an or/and reduction of a constant mask folds by @wsmoses in #3137
- EnzymeHLOOpt: an or/and reduce over a pad guaranteed to hold the absorbing value folds by @wsmoses in #3140
- Or-reduce broadcast-store masks over axes the store does not index by @wsmoses in #2960
- Or-reduce scatter mask axes the store does not index by @wsmoses in #2948
- Raising: read constant globals as tensors by @wsmoses in #3005
- Tests: regenerate constant_global_tensor goldens after the no-op helpers by @wsmoses in #3142
- Greedy drivers: no identical-block merging in enzyme-hlo-opt, simplify-affine-exprs and the raiser by @wsmoses in #3145
- EnzymeHLOOpt: bound the provenance walk behind DUSDUSSubsuming; fix its dangling insert by @wsmoses in #3131
- export C API for
commdialect types and attributes by @mofeing in #3135 - Raising: pad the buffer before a masked store reads it back by @wsmoses in #3124
- Convert allocas with equal-sized punned views, bitcasting their accesses by @wsmoses in #2973
- canonicalize-parallel: flatten an aggregate-typed alloca that is only ever cast to a pointer by @wsmoses in #3073
- Tests: keep the unroll-budget test cheap by @wsmoses in #3148
- Raising: lane-private scratch gets the batched axes as leading dimensions by @wsmoses in #3151
- Factor transposes through select and clamp by @vimarsh6739 in #3152
- Raising: slice padded lane scratch back to its raised shape by @wsmoses in #3153
- Raise cmpf predicate=uno by @Pangoraw in #3156
- Raise isnan to a floating point comparison by @Pangoraw in #3158
- Raising pipeline: inline kernel functor methods and discard their dead copies by @wsmoses in #3159
- Raising pipeline: lower affine around the second inline by @wsmoses in #3160
- [AffineCFG] take a loop's induction variable by argument number by @xys-syx in #2899
- affine-cfg: hoist in-region pure symbols before cloning their users by @wsmoses in #3162
- affine-cfg: read lower-affine's floordiv, ceildiv and mod expansions by @wsmoses in #3163
- affine-cfg: raise scf.parallel reductions to affine.parallel by @wsmoses in #3164
- discard-unreferenced-linkonce: keep weak definitions by @wsmoses in #3166
- Raising pipeline: call the callees that cannot unwind before the first inline by @wsmoses in #3165
- Drop stores of undef in canonicalize-parallel and polygeist-mem2reg by @wsmoses in #3167
- polygeist-mem2reg: reads of bytes nothing writes are undef by @wsmoses in #3168
- polygeist-mem2reg: split accesses indexed by a tree of choices between constants by @wsmoses in #3170
- canonicalize-parallel: sink through a whole tree of branches over constants by @wsmoses in #3169
- Pin julia version to 1.12.6 for Reactant integration by @Pangoraw in #3157
- Allow auto-batching to look through a transpose for the DUSed operand by @Pangoraw in #3154
- Fix assertion in invoke-to-call by @Pangoraw in #3172
- Add module-owned persistent XLA temporaries by @vimarsh6739 in #3127
- Recognize affine iotas through reshapes by @vimarsh6739 in #3171
- llvm-to-affine-access: convert allocas of one scalar throughout, expanding aggregate views by @wsmoses in #3173
- fix build error in Utils.cpp by @Pangoraw in #3175
- enzyme-hlo-opt: erase the producer a sunk slice leaves dead by @wsmoses in #3176
- Derive parallel-axis bounds from dominating guards by @wsmoses in #2991
- Raising: bound a lane axis by the static scratch it indexes by @wsmoses in #3177
- canonicalize-parallel: unpack a dim3-replicated launch dimension by @wsmoses in #3178
- Tessera: Fix parsing of constants in rewrite rules by @jessicacotturone21 in #2642
- Raising: drop the trunc and shift extent derivations by @wsmoses in #3179
- canonicalize-parallel: unpack a disjoint-or packed launch dimension by @wsmoses in #3180
- canonicalize-parallel: shift an or with a constant side, hoist a shared clamp by @wsmoses in #3182
- Raising: drop the disjoint-or extent derivation by @wsmoses in #3183
- simplify-affine-exprs: simplify against domains with symbols by @wsmoses in #3174
- Raising: read a dominating guard in CFG form by @wsmoses in #3184
- Raising: bound a lane axis given by an affine expression of bounded values by @wsmoses in #3185
- Raising: bound a lane extent through a left shift by @wsmoses in #3186
- Raising: pad a barrier-spanning dynamic lane axis to the launch budget by @wsmoses in #3134
- canonicalize-parallel: unroll a while whose exit test is decided by its second evaluation by @wsmoses in #3187
- canonicalize-parallel: unroll whiles exiting on (counter | x) == 0 or on an scf.if of a flag yielded a constant by @wsmoses in #3188
- Split struct-element kernel scratch into per-field buffers by @wsmoses in #2982
- canonicalize-parallel: decide a rotated loop's exit test on its second evaluation by @wsmoses in #3189
- EnzymeHLOOpt: resolve a masked scatter index before the single-point DUS rewrite by @wsmoses in #3190
- Register ScatterMaskedIndexSimplify with the transform dialect by @wsmoses in #3192
- Raising: dead lanes must not scatter at all by @wsmoses in #2993
- EnzymeHLOOpt: scatter only the live box of a statically masked store by @wsmoses in #3191
- Add derivative rules for stablehlo CaseOp by @awiteck in #3195
- simplify i1 comparisons against boolean constants (#1417) by @shema-boris in #2548
- Raise to DUS/DS affine store/load with multi ivs per dim by @Pangoraw in #3197
- Disable split on affine if constants by default by @Pangoraw in #3203
- EnzymeRefineArguments: leave an unconverted result type to shape refinement by @wsmoses in #3205
- EnzymeHLOOpt: hoist unchanged while variables initialized from a block argument's layout by @wsmoses in #3201
- EnzymeHLOOpt: hoist unchanged while variables initialized from an enclosing loop's argument by @wsmoses in #3206
- add
MapSymbolpass to mock JIT symbols on CLI for lit_tests by @mofeing in #3115 - Cache batch_norm_training mean and variance for reverse-mode loops by @AdityaPandeyCN in #3200
- EnzymeHLOOpt: scatter to DUS only when the index is provably in bounds by @wsmoses in #3022
- implement JIT lowering for
comm.mpiops by @mofeing in #3100 - Cache reduce max/min input, init and result for reverse-mode loops by @AdityaPandeyCN in #3213
- EnzymeHLOOpt: CSE patterns scan the operand with the fewest users by @wsmoses in #3228
- Slice merging: the next slice starts one stride past the last taken index by @wsmoses in #3225
- Make DUSDUSSubsuming take precedence over SliceOfDynamicUpdate by @Pangoraw in #3211
- EnzymeHLOOpt: keep a transpose-like broadcast below a slice of a splat constant by @wsmoses in #3227
- AutoBatching: do not batch-fission a loop that runs no iterations by @wsmoses in #3224
- Revert "Make DUSDUSSubsuming take precedence over SliceOfDynamicUpdate" by @Pangoraw in #3230
- EnzymeHLOOpt: TransposeReduceWindow permuted the window attributes backwards by @wsmoses in #3223
- Use clonedSlice result before erasing it by @Pangoraw in #3231
- EnzymeHLOOpt: GatherOpCanon folds a constant run that passes the operand's end by @wsmoses in #3221
- EnzymeHLOOpt: a reduce over a halving reduce_window is a reduce of its input by @wsmoses in #3222
- Tessera: result/output arguments by @jessicacotturone21 in #2700
- EnzymeHLOOpt: SelectCompIotaConstSimplify accepts a constant prefix mask by @wsmoses in #3220
- Raising: specialize a while loop's scalar bound through the runtime by @wsmoses in #3219
- Raising: mixed batched/scalar inductions in one index, and one-element dimensions in a flattened pair by @wsmoses in #3218
- AutoBatching: decide a hoist before creating any op by @wsmoses in #3226
- Check for auto batching profitability by @Pangoraw in #3208
- Raising for exp and log variants by @dkytezab in #3235
- Autobatching fix by @dkytezab in #3232
- EnzymeHLOOpt: the in-bounds head of a clamped strided gather run ends at the operand by @wsmoses in #3236
- Update EnzymeAD/Enzyme to commit fac286eb3902e960d9233b6940f7aa72902c1448 by @enzymead-bot[bot] in #3079
- Update EnzymeAD/Enzyme to commit 466a4111d1bc8e36cc6b504d427af98917a5b3f0 by @enzymead-bot[bot] in #3239
- Update EnzymeAD/Enzyme to commit 1c3eed95a86bb2f03f5134c42d0a1dcff8b6981c by @enzymead-bot[bot] in #3243
- Remove nested get/set checks in while op remover by @Pangoraw in #3242
- StableHLO if/case reverse: zero the result adjoints they consume by @nsiccha in #3241
- Bug fix for Exp10 raising by @dkytezab in #3244
- Gate CompareAbs behind NoNan flags by @Antipath1 in #2909
- Update EnzymeAD/Enzyme to commit 017c7b907fd88ee72f1b2879d146d9263174ac4d by @enzymead-bot[bot] in #3245
- Bail of DUSSliceSimplify when no slice touches the update by @Pangoraw in #3246
- Update jax-ml/jax to commit 3b3bebe4d863f5a7cfbe99c6709b6c28aca1bb65 by @enzymead-bot[bot] in #3042
- Stop disabling LLVM threading by @wsmoses in #3249
- Update EnzymeAD/Enzyme to commit a364a8a44185628179f5fbb8160b318a0a90bf1d by @enzymead-bot[bot] in #3248
- AffineCFG: fix LiftMemrefRead segfault when the load is the only if user by @Antipath1 in #3247
- Update JAX_COMMIT to new commit hash by @wsmoses in #3250
- Vendor LLVM fix for AMDGPU copies placed above the exec restore by @gbaraldi in #3252
- Rebase the AMDGPU BBProlog backport onto the LLVM XLA now pins by @wsmoses in #3255
- Update uenv image and symlink Julia by @luraess in #2947
- Update jax-ml/jax to commit 886d2370c1c959d210f522e352e3ddc6bcff7d6c by @enzymead-bot[bot] in #3256
- Update EnzymeAD/Enzyme to commit a93f06cc8b485a404986be8f5b2d99bfc2edd13f by @enzymead-bot[bot] in #3257
- AutoBatching: a parallel while with a constant trip count is a batched scatter by @wsmoses in #3238
- libdevice raising: minimumnum/maximumnum are first-class llvm dialect ops now by @wsmoses in #3259
- ParallelWhileToBatchedScatter: a write chain may be read between its links by @wsmoses in #3260
- Batching: a transpose's batched form rebuilds only its permutation by @wsmoses in #3262
- Raising: specialize every scalar argument a loop bound is computed from by @wsmoses in #3264
- Update EnzymeAD/Enzyme to commit 211923c20b6b70851f69ceeb25009a9338d1af8f by @enzymead-bot[bot] in #3266
- Update jax-ml/jax to commit f5181873d99ced80117f03b93ec41d4d15225bf6 by @enzymead-bot[bot] in #3263
- raise: add an exportMLIROnly option returning the raised MLIR by @burakSemih in #3143
- EnzymeHLOOpt: a while that carries one value twice carries it once by @wsmoses in #3272
- SliceToBatch: an op whose region reads a batched value stays after it by @wsmoses in #3267
- Raise sincos calls to math.sincos, and math.sincos to StableHLO by @Antipath1 in #3265
- WhileLoopInfo: the invariance walk visits a shared value once by @wsmoses in #3273
- Fix -Wreturn-type and -Wlogical-op-parentheses warnings by @wsmoses in #3281
- liftReduceLikeOperation: ask about argIdx once it holds a position by @wsmoses in #3280
- Fix vendored polly and Polymer build against newer LLVM by @wsmoses in #3282
- Enable FileCheck -enable-var-scope in lit tests by @wsmoses in #3284
- Drop result layouts from unused result for kernel/jit calls by @Pangoraw in #3209
- Revert "Drop result layouts from unused result for kernel/jit calls" by @Pangoraw in #3290
- SliceToBatch: batch converts only of pieces that follow one another by @wsmoses in #3299
- ReshapeDynamicSlice, ReshapeDUS: decide before creating the zero index by @wsmoses in #3300
- ClampConstProp: resize a scalar bound to the operand before folding by @wsmoses in #3303
- Add Z3 to Bazel build rules by @javathunderman in #3181
- Raising: specialize_index_strides, a scalar an access index reads by @wsmoses in #3302
- Batching: a region of the op it wraps may read only what it can take along by @wsmoses in #3304
- WrapOp: amounts stay within the operand's extent by @wsmoses in #3307
- SplitReduceAddMulToAddDotGeneral: place the new reduce where its init is defined by @wsmoses in #3308
- WidenExtend: a boundary element only folds into an empty side by @wsmoses in #3306
- Narrow masked integer equality comparisons before conversion by @vimarsh6739 in #3147
- RecognizeWrap: the pieces must fit in the operand by @wsmoses in #3311
- Remove result layouts attribute from Custom/JIT/Triton call by @Pangoraw in #3291
- ReduceConstProp: fold a reduce of a constant by @wsmoses in #3310
- tweak profitability checks in auto-batching by @Pangoraw in #3315
- Clean up CI job dir after GB-25 run by @luraess in #3314
- ScatterOfGatherIdentity: a scatter of the gather of its own slots is its operand by @wsmoses in #3320
- ReduceConstProp: a reduce max or min of a function of the lane is its value at an end by @wsmoses in #3321
- ParallelWhileToBatchedScatter: a reduce may have several inputs by @wsmoses in #3316
- ReshapeSlice: a reshape whose dimensions do not pair with the slice's is refused, not looped on by @wsmoses in #3328
- BinopPadToConcat: splitting over a pad of any value pays only when a piece goes unread by @wsmoses in #3330
- WhileUnroll: a loop whose limit is bounded unrolls to the most trips, the uncertain ones guarded by @wsmoses in #3326
- Fix __nv_isinff being raised incorrectly to math.isfinite by @Antipath1 in #3348
- Perfify cost bound pass by @javathunderman in #2429
- Sweep CI slots left by cancelled jobs by @luraess in #3340
- DynamicPadToPad: a dynamic result is refined from the operand once the amounts are constants by @wsmoses in #3333
- WhileDuplicateCarried: a position that carries a function of another position is that function of it by @wsmoses in #3334
- Batching: enzymexla.wrap, extend and rotate batch along their dimension by @wsmoses in #3318
- Update EnzymeAD/Enzyme to commit 3cfc955c9c73ad7c54334e0db15b46000932297a by @enzymead-bot[bot] in #3274
- ParallelWhileToBatchedScatter: batch through a constant-trip nested loop by @wsmoses in #3261
- Update jax-ml/jax to commit fbf6588d55c5662ccf98558015d5b2c4c4a7bf6f by @enzymead-bot[bot] in #3270
- WhileUnroll: a long body unrolls within the budget of the iteration limit by @wsmoses in #3309
- OptimizeCommunication: build zero and one constants that support complex by @wsmoses in #3355
- ReduceConstProp: a reduce max or min of constants alone is evaluated by @wsmoses in #3354
- Fix CI slot sweep: claims, non-blocking deletes, COMPLETING jobs by @luraess in #3352
- LowerTriton: give the kernel a pointer argument per result for XLA's ABI by @wsmoses in #3363
- Update EnzymeAD/Enzyme to commit 3cd66b79ce224b8dc35cfac0e37038ed186b2013 by @enzymead-bot[bot] in #3362
- ParallelWhileToBatchedScatter: a chain's links are the operands it records by @wsmoses in #3364
- ParallelWhileToBatchedScatter: a dot_general with one side the same every iteration is not broadcast by @wsmoses in #3360
- Keep CI build outputs in /dev/shm, off the scratch inode quota by @luraess in #3365
- Import GEP inrange at the index width of its base pointer by @wsmoses in #3367
- ParallelWhileToBatchedScatter: batch the reductions a tagged loop carries by @wsmoses in #3372
- Bump julia-actions/cache from 3.2.0 to 3.4.0 by @dependabot[bot] in #3353
- Update Enzyme to 56b02e7e for OffsetViewInterface by @vimarsh6739 in #3373
- AffineCFG: drop a rotated loop's copy of its live-out by @wsmoses in #3371
- AffineCFG: prove loops parallel through loop-invariant products of symbols by @wsmoses in #3369
- AffineCFG: drop the carried values of an affine.for that nothing reads by @wsmoses in #3374
- AffineCFG: move a loop out of the check that it runs by @wsmoses in #3375
- Add OffsetViewInterface to pointer conversions by @vimarsh6739 in #3377
- Fuse sequential XLA wrappers by @vimarsh6739 in #2744
- raise: run affine-cfg once more after llvm-to-affine-access by @wsmoses in #3379
- AffineCFG: look through nested parallel loops and scf.if in the parallel check by @wsmoses in #3381
- Cancel partial inverse transposes across elementwise operations by @vimarsh6739 in #3146
- SliceConcat: no identity slices or single-operand concats by @wsmoses in #3385
- Support runtime DUS starts on non-partitioned dims in SPMD's constant-index path by @wsmoses in #3356
- AffineCFG: a reduction's combining op must feed the loop's own yield by @wsmoses in #3382
- AffineCFG: prove kernel loops parallel whatever surrounds the kernel by @wsmoses in #3380
- SliceToBatch: batch every result of a multi-result target op by @wsmoses in #3378
- Try
SliceInternalfix by @dkytezab in #3388 - MergeParallelInductions: merge over a trip count that is a value by @wsmoses in #3386
- AffineIfSimplificationIsl: name the domains' parameters after their values by @wsmoses in #3387
- AffineCFG: a loop may read at indices it cannot follow what it never writes by @wsmoses in #3383
- ConcatFuse: flatten a nest of concatenates in one rewrite by @wsmoses in #3390
- ReshapeOpCreate: reuse the value a reshape chain started from by @wsmoses in #3395
- DynamicUpdateToConcat: splice into a concatenate's own pieces by @wsmoses in #3394
- GatherOfScatterSimplify: read slots kept as windows of one, and batched by @wsmoses in #3393
- Update slice_to_batch_variadic_reduce goldens for ReshapeOpCreate by @wsmoses in #3397
- StaticSlice: refer to the slice's bounds instead of copying them by @wsmoses in #3396
- Canonicalize XLA wrapper inputs by @vimarsh6739 in #3350
- RecognizeExtend: reject a window before building its slices by @wsmoses in #3391
- AffineCFG: drop +0.0 added to a sum an affine.parallel reduces by @wsmoses in #3403
- AffineCFG: a max or min with a constant that an affine.if decides by @wsmoses in #3401
- AffineCFG: run a branch that does nothing where its check fails by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3402
- AffineCFG: use that a nest's accesses stay in bounds at its corners by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3400
- AffineCFG: use what the checks on the way to a nest establish by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3404
- Update affinecfg_parallel_inbounds goldens for HoistBranchOutOfRunsCheck by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3406
- AffineCFG: parallelize a multiply-add accumulation as a sum of products by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3407
- AffineCFG: check lockstep dependences on the parallel check's relations by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3405
- AffineCFG: a carried value advanced by a constant is an induction variable by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3408
- AffineCFG: parallelize an accumulation taken under a condition by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3409
- BroadcastIota: only fold when the broadcast keeps the iota's extent by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3410
- IotaSimplify: an iota along a dimension of size 1 is a splat 0 by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3412
- XLA patch: use assign_global_device_ids properly for single-process clients by @romanlee in https://github.com/EnzymeAD/Enzyme-JAX/pull/3376
- AffineCFG: multiply an index out before abstracting its invariant terms by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3419
- AffineCFG: the facts of the scf.ifs a loop is under, and more of a check by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3418
- AffineCFG: an or setting only bits known zero is an add by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3415
- fix load of arg in
comm.mpi.waitallJIT lowering by @mofeing in https://github.com/EnzymeAD/Enzyme-JAX/pull/3413 - AffineCFG: the accesses through two views of one object are compared by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3416
- CanonicalizeParallel: trunci of an index cast is the narrower index cast by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3414
- AffineCFG: SplitParallelInductions rebuilds the variable as an affine.apply by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3420
- SplitBranchedAccesses: any chosen value, through the index arithmetic by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3417
- SimplifyAffineExprs: write an access isl simplified as AffineFixup would by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3423
- AffineCFG: CanonicalizeAffineApply counts a change of operands as a change by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3432
- AffineToStableHLORaising: a second load of a whole buffer gets its own value by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3424
- EnzymeHLOOpt: a dynamic slice before the update of a DUS reads none of it by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3421
- remove extra
llvm.getelementptroncomm.mpi.waitallJIT lowering by @mofeing in https://github.com/EnzymeAD/Enzyme-JAX/pull/3434 - AffineCFG: AffineFixup keeps the alignment of the access it rewrites by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3435
- EnzymeHLOOpt: ScatterIndicesAreUnique reads a constant without copying by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3439
- AutoBatching: batch through a nested loop whose trip count the data gives by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3437
- EnzymeHLOOpt: the live box of a masked scatter through broadcasts and constant masks by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3441
- Lift host XLA wrapper loops into StableHLO by @vimarsh6739 in https://github.com/EnzymeAD/Enzyme-JAX/pull/3349
- AffineCFG: a scratch every iteration writes whole before reading is private by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3433
- Raising: signed integer max and min as parallel reductions by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3436
- EnzymeHLOOpt: a scatter whose every index is out of range writes nothing by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3442
- EnzymeHLOOpt: a slice of a gather along its batch dimensions slices the indices by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3440
- Raising: a masked pick keeps every grid axis of a flat store by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3429
- AffineCFG: an accumulation in place over a loop of unknown trip count is a reduction by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3426
- EnzymeHLOOpt: a masked store read back, and a chain of overwriting scatters by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3445
- Add rotate_rotate: fold two rotates along the same dimension by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3450
- Add concat_rotate: merge adjacent rotates under a concatenate by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3448
- Add transpose_like_broadcast_concat: push transpose-like broadcasts t… by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3449
- AffineCFG: read a lowered division whose arms a canonicalize folded by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3451
- llvm-to-affine-access: read through a zero extension only for a non-negative operand by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3452
- Hoist an allocation out of a loop from the allocation, not the loop by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3453
- Add unroll-small-loops, scheduled before the raising's first affine-cfg (off by default) by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3454
- Fix gesdd lowering for complex valued arrays by @kshyatt in https://github.com/EnzymeAD/Enzyme-JAX/pull/3446
- unroll-small-loops: bound what unrolling leaves, not only the trip count by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3455
- mem2reg: walk only the ops relevant to the slot being forwarded by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3456
- [experiment] Raising: specialize every read-only scalar integer argument by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3447
- llvm-to-affine-access: expand aggregate views of a scalar buffer per leaf by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3457
- Update jax-ml/jax to commit 6aaf234b1ee98800fcb80b9014a052a66dadbd8a by @enzymead-bot[bot] in https://github.com/EnzymeAD/Enzyme-JAX/pull/3368
- canonicalize-parallel: drop inrange from a gep whose base is chosen by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3459
- parallel-lower: cast gpu.launch_func dimensions to index by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3460
- gpu-launch-recognition: fail a launch of a kernel with no device code when it runs by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3458
- canonicalize-scf-for: a while argument that only keeps or resets to its init is the init by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3461
- Perfify: Cost ops rewrite by @javathunderman in https://github.com/EnzymeAD/Enzyme-JAX/pull/3399
- Raise more libdevice rounding functions by @Antipath1 in https://github.com/EnzymeAD/Enzyme-JAX/pull/3361
- AffineCFG: do not compare the accesses of a loop that runs once by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3465
- Bump julia-actions/cache from 3.4.0 to 3.5.0 by @dependabot[bot] in https://github.com/EnzymeAD/Enzyme-JAX/pull/3466
- PolygeistMem2Reg: forward a member copied in to the field read of it by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3469
- AffineCFG: an affine.for that runs at most once is not a loop by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3468
- PolygeistMem2Reg: split aggregate allocations forwarding cannot remove by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3464
- AffineCFG: a max against a constant read under a guard that holds it by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3430
- AffineToStableHLORaising: an atomic through a space cast is an access by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3467
- Update the mem2reg goldens for #3464 and #3469 together by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3471
- EnzymeHLOOpt: DUSDUSSubsuming moves slices only when it replaces the DUS by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3470
- SliceIota: a slice of an integer iota is an iota of the slice's shape by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3485
- WhileSliceElementwiseCarry: carry only the box of an accumulator the loop's readers slice by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3484
- ParallelWhileToBatchedScatter: a read through a reshape of the buffer is a read by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3477
- ParallelLower: inline a launched kernel without naming it in a func.call by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3473
- PolygeistMem2Reg: a store over a slot holds the piece of it at the slot by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3472
- ParallelLICM: move what a kernel reads of host objects ahead of its launch by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3486
- ScatterMaskedIndexSlice: cut stores into any target, and bound the box with constant masks by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3483
- EnzymeHLOOpt: a gather of a broadcast along its batching dimensions reads the source by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3479
- PolygeistMem2Reg: the aggregate split takes copies out of the allocation by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3475
- llvm-to-affine-access: a scalar llvm constant is an arith constant by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3488
- ScatterMaskedIndexSimplify: judge a constant index by its values by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3478
- Grid indexing over operands of any rank by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3493
- Read grid indices through broadcasts, scaling and conversions by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3494
- AffineToStableHLORaising: a pointer read inside the kernel is not raised by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3487
- Concat of a value repeated along its dimension is a broadcast by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3495
- Fuse XLA wrappers with read-only buffer views by @vimarsh6739 in https://github.com/EnzymeAD/Enzyme-JAX/pull/3489
- Read grid indices through transposes, slices, reshapes and grid concats by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3497
- Move transposes up through gathers and scatters by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3498
- Forward a slice of a transposed dynamic_update_slice by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3499
- Fix invalid math forward rule by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3491
- slice_gather: gather once over the box its slices cover by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3501
- max/min: absorb a repeated operand by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3502
- Const prop: fold a non-splat constant only to replace one by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3503
- Optimize concat of reshaped contiguous slices by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3504
- Remove unused results from stablehlo.case in EnzymeHLOOpt by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3508
- Leave IR unchanged when reshape slice patterns fail by @nsiccha in https://github.com/EnzymeAD/Enzyme-JAX/pull/3295
- Fix SliceIf dominance when slicing one result of a multi-result if by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3506
- Fix complex constant creation and splat attribute crashes (#3297) by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3507
- GatherOpCanon: build the flattened operand only once nothing can fail by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3516
- AffineCFG: support non-constant single-result lower bounds in AffineF… by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3513
- Support scf.for and affine.for loops in polygeist-mem2reg by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3515
- ParallelWhileToBatchedScatter: no budget for an iteration's own copy by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3517
- DotGeneralSimplify: a broadcast scalar operand contracts to a sum by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3518
- Fuse JIT call using SSA dependencies by @yanzin00 in https://github.com/EnzymeAD/Enzyme-JAX/pull/2625
- Fix gelu sigmoid derivative by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3505
- Fix complex abs and product reduction derivatives (#3288) by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3509
- Grid indexing: cut a block its scale does not divide by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3519
- Grid indexing: read an index vector through a pad by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3520
- ScatterMaskedIndexSlice: a mask folded into constant indices by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3521
- Grid indexing: read the values of a static index the structure does not show by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3523
- slice_pad, slice_concat: forward strided slices by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3524
- reshape_pad: move a pad past a reshape that splits or merges its dim by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3525
- slice_reshape_*: a slice of a split dim that is one run of its elements by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3526
- transpose_elementwise: a value used both ways, built from broadcasts by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3522
- Register a pointwise sharding rule for chlo.conj by @ptiede in https://github.com/EnzymeAD/Enzyme-JAX/pull/3512
- Transform pass list: make dot formation optional by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3527
- Format slicePadHelper by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3528
- WhileLoopInfo: Check for affine info before when slicing a iota by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3532
- dus_reshape: move a reshape that merges or splits dims past a DUS of it by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3535
- Fold min/max reductions of iota-like tensors symbolically by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3536
- AffineCFG: sink a reduction's store past loads of its buffer it never reads by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3539
- add_terms_to_reduce: roll a sum of matching terms into one reduce by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3529
- slice_reduce: take a slice of a reduce from the reduce's input by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3541
- concatenate_broadcast_in_dim: any rank by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3546
- Decide selects nested under the same predicate; merge selects sharing a branch by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3548
- concat_reduce: a concatenate of matching reduces is a reduce of the concatenate by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3543
- add_terms_to_reduce: terms that differ only in analysis attributes stack by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3555
- concat_slice_stack: a concatenate of a window moved along another dimension by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3554
- concatenate_broadcast_in_dim: concatenate along a dimension the broadcasts expand by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3549
- reshape_gather: move a reshape into an element-wise gather by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3557
- wrap_to_broadcast, extend_to_broadcast: a wrap or extend of the whole tensor is a repeat by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3556
- add_terms_to_reduce: stack terms through reductions by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3558
- concat_slice_stack: see through a reshape every operand applies by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3559
- dot_general_unbatch_broadcast: a batching dimension one operand only broadcasts is a free dimension by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3560
- add_terms_to_reduce: stack terms through dot_general by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3561
- concat_dot_general: a concatenate of matching dot_generals is one dot_general by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3562
- concatenate_broadcast_in_dim: leave transpose-like broadcasts to transpose_like_broadcast_concat (fixes a rewrite cycle) by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3563
- concat_dot_general: through a shared transpose, and stacking pieces against a shared operand by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3564
- concat_dot_general: merge runs of pieces, through broadcasts that insert unit dimensions by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3565
- concat_slice_stack: see through any view chain every operand applies by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3566
- cse_reduce: CSE for stablehlo.reduce by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3574
- reshape_concat: regrouping reshapes whose rows the operands fill by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3573
- concatenate_broadcast_in_dim: a concatenated dimension expanded from a unit operand dimension by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3571
- cse_dot_general_transposed: CSE dot_generals equal up to transposes by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3578
- slice_reshape_concat_window: forward a window of a reshaped concatenate into the operand it reads by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3575
- embed
MPI_STATUS_IGNORE,MPI_STATUSES_IGNOREconstant values in JIT lowering instead of resolving at JIT link stage by @mofeing in https://github.com/EnzymeAD/Enzyme-JAX/pull/3576 - concat_reshape_broadcast: concatenated reshapes of shared broadcasts by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3579
- fix
MPI_Requestbitwidth based on MPI implementation by @mofeing in https://github.com/EnzymeAD/Enzyme-JAX/pull/3577 - concat_view_cse: a concatenate of views that another one already builds by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3583
- concat_reduce: see through reshapes of the reductions by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3580
- concat_dot_general: see through reshapes that regroup the concatenated dimension by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3585
- const prop: fold small results whose constant inputs stay alive (size as a pattern parameter and option) by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3584
- Add dot_general_no_contraction_to_mul by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3553
- concat_dot_general: match pieces by their contraction, not their spelling by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3586
- concat_dot_general: merge a run that mixes stacked and single pieces by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3589
- Raising: widen lane-bounded loops to their constant hull behind a guard by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3587
- Raising: take a reduction loop's final value from the end of its lane axis by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3592
- concat_slice_stack: stack windows read through different reshapes of the buffer by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3594
- concat_slice_stack: windows read through view chains and transposed roots by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3595
- concat_dot_general: grouped carriers by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3596
- concat_elementwise: analysis annotations do not tell ops apart by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3597
- concat_reduce: unit reduced dimensions, and stacking through views by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3599
- concatenate_broadcast_in_dim: operands of different layouts by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3600
- concat_view_cse: stacks along a unit dimension of the values by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3601
- transpose_reshape: a reshape that merges dimensions by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3602
- concat_reduce: inputs must agree in rank by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3604
- concat_dot_general: a piece whose views undo a swapped spelling by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3605
- concatenate_broadcast_in_dim: unit operand dimensions do not tell layouts apart by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3606
- cse_reduce_transposed: CSE reduces equal up to a transpose of their input by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3608
- reshape_broadcast: the broadcast may have other users by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3609
- add_terms_to_reduce: broadcasts compared by what they compute; elementwise terms may be shared by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3611
- broadcast_in_dim_op_canon: expanding unit operand dimensions in a fixed order by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3610
- add_terms_to_reduce: an elementwise term may be read by another sum too by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3612
- concat_dot_general: a swapped piece's extent along the concatenated dimension by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3613
- concat_reduce: a piece's input transposed into the first's form by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3614
- concatenate_broadcast_in_dim: hoist the dimensions every operand expands by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3615
- concat_periodic: a concatenate whose operands repeat with a period by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3616
- concatenate_broadcast_in_dim: drop an in-order operand's unit dimensions before hoisting by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3618
- concat_view_cse, reshape_concat: break their cycle on a concatenate nothing reads by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3619
- Transform list: add_terms_to_reduce after reduce_mul_to_dot_general by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3622
- cse_reduce_transposed: walk the input's computation as a DAG by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3623
- Fix Vt returned by GPU SVD lowerings by @kshyatt in https://github.com/EnzymeAD/Enzyme-JAX/pull/3581
- Fix reverse mode of stablehlo.slice with a non-tight limit index by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3628
- concat_slice_stack: every operand applies all the first's views by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3621
- pad_concat_to_concat_pad: keep padding between operands along the concat dim by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3629
- run_pass_pipeline: print large i1 attributes element by element by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3633
- ZeroExtentTensorCanon: materialize stablehlo.constant instead of tensor.empty by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3630
- CI (CSCS MI300): provide rocm_sysdeps libs for XLA's MORI on classic ROCm by @luraess in https://github.com/EnzymeAD/Enzyme-JAX/pull/3582
- Bail out of IotaReshape when iotadim is zero by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3638
- ConvertConcat: leave a convert of a stack of reshapes to batching by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3639
- AffineToStableHLORaising: reduce invariant affine.parallel yields over every IV by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3642
- Fix ExtUI arith raising by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3636
- llvm-to-affine-access: select the leaves of a select of aggregates by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3643
- build(deps): bump bazel-contrib/setup-bazel from 0.19.0 to 0.19.1 by @dependabot[bot] in https://github.com/EnzymeAD/Enzyme-JAX/pull/3646
- Add max num rewrites & max-iterations to generate apply patterns pass by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3625
- drop operand layout when dropping readnone arg by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3652
- Use otherPadOp's high padding in MultiPadConcat merge by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3648
- Update bazel version in README by @brian-kelley in https://github.com/EnzymeAD/Enzyme-JAX/pull/3653
- Replace linux-x86-n2-32 runner label with linux-x86-n4-32 by @quoctruong in https://github.com/EnzymeAD/Enzyme-JAX/pull/3635
- ConvertOp: a convert to or from an integer type is inactive by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3644
- Perfify: Interval Cost Analysis by @javathunderman in https://github.com/EnzymeAD/Enzyme-JAX/pull/3654
- CSEReduceTransposed: find candidates among the init value's reduces by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3645
- Use the removed results bit vector in WhileDeadResults by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3663
- test FuseJIT pass on smaller cases by @mofeing in https://github.com/EnzymeAD/Enzyme-JAX/pull/3650
- xla targets: lower cudaDeviceSynchronize to reactantXLASync by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3641
- Revert "xla targets: lower cudaDeviceSynchronize to reactantXLASync (#3641)" by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3667
- Format StableHLOAutoDiffOpInterfaceImpl.cpp by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3669
- concat_dot_general: search runs only among operands that end in a dot by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3671
- Index WhileDuplicateCarried candidates by init and yield by @Pangoraw in https://github.com/EnzymeAD/Enzyme-JAX/pull/3661
- ConcatPushBinop: leave a concat its slices read in part (no BinopPadToConcat cycle) by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3672
- Consolidate the constant integer evaluators into one Utils helper by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3676
- Grid indexing: evaluate static indices natively, not with the interpreter by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3674
- BinopPadToConcat: leave an unread piece the padding value, not the op over it by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3677
- z3: provide a header for standard libraries without one by @wsmoses in https://github.com/EnzymeAD/Enzyme-JAX/pull/3679
New Contributors
- @AsafManela made their first contribution in #2986
- @awiteck made their first contribution in #3195
- @shema-boris made their first contribution in #2548
- @AdityaPandeyCN made their first contribution in #3200
- @nsiccha made their first contribution in #3241
- @gbaraldi made their first contribution in #3252
- @burakSemih made their first contribution in #3143
- @kshyatt made their first contribution in https://github.com/EnzymeAD/Enzyme-JAX/pull/3446
- @brian-kelley made their first contribution in https://github.com/EnzymeAD/Enzyme-JAX/pull/3653
- @quoctruong made their first contribution in https://github.com/EnzymeAD/Enzyme-JAX/pull/3635
Full Changelog: v0.0.15...v0.0.16