Skip to content

spirv-fuzz: Compute corollary facts from OpBitcast#3538

Merged
afd merged 5 commits intoKhronosGroup:masterfrom
Vasniktel:fact_manager_bitcast
Jul 29, 2020
Merged

spirv-fuzz: Compute corollary facts from OpBitcast#3538
afd merged 5 commits intoKhronosGroup:masterfrom
Vasniktel:fact_manager_bitcast

Conversation

@Vasniktel
Copy link
Copy Markdown
Collaborator

Splits #3523 in two parts. This part implements functionality to compute corollary facts from OpBitcast equation facts.

@Vasniktel Vasniktel force-pushed the fact_manager_bitcast branch from 702ec70 to f96e9e4 Compare July 16, 2020 12:03
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.

It was really helpful looking at this smaller PR in isolation - thanks.

I think I now understand what you're doing here. It is more general than what I had envisaged, which is good, but also a lot more complex. I'm unsure whether the complexity is worth it.

I had imagined that if we had the equation a = OpBitCast b, and we later added the equation c = OpBitCast d, we could detect when:

  • a and d have compatible types
  • b and c are synonymous

We could then mark a and d as synonymous.

That would miss out on chains such as:

[a of type T1] --bitcast--> [b of type T2] --bitcast--> [c of type T3] --bitcast--> [d of type T4]

where T1 and T4 are compatible types.

But given that we don't have all that many types of interest I wonder whether maybe we could live with this and avoid the code for maintaining strongly-connected components?

@Vasniktel what do you think?

@paulthomson I would also value your opinion.

@Vasniktel
Copy link
Copy Markdown
Collaborator Author

Vasniktel commented Jul 16, 2020

@afd I tried to derive as many corollary facts in this PR as I could. However, you are right and we indeed don't have that many types so perhaps indeed this complexity is unnecessary.
Nevertheless, I've tried initially to compute corollary facts only for simple cases. I ended up with four different scenarios for a = OpBitcast b and c = OpBitcast d:

  1. b and c are synonymous, a and d are compatible => a and d are synonymous.
  2. a and c are synonymous, b and d are compatible => b and d are synonymous.
  3. b and d are synonymous, a and c are compatible => a and c are synonymous.
  4. a and d are synonymous, b and c are compatible => b and c are synonymous.

