Fixed issues/improvements:
- Fix send payload coalescing when a source is larger than two GRFs.
- Group instructions together for performance.
- Check dangling constant users for Function/Global symbols, before iterating through the user list.
- Add the debug flags to limit number of constants to fold.
- Fix 64-bit multiplication emulation where the result is one of the factors.
- Fix translation of operation parameter of OpGroupNonUniformBallotBitCount.
- Verification pass for explicit variable split phase. Pass can be enabled using -verifysplit switch.
- Enable integer mad by default for OCL.
- Support function symbols used by Constants. MemOpt may combine multiple function address symbols into a single constant for load/store. Updating codegen to support this.
- Optimize indirect calls with function groups using LLVM !callees metadata. Fixed a few existing bugs, and removed the pass from OptimizeIR.
- Checking in FindInterestingConstants changes to return constants in sorted order.
- Fix translation of BallotBitCOunt in SPIRV Reader.
- Skip bank conflict hint for split variables to increase coalescing chances.
- Fix ASR offset for signed extend 32-bit value to 64-bit.
- Fix incorrect specialization constants reuse by subsequent SPIR-V modules.
- Skip trivial RA when variable split is done to avoid generating extra movs.
- Fix specialization constants for linking path.
- Enable explicit variable splitting and disable existing local split.
- Promote to stateful if GEP is not existed and address type is DW-aligned.
- Bail out from mad optimization if one of the operand is INF.
- And other fixes and performance improvements.
Ubuntu 18.04 binary packages for LLVM10/Clang10 are included.