Skip to content

spirv-fuzz: Fuzzer pass to interchange zero-like constants#3524

Merged
afd merged 6 commits intoKhronosGroup:masterfrom
stefanomil:fuzzer-pass-interchange-zero-like-constants
Jul 15, 2020
Merged

spirv-fuzz: Fuzzer pass to interchange zero-like constants#3524
afd merged 6 commits intoKhronosGroup:masterfrom
stefanomil:fuzzer-pass-interchange-zero-like-constants

Conversation

@stefanomil
Copy link
Copy Markdown
Collaborator

@stefanomil stefanomil commented Jul 13, 2020

This fuzzer pass:

  • For each zero-like constant, either finds the existing definition of the corresponding toggled one (OpConstantNull becomes zero-valued scalar OpConstant or vice versa) or creates a new one if it doesn't exist and records that the two are synonyms
  • For each use of these constants, probabilistically decides whether to change it with the corresponding toggled constant id

(as described in #3486 )

Only uses inside blocks of instructions are considered and not, for example, in instructions declaring other constants.

Copy link
Copy Markdown
Contributor

@afd afd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good! Some changes requested.

if (!constant->IsZero()) {
return 0;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there's actually nothing harder about making this work for composite constants (matrices, structs, etc.) directly.

I suggest you thus change this to:

if (null constant) {
  // find or create the non-null zero of the right type
} else {
  // find or create the null zero of the right type
}

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I will also need to change TransformationRecordSynonymousConstants (and add related tests) for this. Is this a small enough change to do it in this PR or is it better to open another one once this is done?

…id duplication; apply transformation directly when checking if it is applicable before.
@stefanomil stefanomil requested a review from afd July 15, 2020 07:11
Copy link
Copy Markdown
Contributor

@afd afd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great - thanks for this contribution!

@afd afd added the kokoro:run label Jul 15, 2020
@afd afd merged commit f12c40f into KhronosGroup:master Jul 15, 2020
antonikarp pushed a commit to antonikarp/SPIRV-Tools that referenced this pull request Jul 16, 2020
…oup#3524)

This fuzzer pass:

For each zero-like constant, either finds the existing definition of
the corresponding toggled one (OpConstantNull becomes zero-valued
scalar OpConstant or vice versa) or creates a new one if it doesn't
exist and records that the two are synonyms

For each use of these constants, probabilistically decides whether to
change it with the corresponding toggled constant id (as described in
KhronosGroup#3486 )

Only uses inside blocks of instructions are considered and not, for
example, in instructions declaring other constants.
dnovillo pushed a commit to dnovillo/SPIRV-Tools that referenced this pull request Aug 19, 2020
…oup#3524)

This fuzzer pass:

For each zero-like constant, either finds the existing definition of
the corresponding toggled one (OpConstantNull becomes zero-valued
scalar OpConstant or vice versa) or creates a new one if it doesn't
exist and records that the two are synonyms

For each use of these constants, probabilistically decides whether to
change it with the corresponding toggled constant id (as described in
KhronosGroup#3486 )

Only uses inside blocks of instructions are considered and not, for
example, in instructions declaring other constants.
dneto0 pushed a commit to dneto0/SPIRV-Tools that referenced this pull request Sep 14, 2024
Roll third_party/glslang/ b481744..9eef54b (4 commits)

KhronosGroup/glslang@b481744...9eef54b

$ git log b481744..9eef54b --date=short --no-merges --format='%ad %ae %s'
2020-07-17 bclayton Update license-checker.cfg with simplified rules
2020-07-17 bclayton Add new rules for update of license-checker
2020-07-15 cepheus GLSL/SPV: Propagaet precision qualifier from function to return value.
2020-07-14 bclayton runtests: Check error codes, set LD_LIBRARY_PATH

Created with:
  roll-dep third_party/glslang

Roll third_party/googletest/ 70b90929b..a781fe29b (3 commits)

google/googletest@70b9092...a781fe2

$ git log 70b90929b..a781fe29b --date=short --no-merges --format='%ad %ae %s'
2020-07-13 ofats Googletest export
2020-07-11 ashikpaul17 Fixed some minor typos
2020-06-19 amatanhead Make EXPECT_THROW and EXPECT_NO_THROW macros more informative

Created with:
  roll-dep third_party/googletest

Roll third_party/re2/ fe8a81adc..ca11026a0 (1 commit)

google/re2@fe8a81a...ca11026

$ git log fe8a81adc..ca11026a0 --date=short --no-merges --format='%ad %ae %s'
2020-07-14 junyer Make Regexp::Simplify() return a null pointer when stopped early.

Created with:
  roll-dep third_party/re2

Roll third_party/spirv-headers/ 308bd07..7f2ae11 (1 commit)

KhronosGroup/SPIRV-Headers@308bd07...7f2ae11

$ git log 308bd07..7f2ae11 --date=short --no-merges --format='%ad %ae %s'
2020-07-19 vkushwaha Add changes for SPV_EXT_shader_atomic_float

Created with:
  roll-dep third_party/spirv-headers

Roll third_party/spirv-tools/ c9b254d..c10d6ce (19 commits)

KhronosGroup/SPIRV-Tools@c9b254d...c10d6ce

$ git log c9b254d..c10d6ce --date=short --no-merges --format='%ad %ae %s'
2020-07-20 stefanomil spirv-fuzz: refactor to use RemoveAtRandomIndex (KhronosGroup#3560)
2020-07-20 antonikarp spirv-fuzz: add TransformationAddRelaxedDecoration (KhronosGroup#3545)
2020-07-17 alanbaker Store location values sparsely (KhronosGroup#3488)
2020-07-17 dneto Permit Simple and GLSL450 memory model in WEBGPU_0 (KhronosGroup#3463)
2020-07-17 antonikarp spirv-fuzz: support floating-point in TransformationInvertComparisonOperator (KhronosGroup#3551)
2020-07-17 stefanomil Change MaybeApplyTransformation to return a boolean (KhronosGroup#3555)
2020-07-17 stefanomil spirv-fuzz: Implement MaybeApplyTransformation helper function (KhronosGroup#3540)
2020-07-17 stefanomil spirv-fuzz: Assert false in IsApplicable method of TransformationAccessChain (KhronosGroup#3528)
2020-07-16 vasniktel spirv-fuzz: Add support for OpBitcast to TransformationEquationInstruction (KhronosGroup#3523)
2020-07-16 vasniktel spirv-fuzz: Add support for OpConvert to TransformationEquationInstruction (KhronosGroup#3472)
2020-07-15 alanbaker Fix reachability in the validator (KhronosGroup#3541)
2020-07-15 vasniktel spirv-fuzz: Remove TransformationCopyObject (KhronosGroup#3531)
2020-07-15 vasniktel spirv-opt: Add support for OpLabel to dominator analysis (KhronosGroup#3516)
2020-07-15 stefanomil spirv-fuzz: Fuzzer pass to interchange zero-like constants (KhronosGroup#3524)
2020-07-15 afdx spirv-fuzz: Add replay range option (KhronosGroup#3535)
2020-07-14 jaebaek Rewrite KillDebugDeclares() (KhronosGroup#3513)
2020-07-14 andreperezmaselco.developer spirv-fuzz: Fix instruction insertion issue (KhronosGroup#3521)
2020-07-14 andreperezmaselco.developer spirv-fuzz: Implement the OpMatrixTimesMatrix linear algebra case (KhronosGroup#3527)
2020-07-14 greg Add support to GPU-AV instrumentation for Task and Mesh shaders (KhronosGroup#3512)

Created with:
  roll-dep third_party/spirv-tools
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants