mirror of
https://github.com/KhronosGroup/SPIRV-Tools
synced 2024-12-25 17:21:06 +00:00
8ba68fa9b9
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.
256 lines
11 KiB
Plaintext
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
|