- Upgrade to LLVM 18.1.5 minimum
- Upgrade to LLVM 18.1.4 minimum
- partial_inliner! pass
- Deprecate unwind instruction
- Attribute to_s and inspect call LLVM Attribute::getAsString() for a better and more consistent string
- Switch to LLVM 18
- Breaking changes to optimizing inline and always-inline
- Previously, an inliner-threshold of nil would be no inlining
- Currently, always-inline and inline are included, matching O0-3, unless disabled by parameter
- Changes to LLVM const functions
- LLVM::Module#clone_module to clone a module entirely.
- Attribute methods: readnone? readonly? writeonly? which work for new and old attributes
- Function methods: readnone? readonly? writeonly? which work for new and old attributes
- allow attribute comparisons to strings and symbols
- more attribute tests
- Switch to LLVM 17
- PassBuilder class for New Pass Manager (https://llvm.org/docs/NewPassManager.html)
- PassManager most methods will raise exceptions
- PassManagerBuilder #build and #build_with_lto will raise exceptions
- Users must switch to PassBuilder
- Fix GenericValue.from_b. (@seven1m)
- Fix build issues. (@seven1m)
- Call instruction uses function calling convention by default.
- Call instructions can use function names instead of functions.
- Add test for invoke / invoke2.
- Added builder support for the fneg instruction.
- Update to LLVM 16.
- Several other related things.
- Fixed segfaults when value type expected to be instruction but was globalvairable
- inspect values should be more useful than raw pointer for modules, functions, instructions
- Fixed tests
- raise on use of deprecated constant expressions
- Add LLVM::Value#kind which calls LLVMGetValueKind and returns a symbol
- Add LLVM::Module.parse_ir and LLVM::Module#write_ir!
- More workflow tests - including ruby 3.2
- Several additional Target tests
- valid? method for modules and functions
- ConstantInt#trunc
- ConstantInt#ext alias for ConstantInt#sext
- ConstantInt#to_f to const convert to float type
- ConstantReal#to_i to const convert to int type
- ConstantReal#trunc
- ConstantReal#ext / ConstantReal#sext
- Many more tests
- Tests for adding pass manager passes - catches pass removals and certain bugs
- Additional documentation for passes
- Missing passes:
- dce!
- bdce!
- scalarizer!
- mldst_motion!
- new_gvn!
- instsimplify!
- loop_reroll!
- loop_unroll_and_jam!
- loweratomic!
- partially_inline_libcalls!
- verify!
- early_cse_memssa!
- scoped_noalias_aa!
- lower_constant_intrinsics!
- mergereturn!
- lowerswitch!
- add_discriminators!
- called_value_propagation!
- Warnings on removed passes:
- arg_promote!
- ipcp!
- loop_unswitch!
- simplify_libcalls!
- constprop!
- bb_vectorize!
- Bug fixes for passes:
- dae!
- internalize!
- scalarrepl_threshold!
- LLVM::Type.named(name) to get an existing type - Calls GetTypeByName2
- LLVM::Type packed_struct? opaque_struct? literal_struct?
- Tests for structs and named types
- error checking for array and vector sizes
- GitHub dependabot integration
- GitHub preliminary CI
- Fix to compiling ruby-llvm-support with clang++
- debug gem
- add "2" version for several operations
- build_load2, build_gep2, build_inbounded_gep2, build_struct_gep2, build_call2, build_invoke2
- LLVM 15
- Pointers only support opaque mode
- Type#element_type returns void for pointers
- Order for building is now: clang++-15 clang++ g++
- updated various development gems: rubocop, minitest, etc
- builder#build_with_lto
- ruby version is >= 2.7
- Error handling for Builder#ret
- Error handling for Builder#call
- Error handling for Builder#br
- Error handling for Builder#cond
- Error handling for extract element/value
- Error handling for insert element/value
- Error handling for position, position_at_end, position_before
- default to "ret void" for Builder#ret
- add Type#aggregate?
- LLVM::Type#to_s now shows LLVM IR type
- LLVM::Value#to_s now shows LLVM IR value
- added ConstantInt#zext
- added ConstantInt#sext
- added PassManager#mergefunc! pass
- LLVM Bindings upgraded to 13.0.0
- update gem dependencies
- LLVM Bindings upgraded to 11.0.0
- LLVM Bindings upgraded to 10.0.0
- update gem dependencies
- remove some bindings to functions which no longer exist in llvm-c
- MCJITCompiler initialized with code_model 0 again
- Allow PassManager.new to be called without a machine parameter
- PassManager.new warns on being called with a machine parameter
- LLVM Bindings upgraded to 8.0.0