In the end, the code was very long and convoluted (I could've probably improved it, though). I think we can implement only one of these cases but I'm worried that we'll miss many interesting synonyms (if there is such a thing as an interesting synonym :).

@Vasniktel
Copy link
Copy Markdown
Collaborator Author

@paulthomson Would be good to know your opinion.

@Vasniktel
Copy link
Copy Markdown
Collaborator Author

Vasniktel commented Jul 17, 2020

I've been thinking about it a little bit more. If we only support 32-bit integers and floats, then the implementation of the first three cases from the list above seems to be enough to compute all synonyms. If we, however, support other bit widths as well, then we can miss some synonyms. @afd, what do you think (do we support other bit widths)?
In case we do support only 32-bit numerics, the issue #3539 can be closed.

@Vasniktel Vasniktel force-pushed the fact_manager_bitcast branch from f96e9e4 to f989f1e Compare July 17, 2020 06:59
@Vasniktel Vasniktel requested a review from afd July 17, 2020 07:00
@Vasniktel Vasniktel force-pushed the fact_manager_bitcast branch from f989f1e to ca9ff10 Compare July 27, 2020 12:58
@Vasniktel Vasniktel marked this pull request as draft July 28, 2020 10:27
@Vasniktel
Copy link
Copy Markdown
Collaborator Author

Merge after #3602.

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 good - very small changes requested.

@Vasniktel Vasniktel requested a review from afd July 29, 2020 16:37
@Vasniktel Vasniktel marked this pull request as ready for review July 29, 2020 16:48
@afd afd merged commit 054f034 into KhronosGroup:master Jul 29, 2020
dnovillo pushed a commit to dnovillo/SPIRV-Tools that referenced this pull request Aug 19, 2020
Splits KhronosGroup#3523 in two parts. This part implements functionality to
compute corollary facts from OpBitcast equation facts.
@Vasniktel Vasniktel deleted the fact_manager_bitcast branch October 16, 2020 09:13
dneto0 pushed a commit to dneto0/SPIRV-Tools that referenced this pull request Sep 14, 2024
Roll third_party/glslang/ 3ee5f2f..b60e067 (8 commits)

KhronosGroup/glslang@3ee5f2f...b60e067

$ git log 3ee5f2f..b60e067 --date=short --no-merges --format='%ad %ae %s'
2020-08-06 john SPV: Fix KhronosGroup#1829: don't emit OpModuleProcessed use-storage-buffer
2020-08-05 john Build/Test: Dropping 2013 allows using the latest googletests.
2020-08-04 john SPV: Standalone; sanity check the client GLSL input semantics option value.
2020-08-04 john SPV: Use more correct SPV-Tools environment, partially addressing KhronosGroup#2290
2020-08-04 john SPV: Fix KhronosGroup#2363: include trailing newline named text SPV output.
2020-07-03 ShabbyX Use GLSLANG_ANGLE to strip features to what ANGLE requires
2020-07-31 bclayton Revert changes that migrate to `thread_local`.
2020-07-27 dneto Avoid spurious warning about uninit var

Created with:
  roll-dep third_party/glslang

Roll third_party/googletest/ a781fe29b..3af06fe16 (12 commits)

google/googletest@a781fe2...3af06fe

$ git log a781fe29b..3af06fe16 --date=short --no-merges --format='%ad %ae %s'
2020-08-05 absl-team Googletest export
2020-08-03 absl-team Googletest export
2020-08-03 absl-team Googletest export
2020-08-05 zumix.cpp fix endif comment
2020-08-02 zumix.cpp fix tests
2020-07-29 franciscogthiesen Removing tiny-dnn from "Who is using.."
2020-07-28 absl-team Googletest export
2020-07-29 zumix.cpp fix GTEST_REMOVE_LEGACY_TEST_CASEAPI_ typo
2020-07-28 absl-team Googletest export
2020-07-26 ofats Googletest export
2020-07-19 jasjuang fix clang tidy modernize-use-equals-default warnings
2020-07-02 siliconearth Fix test failing when simple regex is used

Created with:
  roll-dep third_party/googletest

Roll third_party/spirv-cross/ 0376576d2..82d1c43e4 (7 commits)

KhronosGroup/SPIRV-Cross@0376576...82d1c43

$ git log 0376576d2..82d1c43e4 --date=short --no-merges --format='%ad %ae %s'
2020-08-03 cdavis MSL: Fix handling of matrices and structs in the output control point array.
2020-07-29 post Add some test cases for complex type aliasing scenario.
2020-07-29 post Ensure that we use primary alias type when emitting flattened members.
2020-07-29 post GLSL: Be more aggressive about using type_alias.
2020-07-29 post Only rewrite type aliases for the base type.
2020-07-28 post GLSL: Add option to force flattening IO blocks.
2020-07-23 tommek Adding BuiltInSampleMask in HLSL

Created with:
  roll-dep third_party/spirv-cross

Roll third_party/spirv-headers/ 979924c..3fdabd0 (4 commits)

KhronosGroup/SPIRV-Headers@979924c...3fdabd0

$ git log 979924c..3fdabd0 --date=short --no-merges --format='%ad %ae %s'
2020-08-03 44190824+mmerecki Reserve SPIR-V token range for upcoming Intel extensions. (KhronosGroup#165)
2020-07-29 alanbaker Update BUILD.bazel and BUILD.gn (KhronosGroup#166)
2020-07-29 alanbaker Publish the headers for the clspv embedded reflection non-semantic extended instruction set (KhronosGroup#164)
2020-07-29 johnkslang Update the registry in spir-v.xml to modernize and split out opcodes. (KhronosGroup#156)

Created with:
  roll-dep third_party/spirv-headers

Roll third_party/spirv-tools/ b63f0e5..2990a21 (30 commits)

KhronosGroup/SPIRV-Tools@b63f0e5...2990a21

$ git log b63f0e5..2990a21 --date=short --no-merges --format='%ad %ae %s'
2020-08-10 stevenperron Avoid using /MP4 for clang on windows. (KhronosGroup#3662)
2020-08-06 antonikarp spirv-fuzz: TransformationReplaceAddSubMulWithCarryingExtended (KhronosGroup#3598)
2020-08-06 andreperezmaselco.developer spirv-fuzz: Add TransformationMakeVectorOperationDynamic (KhronosGroup#3597)
2020-08-06 andreperezmaselco.developer spirv-fuzz: iterate over blocks in replace linear algebra pass (KhronosGroup#3654)
2020-08-06 stefanomil spirv-fuzz: make outliner pass use additional transformations (KhronosGroup#3604)
2020-08-05 jaebaek OpenCL.DebugInfo.100 DebugTypeArray with variable size (KhronosGroup#3549)
2020-08-05 andreperezmaselco.developer spirv-opt: Improve the code of the Instruction class (KhronosGroup#3610)
2020-08-05 vasniktel spirv-fuzz: Handle OpPhis in livesafe functions (KhronosGroup#3642)
2020-08-05 vasniktel spirv-fuzz: Handle OpPhi during constant obfuscation (KhronosGroup#3640)
2020-08-05 vasniktel spirv-fuzz: Fix FuzzerPassCopyObjects (KhronosGroup#3638)
2020-08-04 vasniktel spirv-fuzz: Remove OpFunctionCall operands in correct order (KhronosGroup#3630)
2020-08-04 vasniktel spirv-fuzz: Handle capabilities during module donation (KhronosGroup#3651)
2020-08-04 vasniktel spirv-fuzz: Refactor boilerplate in TransformationAddParameter (KhronosGroup#3625)
2020-08-03 vasniktel spirv-fuzz: TransformationMoveInstructionDown (KhronosGroup#3477)
2020-07-31 jaebaek Remove DebugDeclare only for target variables in ssa-rewrite (KhronosGroup#3511)
2020-07-31 vasniktel Fix typo in ASAN CI build (KhronosGroup#3623)
2020-07-30 stefanomil spirv-fuzz: Transformation to add loop preheader (KhronosGroup#3599)
2020-07-30 stefanomil spirv-fuzz: Pass to replace int operands with ints of opposite signedness (KhronosGroup#3612)
2020-07-30 jaebaek Debug info preservation in loop-unroll pass (KhronosGroup#3548)
2020-07-30 alanbaker Validator support for non-semantic clspv reflection (KhronosGroup#3618)
2020-07-30 vasniktel spirv-fuzz: Fix memory bugs (KhronosGroup#3622)
2020-07-29 andreperezmaselco.developer spirv-fuzz: Implement the OpOuterProduct linear algebra case (KhronosGroup#3617)
2020-07-30 vasniktel spirv-fuzz: Compute corollary facts from OpBitcast (KhronosGroup#3538)
2020-07-29 dj2 Update some language usage. (KhronosGroup#3611)
2020-07-29 vasniktel spirv-fuzz: Relax type constraints in DataSynonym facts (KhronosGroup#3602)
2020-07-29 vasniktel spirv-fuzz: Remove non-deterministic behaviour (KhronosGroup#3608)
2020-07-29 afdx Avoid use of 'sanity' and 'sanity check' in the code base (KhronosGroup#3585)
2020-07-27 andreperezmaselco.developer spirv-fuzz: Add condition to make functions livesafe (KhronosGroup#3587)
2020-07-27 rharrison Rolling 4 dependencies (KhronosGroup#3601)
2020-07-27 andreperezmaselco.developer spirv-fuzz: Implement the OpTranspose linear algebra case (KhronosGroup#3589)

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