Proto commits in KhronosGroup/SPIRV-Tools

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:65ecfd1
Author:luzpaz
Committer:GitHub

Fix various source comment (doxygen) typos (#4680) Found via `codespell -q 3 -L fo,lod,parm

The documentation is generated from this commit.

Commit:07f1302
Author:Mostafa Ashraf
Committer:GitHub

spirv-fuzz: Support AtomicStore (#4440) Adds support for atomic operations in TransformationStore and its associated fuzzer pass. Fixes #4337.

Commit:0065c56
Author:Mostafa Ashraf
Committer:GitHub

spirv-fuzz: support AtomicLoad (#4330) Enhances the TransformationLoad transformation and associated fuzzer pass to support atomic operations. Fixes #4324.

Commit:033768c
Author:Shiyu Liu
Committer:GitHub

spirv-fuzz: TransformationWrapVectorSynonym that rewrites scalar operations using vectors (#4376) Adds a new transformation that rewrites a scalar operation (like OpFAdd, opISub) as an equivalent vector operation, adding a synonym between the scalar result and an appropriate component of the vector result. Fixes #4195.

Commit:c1a75bf
Author:EGJ1996
Committer:GitHub

spirv-fuzz: Support bitwise or and xor in TransformationAddBitInstructionSynonym (#4310) Fixes #4172.

Commit:f6b5959
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Respect control flow rules when merging returns (#4279) Fixes #4278. Some minor code cleanup is incorporated.

Commit:6cdf07d
Author:Shiyu Liu
Committer:GitHub

spirv-fuzz: Swap positions of two functions in a module (#4236) Adds a new transformation class that swaps the syntactic position of two functions in the module, and a fuzzer pass to apply it. Fixes #4026.

Commit:8fe39ad
Author:Mostafa Ashraf
Committer:GitHub

spirv-fuzz: Permute the order of variables at function scope issue (#4248) Fixes #4194.

Commit:abe2eff
Author:André Perez
Committer:GitHub

spirv-fuzz: Add expand vector reduction transformation (#3869) The following implementations are introduced: - Transformation and fuzzer pass for expanding vector reduction. - Unit tests to cover the instructions with different vector sizes. Fixes #3768.

Commit:8362eae
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Use component-wise selectors when flattening conditional branches (#3921) Fixes #3920.

Commit:bf1a11d
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Wrap early terminators before merging returns (#3925) Incorporates some other fixes for issues that were brought to light by adding this functionality. Fixes #3717. Fixes #3924.

Commit:2e6cf70
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Fix to transformation that adds a synonym via a loop (#3898) Fixes #3897.

Commit:e022659
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Wrap OpKill and similar in function calls (#3884) Part of #3717.

Commit:fc82648
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Replace dead-block terminators with OpKill etc. (#3882) Fixes #3615.

Commit:63cc22d
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: TransformationPropagateInstructionDown (#3692) Fixes #3691.

Commit:65b2a9e
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Transformation to add wrappers for OpKill and similar (#3881) Part of #3717.

Commit:fc7860e
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Merge the return instructions in a function (#3838) This PR introduces TransformationMergeFunctionReturns, which changes a function so that it only has one reachable return statement. Fixes #3655.

Commit:615fbe6
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: TransformationWrapRegionInSelection (#3674) Fixes #3675.

Commit:fcb22ec
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Report fresh ids in transformations (#3856) Adds a virtual method, GetFreshIds(), to Transformation. Every transformation uses this to indicate which ids in its protobuf message are fresh ids. This means that when replaying a sequence of transformations the replayer can obtain a smallest id that is not in use by the module already and that will not be used by any transformation by necessity. Ids greater than or equal to this id can be used as overflow ids. Fixes #3851.

Commit:fec5614
Author:André Perez
Committer:GitHub

spirv-fuzz: Support OpNot bit instruction case (#3841) This PR implements the OpNot instruction for the add bit instruction synonym transformation. In addition, some code improvements have been made.

Commit:36185f8
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Move IRContext parameter into constructor (#3837) This PR converts IRContext parameter in fact managers into a class field. Part of #3698.

Commit:67525bd
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Create synonym of int constant using a loop (#3790) This transformation, given a constant integer (scalar or vector) C, constants I and S of compatible type and scalar 32-bit integer constant N, such that C = I - S*N, adds a loop which subtracts S from I, N times, creating a synonym for C. The related fuzzer pass randomly chooses constants to which to add synonyms using this transformation, and the location where they should be added. Fixes #3616.

Commit:e8ce435
Author:André Perez
Committer:GitHub

spirv-fuzz: Add bit instruction synonym transformation (#3775) This PR implements part of the add bit instruction synonym transformation. For now, the implementation covers the OpBitwiseOr, OpBitwiseXor and OpBitwiseAnd cases.

Commit:f62357e
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Transformation to flatten conditional branch (#3667) This transformation, given the header of a selection construct with branching instruction OpBranchConditional, flattens it. Side-effecting operations such as OpLoad, OpStore and OpFunctionCall are enclosed within smaller conditionals. It is applicable if the construct does not contain inner selection constructs or loops, or atomic or barrier instructions. The corresponding fuzzer pass looks for selection headers and tries to flatten them. Needed for the issue #3544, but it does not fix it completely.

Commit:244e6c1
Author:Antoni Karpiński
Committer:GitHub

spirv-fuzz: Add TransformationDuplicateRegionWithSelection (#3773) Adds a transformation that inserts a conditional statement with a boolean expression of arbitrary value and duplicates a given single-entry, single-exit region, so that it is present in each conditional branch and will be executed regardless of which branch will be taken. Fixes #3614.

Commit:fd05605
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Transformation to convert OpSelect to conditional branch (#3681) This transformation takes an OpSelect instruction and replaces it with a conditional branch, selecting the correct value using an OpPhi instruction. Fixes part of the issue #3544.

Commit:7884684
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Replace id in OpPhi coming from a dead predecessor (#3744) This transformation takes the id of an OpPhi instruction, of a dead predecessor of the block containing it and a replacement id of available to use and of the same type as the OpPhi, and changes the id in the OpPhi corresponding to the given predecessor. For example, %id = OpPhi %type %v1 %p1 %v2 %p2 becomes %id = OpPhi %type %v3 %p1 %v2 %p2 if the transformation is given %id, %p1 and %v3, %p1 is a dead block, %v3 is type type and it is available to use at the end of %p1. The fuzzer pass randomly decides to apply the transformation to OpPhi instructions for which at least one of the predecessors is dead Fixes #3726.

Commit:3daabd3
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Transformation to replace the use of an irrelevant id (#3697) A transformation that replaces the use of an irrelevant id with another id of the same type. The related fuzzer pass, for every use of an irrelevant id, checks whether the id can be replaced in that use by another id of the same type and randomly decides whether to replace it. Fixes #3503.

Commit:d7f078f
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: TransformationMutatePointer (#3737) Fixes #3624.

Commit:08291a3
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Create synonym via OpPhi and existing synonyms (#3701) A transformation that adds new OpPhi instructions to blocks with >=1 predecessors, so that its value depends on previously-defined ids of the right type, which are all synonymous. This instruction is also recorded as synonymous to the others. The related fuzzer pass still needs to be implemented. Fixes #3592 .

Commit:5adc5ae
Author:André Perez
Committer:GitHub

spirv-fuzz: Add inline function transformation (#3517) Fixes #3505.

Commit:a711c59
Author:Antoni Karpiński
Committer:GitHub

spirv-fuzz: add FuzzerPassAddCompositeInserts (#3606) Adds FuzzerPassAddCompositeInserts, which randomly adds new OpCompositeInsert instructions. Each OpCompositeInsert instruction yields a copy of an original composite with one subcomponent replaced with an existing or newly added object. Synonym facts are added for the unchanged components in the original and added composite, and for the replaced subcomponent and the object, if possible. Fixes #2859

Commit:582c276
Author:Antoni Karpiński
Committer:GitHub

spirv-fuzz: Support pointer types in FuzzerPassAddParameters (#3627) For FuzzerPassAddParameters, adds pointer types (that have the storage class Function or Private) to the pool of available types for new parameters. If there are no variables of the chosen pointer type, it invokes TransformationAddLocalVariable / TransformationAddGlobalVariable to add one. Part of #3403

Commit:b7056e7
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: FuzzerPassPropagateInstructionsUp (#3478) Given an instruction (that may use an OpPhi result from the same block as an input operand), try to clone the instruction into each predecessor block, replacing the input operand with the corresponding OpPhi input operand in each case, if necessary. Fixes #3458.

Commit:7b2dd11
Author:Antoni Karpiński
Committer:GitHub

spirv-fuzz: TransformationReplaceAddSubMulWithCarryingExtended (#3598) Replaces OpIAdd with OpIAddCarry, OpISub with OpISubBorrow, OpIMul with OpUMulExtended or OpSMulExtended and stores the result into a fresh_id representing a structure. Extracts the first element of the result into the original result_id. This value is the same as the result of the original instruction. Fixes #3577

Commit:6d7f34f
Author:André Perez
Committer:GitHub

spirv-fuzz: Add TransformationMakeVectorOperationDynamic (#3597) Fixes #3588.

Commit:92a7165
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: TransformationMoveInstructionDown (#3477) Swaps an instruction with the next instruction in the block. Fixes #3457.

Commit:2aaa865
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Transformation to add loop preheader (#3599) This PR introduces TransformationAddLoopPreheader, which, given a loop header and enough fresh ids, adds a loop preheader, updating all the references so that this new block is the only out-of-loop predecessor of the header, which branches unconditionally to the header. See the discussion in #3095.

Commit:c6e6597
Author:André Perez
Committer:GitHub

spirv-fuzz: Implement the OpOuterProduct linear algebra case (#3617) Fixes #3354.

Commit:7e75fea
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Remove non-deterministic behaviour (#3608) Fixes #3607.

Commit:1dfc6fc
Author:André Perez
Committer:GitHub

spirv-fuzz: Implement the OpTranspose linear algebra case (#3589) This PR implements the OpTranspose case for the replace linear algebra instruction transformation.

Commit:8a55006
Author:Antoni Karpiński
Committer:GitHub

spirv-fuzz: adds TransformationReplaceLoadStoreWithCopyMemory (#3586) Adds a transformation that takes a pair of instruction descriptors to OpLoad and OpStore that have the same intermediate value and replaces the OpStore with an equivalent OpCopyMemory. Fixes #3353.

Commit:f8920bc
Author:Stefano Milizia
Committer:GitHub

spirv-fuzz: Generalise transformation access chain (#3546) This PR generalises TransformationAddAccessChain so that dynamic indices for non-struct composites (with clamping to ensure that accesses are in-bound) are allowed. The transformation will add instructions to clamp any index to a non-struct composite, regardless of whether it is a constant or not. Fixes #3179.

Commit:9dc1bfa
Author:Antoni Karpiński
Committer:GitHub

spirv-fuzz: adds TransformationReplaceCopyMemoryWithLoadStore (#3575) Adds a transformation that replaces instruction OpCopyMemory with loading the source variable to an intermediate value and storing this value into the target variable of the original OpCopyMemory instruction. Fixes #3352

Commit:586a12b
Author:Antoni Karpiński
Committer:GitHub

spirv-fuzz: adds TransformationReplaceCopyObjectWithStoreLoad (#3567) Adds a transformation that replaces instruction OpCopyObject with storing into a new variable and immediately loading this variable to |result_id| of the original OpCopyObject instruction. Fixes #3351.

Commit:fe9e5db
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: TransformationReplaceParamsWithStruct (#3455) Fixes #3453.

Commit:a3b0adc
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Add is_irrelevant parameter (#3563) Part of #3177. Adjusts functions to create constants.

Commit:8b5ed44
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Add IdIsIrrelevant fact (#3561) Part of #3177. This PR adds a fact to the fact manager.

Commit:0d8fe0f
Author:Antoni Karpiński
Committer:GitHub

spirv-fuzz: add TransformationAddRelaxedDecoration (#3545) Add TransformationAddRelaxedDecoration, which adds the RelaxedPrecision decoration to ids of numeric instructions (those yielding 32-bit ints or floats) in dead blocks. Fixes #3502

Commit:2fa735d
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Remove TransformationCopyObject (#3531) Fixes #3509.

Commit:91d921e
Author:André Perez
Committer:GitHub

spirv-fuzz: Implement the OpMatrixTimesMatrix linear algebra case (#3527) This PR implements the OpMatrixTimesMatrix case for the replace linear algebra instruction transformation.

Commit:40c3c1c
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: TransformationAddSynonyms (#3447) Part of #3440.

Commit:5f8cdd8
Author:Stefano Milizia
Committer:GitHub

Implement transformation to record synonymous constants. (#3494) Adds a fact-only transformation that records that two constants in the module are synonymous.

Commit:de56c34
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: TransformationReplaceParameterWithGlobal (#3434) Fixes #3432.

Commit:11946e6
Author:André Perez
Committer:GitHub

Implement the OpMatrixTimesVector linear algebra case (#3500) This PR implements the OpMatrixTimesVector case for the replace linear algebra instruction transformation.

Commit:daa3b47
Author:André Perez
Committer:GitHub

spirv-fuzz: Add image sample unused components transformation (#3439) Fixes #3375.

Commit:2fbeb04
Author:André Perez
Committer:GitHub

spirv-fuzz: Implement the OpVectorTimesMatrix linear algebra case (#3489) This PR implements the OpVectorTimesMatrix case for the replace linear algebra instruction transformation.

Commit:bd2a9ea
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: TransformationInvertComparisonOperator (#3475) Part of #3440.

Commit:fba90d6
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Add FuzzerPassAddCopyMemoryInstructions (#3391) Fixes #3382.

Commit:ab10489
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Add one parameter at a time (#3469) Fixes #3467. Fixes #3468.

Commit:c3680ad
Author:André Perez
Committer:GitHub

Implement the OpMatrixTimesScalar linear algebra case (#3450) This PR implements the OpMatrixTimesScalar case for the replace linear algebra instruction transformation.

Commit:29ba53f
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Implement FuzzerPassAddParameters (#3399) Fixes #3384.

Commit:8e586e4
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Permute OpPhi instruction operands (#3421) Fixes #3415.

Commit:33cf7c4
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Refactor variable creation (#3414) Fixes #3413.

Commit:d5306c8
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Swap operands in OpBranchConditional (#3423) Fixes #3415.

Commit:12a4fb3
Author:André Perez
Committer:GitHub

spirv-fuzz: Add replace linear algebra instruction transformation (#3402) This PR implements a transformation that replaces a linear algebra instruction with its mathematical definition.

Commit:c01f826
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Add support for OpSpecConstant* (#3373) Fixes #3371.

Commit:f050cca
Author:André Perez
Committer:GitHub

spirv-fuzz: Add push id through variable transformation (#3359) Makes an id synonym by storing an id to a new variable and then loading it back from that variable. Fixes #3192.

Commit:a6b0e13
Author:André Perez
Committer:GitHub

Add adjust branch weights transformation (#3336) In this PR, the classes that represent the adjust branch weights transformation and fuzzer pass were implemented. This transformation adjusts the branch weights of a OpBranchConditional instruction.

Commit:67f4838
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Make handling of synonym facts more efficient (#3301) The fact manager maintains an equivalence relation on data descriptors that tracks when one data descriptor could be used in place of another. An algorithm to compute the closure of such facts allows deducing new synonym facts from existing facts. E.g., for two 2D vectors u and v it is known that u.x is synonymous with v.x and u.y is synonymous with v.y, it can be deduced that u and v are synonymous. The closure computation algorithm is very expensive if we get large equivalence relations. This change addresses this in three ways: - The size of equivalence relations is reduced by limiting the extent to which the components of a composite are recursively noted as being equivalent, so that when we have large synonymous arrays we do not record all array elements as being pairwise equivalent. - When computing the closure of facts, equivalence classes above a certain size are simply skipped (which can lead to missed facts) - The closure computation is performed less frequently - it is invoked explicitly before fuzzer passes that will benefit from data synonym facts. A new transformation is used to control its invocation, so that fuzzing and replaying do not get out of sync. The change also tidies up the order in which some getters are declared in FuzzerContext.

Commit:4af38c4
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Improve support for compute shaders in donation (#3277) (1) Runtime arrays are turned into fixed-size arrays, by turning OpTypeRuntimeArray into OpTypeArray and uses of OpArrayLength into uses of the constant used for the length of the fixed-size array. (2) Atomic instructions are not donated, and uses of their results are replaced with uses of constants of the result type.

Commit:e95fbfb
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Transformation to add OpConstantNull (#3273) Adds a transformation for adding OpConstantNull to a module, for appropriate data types.

Commit:4c02704
Author:André Perez Maselco
Committer:GitHub

spirv-fuzz: Add toggle access chain instruction transformation (#3211) In this PR, the classes that represent the toggle access chain instruction transformation and fuzzer pass were implemented. This transformation toggles the instructions OpAccessChain and OpInBoundsAccessChain between them. Fixes #3193.

Commit:533af49
Author:Vasyl Teliman
Committer:GitHub

spirv-fuzz: Add fuzzer pass to permute function parameters (#3212) Fixes #3194.

Commit:66a682b
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Add swap commutable operands transformation (#3205) In this PR, the classes that represent the swap commutable operands transformation and the fuzzer pass were implemented. Fixes #3205.

Commit:044ecc0
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Fuzzer pass to add equation instructions (#3202) This introduces a new fuzzer pass to add instructions to the module that define equations, and support in the fact manager for recording equation facts and deducing synonym facts from equation facts. Initially the only equations that are supported involve OpIAdd, OpISub, OpSNegate and OpLogicalNot, but there is scope for adding support for equations over various other operators.

Commit:6c218ec
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Fuzzer pass that adds access chains (#3182) This change adds a fuzzer pass that sprinkles access chain instructions into a module at random. This allows other passes to have a richer set of pointers available to them, in particular the passes that add loads and stores.

Commit:77fb303
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Fuzzer pass to add function calls (#3178) Adds a fuzzer pass that inserts function calls into the module at random. Calls from dead blocks can be arbitrary (so long as they do not introduce recursion), while calls from other blocks can only be to livesafe functions. The change fixes some oversights in transformations to replace constants with uniforms and to obfuscate constants which testing of this fuzzer pass identified.

Commit:3d4a0dd
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Ensure that donated variables are always initialized (#3181) This change ensures that global and local variables donated from other modules are always initialized at their declaration in the module being transformed. This is to help limit issues related to undefined behaviour that might arise due to accessing uninitialized memory. The change also introduces some helper functions in fuzzer_util to make it easier to find the pointee types of pointer types.

Commit:fe10239
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Add fuzzer passes to add loads/stores (#3176) This change adds fuzzer passes that sprinkle loads and stores into a module at random, with stores restricted to occur in either dead blocks, or to use pointers for which it is known that the pointee value does not influence the module's overall behaviour. The change also generalises the VariableValueIsArbitrary fact to PointeeValueIsIrrelevant, to allow stores through access chains or object copies of variables whose values are known to be irrelevant. The change includes some other minor refactorings.

Commit:1f03ac1
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Fuzzer passes to add local and global variables (#3175) Adds two new fuzzer passes to add variables to a module: one that adds Private storage class global variables, another that adds Function storage class local variables.

Commit:1fc7a9e
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Arbitrary variable facts (#3165) This change adds a new kind of fact to the fact manager, which records when a variable (or pointer parameter) refers to an arbitrary value, so that anything can be stored to it, without affecting the observable behaviour of the module, and nothing can be guaranteed about values loaded from it. Donated modules are the current source of such variables, and other transformations, such as outlining, have been adapted to propagate these facts appropriately.

Commit:521223b
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Make functions "livesafe" during donation (#3146) This change allows the generator to (optionally and at random) make the functions of a module "livesafe" during donation. This involves introducing a loop limiter variable to each function and gating the number of total loop iterations for the function using that variable. It also involves eliminating OpKill and OpUnreachable instructions (changing them to OpReturn/OpReturnValue), and clamping access chain indices so that they are always in-bounds.

Commit:8013d47
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: add dead blocks (#3135) This adds a new kind of fact to the fact manager that knows whether a block is dead - i.e. guaranteed to be statically unreachable - and a new transformation for adding a selection construct to a CFG that conditionally branches to a fresh, dead block, such that the branch will never be dynamically taken. Transformations that may create new blocks ('split block' and 'outline function') are updated to propagate dead block facts to newly-created blocks where appropriate. A fuzzer pass randomly adds dead blocks to the module. Future transformations will be able to exploit the fact that such blocks are known to be dead.

Commit:dcb7169
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Transformation to add a new function to a module (#3114) This adds a large transformation that can add a new function to a SPIR-V module. This paves the way for donation of code from one module to another.

Commit:38d7fba
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Transformations to add types, constants and variables (#3101) This change adds several transformations that allow types, constants, undefined values and global variables to be added to a module.

Commit:96354f5
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Fuzzer pass to merge blocks (#3097) This change adds a transformation and associated fuzzer pass for merging adjacent blocks in a module, re-using block merging code from the optimizer.

Commit:0a2b38d
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: function outlining fuzzer pass (#3078) A new transformation and associated fuzzer pass in spirv-fuzz that selects single-entry single-exit control flow graph regions and for each selected region outlines the region into a new function and replaces the original region with a call to this function.

Commit:041f0a0
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: simplify transformation for replacing an id with a synonym (#3020) Prior to this change, TransformationReplaceIdWithSynonym was designed to be able to replace an id with some synonymous data descriptor, possibly necessitating extracting from a composite into a fresh id in order to get at the synonymous data. This change simplifies things so that TransformationReplaceIdWithSynonym just allows one id to be replaced by another id. It is the responsibility of the associated fuzzer pass - FuzzerPassApplyIdSynonyms - to perform the extraction operations, using e.g. TransformationCompositeExtract.

Commit:dc59b4b
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: vector shuffle transformation (#3015) Inroduces a new transformation that adds a vector shuffle instruction to the module, with associated facts about how the result vector of the shuffle relates to the input vectors. A fuzzer pass to add such transformations is not yet in place.

Commit:f1e5cd7
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: improvements to representation of data synonym facts (#3006) This change fixes a bug in EquivalenceRelation, changes the interface of EquivalenceRelation to avoid exposing (potentially nondeterministic) unordered sets, and changes the interface of FactManager to allow querying data synonyms directly. These interface changes have required a lot of corresponding changes to client code and tests.

Commit:fac1661
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Transformation to extract from a composite object (#2991) At present, TransformationReplaceIdWithSynonym both extracts elements from composite objects and replaces uses of ids with synonyms. This new TransformationCompositeExtract class will allow that transformation to be broken into smaller transformations.

Commit:ec12de9
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: rename class, and fix bug related to dominance (#2990) Class TransformationConstructComposite has been renamed to TransformationCompositeConstruct, to correspond to the name of the SPIR-V instruction (as is done with e.g. TransformationCopyObject). Running tests revealed an issue related to checking dominance in TransformationReplaceIdWithSynonym, which is also fixed here.

Commit:0dbd4e3
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Rework management of data synonyms (#2989) This change uses the recently-added equivalence relation class to re-work the way synonyms between data values are managed by the fact manager. The tests for 'transformation_replace_id_with_synonym' have been temporarily removed. This is because those tests are going to be split into a number of test classes in an upcoming PR, once some other refactorings have been applied, and it would be burdensome to temporarily refactor all the tests to be in a working state for this intermediate change.

Commit:570582d
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: fuzzer pass to adjust memory access operands (#2968) A new pass that gives spirv-fuzz the ability to adjust the memory operand masks associated with memory access instructions (such as OpLoad and OpCopy Memory). Fixes #2940.

Commit:00170cc
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Refactor 'copy object' and 'construct composite' transformations (#2966) Rework these transformations to identify instructions via (base, opcode, skip-count) triples, rather than (base, offset) pairs.

Commit:1b6fd37
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Refactor 'split blocks' to identify instructions differently (#2961) This change refactors the 'split blocks' transformation so that an instruction is identified via a base, opcode, and number of those opcodes to be skipped when searching from the base, as opposed to the previous design which used a base and offset.

Commit:3eda1b9
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Rework id descriptors (#2959) A refactoring that separates the identification of an instruction from the identification of a use in an instruction, to enable the former to be used independently of the latter.

Commit:eba98c4
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Add fuzzer pass to add NoContraction decorations (#2950) A new pass that allows the fuzzer to add NoContraction decorations to arithmetic instructions. Fixes #2936.

Commit:91232f7
Author:Alastair Donaldson
Committer:GitHub

spirv-fuzz: Add fuzzer pass to change function controls (#2951) A new pass that allows the fuzzer to change the 'function control' operand of OpFunction instructions. Fixes #2939.