SPIRV-Tools/CHANGES
Stephen McGroarty 8ba68fa9b9 Dominator Tree Analysis (#3)
Support for dominator and post dominator analysis on ir::Functions. This patch contains a DominatorTree class for building the tree and DominatorAnalysis and DominatorAnalysisPass classes for interfacing and caching the built trees.
2017-12-05 22:59:43 -05:00

256 lines
11 KiB
Plaintext

Revision history for SPIRV-Tools
v2017.2-dev 2017-11-23
- Start v2017.2-dev
- Optimizer:
- Adding dominance analysis
- Fixes:
#1004: Use after free of an instruction, in remove-duplicates transform
#1007: OpImageRead not required to return 4-component vector
#1009: OpImageRead can return scalar int/float types
#1011: OpImageRead should allow scalar int/float texel types
v2017.1 2017-11-23
- Update README with details on the public_spirv_tools_dev@khronos.org mailing list.
- General:
- Automatically deploy built artifacts to GitHub Releases
- Add a Linker (module combiner). Under development.
- Add Android.mk for Android NDK builds.
- Add the 'effcee' library as an optional dependency for use in tests.
Eventually it will be a required dependency, once downstream projects have
a chance to adjust. Requires 're2' library.
- Avoid static-duration variables of class type (with constructors).
- Hack around bugs in gcc-4.8.1 template handling
- Faster opcode lookup
- Validator:
- Recognize extensions listed on SPIR-V registry,
through #25 SPV_AMD_shader_fragment_mask
- Validator issues an info message when it sees an unrecognized extension.
- Type check basic arithmetic operations
- Type check carry/extended arithmetic operations
- Type check vector arithmetic operations
- Type check Relational and Logical instructions
- Type check Bit instructions
- Check type uniqueness rules
- Check conversion instructions
- Check image instructions
- Check derivative instructions
- Check OpVectorShuffle
- Check OpBranchConditional
- OpModuleProcessed is only allowed after debug names section and before annotations
section.
- Checks the right kind of return is called for each function (void or non-void).
- Add option to relax type check when storing structs (--relax-store-struct)
- Optimizer:
- Refactoring internal representation of the module, including:
- IRContext: owns a module and manages analyses
- Instructions are owned by intrusive lists, and have unique IDs
- BasicBlock owns its instruction list.
- DefUseManager: change representation of uses, for faster processing
on large modules.
- Add high level recipes: -O, -Os, and -Oconfig
Recipes for -O and -Os are under development.
- Add eliminate-dead-function transform
- Add strength reduction transform: For now, convert multiply by power of 2
to a bit shift.
- Add CFG cleanup transform
- Add removal of dead module-scope variables
- Add merge-return transform for modules without structured control flow
- Add redundancy elimination within a basic block (local value numbering)
- Extract-insert elimination:
- Recognize the case where the first instruction in the sequence is an
OpCompositeConstruct or OpConstantComposite
- Handle some cases of nested structs
- Dead branch elimination now can eliminate entire selection constructs
when all arms are dead.
- Compressing codec:
- Updated algorithm to 1.01, 1.02, 1.03
- Not built by default. Use -DSPIRV_BUILD_COMPRESSION=ON to build.
- Codec can be parameterized by a customized model.
- Fixes:
#728: Fix decoration of inlined functions
#798: spirv-as should fail when given unrecognized long option
#800: Inliner: Fix inlining function into header of multi-block loop
#824: Eliminate-local-multi-store: Fix a crash
#826: Elimiante-local-multi-store: Fix a crash
#827: Fix crash when compact-ids transform runs before another transform.
#834: Add Cmake option to build the compressing codec. Off by default.
#911: Fix classification of Line and NoLine instructions
v2017.0 2017-09-01
- Update README to describe that assembler, disassembler, and binary parser support
are based on grammar files from the SPIRV-Headers repository.
v2016.7 2017-09-01
- Add SPIR-V 1.2
- OpenCL 2.2 support is now based on SPIR-V 1.2
- Support AMD extensions in assembler, disassembler:
SPV_AMD_gcn_shader
SPV_AMD_shader_ballot
SPV_AMD_shader_explicit_vertex_parameter
SPV_AMD_shader_trinary_minmax
SPV_AMD_gpu_shader_half_float
SPV_AMD_texture_gather_bias_lod
SPV_AMD_gpu_shader_int16
- Optimizer: Add support for:
- Inline all function calls in entry points.
- Flatten decoration groups. Fixes #602
- Id compaction (minimize Id bound). Fixes #624
- Eliminate redundant composite insert followed by extract
- Simplify access chains to local variables
- Eliminate local variables with a single store, if possible
- Eliminate local variables with a several stores, if possible
- Eliminate loads and stores in same block to local variables
- Eliminate redundant insert/extract to composite values
- Aggressive dead instruction elimination
- Eliminate dead branches
- Merge blocks when the second can only be preceded by the first
- Eliminate ommon uniform loads
- Assembler: Add option to preserve numeric ids. Fixes #625
- Add build target spirv-tools-vimsyntax to generate spvasm.vim, a SPIR-V
assembly syntax file for Vim.
- Version string: Allow overriding of wall clock timestamp with contents
of environment variable SOURCE_DATE_EPOCH.
- Validator implements relaxed rules for SPV_KHR_16bit_storage.
- CMake installation rules use GNUInstallDirs. For example, libraries
will be installed into a lib64 directory if that's the norm for the
current system.
- Fixes:
#500: Parameterize validator limit checks
#508: Support compilation under CYGWIN
#517: Fix validation when continue (or case) contstruct is also the head of a
nested control construct.
#551: If a merge block is reachable, it must be *strictly* dominated by its
header.
#548: Validator: Error when the reserved OpImageSparseSampleProj* opcodes
are used.
#611: spvtools::Optimizer was failing to save the module to the output
binary vector when all passes succeded without changes.
#629: The inline-entry-points-all optimization could generate invalidly
structured code when the inlined function had early returns.
#697: Optimizer's Instruction::ForEachInId method was skipping semantics-id
and scope-id.
#755: Inliner: Fix inlining of callee with single Return appearing before
the end of the function.
#776: Fix dead branch elimination in presence of complex but dead control
flow.
#781: SPV_KHR_variable_pointers allows duplicate pointer types
#782: Inliner: Fix remapping of non-label forward references in callee
#787: Inliner: Fix remapping of inlined entry block when called from
single block loop.
#790: Inliner: Fix remapping of inlined entry block when callee has
multiple returns.
v2016.6 2016-12-13
- Published the C++ interface for assembling, disassembling, validation, and
optimization.
- Support SPV_KHR_shader_draw_parameters in assembler, disassembler, parser.
- Validator:
- Add validator API accepting raw binary words
- Increased coverage:
- Checks "Data rules" in Universal Validation Rules, section 2.16.1
- WIP: Universal Limits.
- The minimum mandated upper bounds are checked.
- TODO: Parameterize the validator to allow larger limits accepted by
a more than minimally capable implementation.
- OpSampledImage checks
- OpConstantComposite checks
- Id bound check
- Disasssembler:
- Generates friendly GLSL-based names for more builtin variables
- Generates friendly names for numeric OpConstant values
- Vendor tool info extracted from SPIR-V XML registry file.
- Fixes issues:
#429: Validator: Allow OpTypeForwardPointer and OpTypeStruct to reference
undefined IDs
#482: Validator: OpVariable initializer can be an ID of a module-scope variable
v2016.5 2016-09-16
- Support SPV_KHR_shader_ballot in assembler, disassembler, parser.
- Disassembler: Generate friendly names for built-in variables.
- Partial fixes:
#359: Add Emacs helper for automatically diassembling/assembling a SPIR-V
binary on file load/save.
- Fixes:
#414: Validator: Allow OpUndef for composite constants
#415: Validator: Phi can use its own value in some cases.
v2016.4 2016-09-01
- Relicensed under Apache 2.0
- Add optimization passes (in API and spirv-opt command)
- Fold spec constants defined with OpSpecConstantOp and
OpSpecConstantComposite to normal constants with fixed value(s).
- Fixes issues:
#318: Relicensed under Apache 2.0
v2016.3 2016-08-24
- Add target environment enums for OpenCL 2.1, OpenCL 2.2,
OpenGL 4.0, OpenGL 4.1, OpenGL 4.2, OpenGL 4.3, OpenGL 4.5.
- Add spirv-cfg, an experimental tool to dump the control flow graph
as a GraphiViz "dot" graph
- Add optimization pass: Eliminate dead constants.
- Add spirv-lesspipe.sh filter utility
- Fixes issues:
#288: Check def-use dominance rules for OpPhi (variable,parent) operands
#339: Allow OpUndef in types-constants-global-vars section, as required
by SPIR-V 1.0 Rev7, 1.1 Rev 3.
#340: Avoid race on mkdir during build
#365: Relax PointSize, ClipDistance, CullDistance capability check in all
environments not just Vulkan 1.0.
v2016.2 2016-08-05
- Validator is incomplete
- Checks ID use block is dominated by definition block
- Add optimization passes (in API and spirv-opt command)
- Strip debug info instructions
- Freeze spec constant to their default values
- Allow INotEqual as operation for OpSpecConstantOp
- Fixes bugs:
#270: validator: crash when continue construct is unreachable
#279: validator: infinite loop when analyzing some degenerate control
flow graphs
#286: validator: don't incorrectly generate def-use error for
(variable,parent) parameters to OpPhi
#290: disassembler: never generate bare % for an identifier
#295: validator: def-use dominance check should ignore unreachable uses
#276: validator: allow unreachable continue constructs
#297: validator: allow an unreachable block to branch to a reachable
merge block
v2016.1 2016-07-19
- Fix https://github.com/KhronosGroup/SPIRV-Tools/issues/261
Turn off ClipDistance and CullDistance capability checks for Vulkan.
- The disassembler can emit friendly names based on debug info (OpName
instructions), and will infer somewhat friendly names for most types.
This is turned on by default for the spirv-dis command line tool.
- Updated to support SPIR-V 1.1 rev 2
- Input StorageClass, Sampled1D capability, and SampledBuffer capability
do not require Shader capability anymore.
v2016.0 2016-07-04
- Adds v<year>.<index> versioning, with "-dev" indicating
work in progress. The intent is to more easly report
and summarize functionality when SPIRV-Tools is incorporated
in downstream projects.
- Summary of functionality (See the README.md for more):
- Supports SPIR-V 1.1 Rev 1
- Supports SPIR-V 1.0 Rev 5
- Supports GLSL std450 extended instructions 1.0 Rev 3
- Supports OpenCL extended instructions 1.0 Rev 2
- Assembler, disassembler are complete
- Supports floating point widths of 16, 32, 64 bits
- Supports integer widths up to 64 bits
- Validator is incomplete
- Checks capability requirements in most cases
- Checks module layout constraints
- Checks ID use-definition ordering constraints,
ignoring control flow
- Checks some control flow graph rules
- Optimizer is introduced, with few available transforms.
- Supported on Linux, OSX, Android, Windows
- Fixes bugs:
- #143: OpenCL pow and pown arguments