Commit Graph

1142 Commits

Author SHA1 Message Date
GregF
c6fdf68c2f SingleStore: Support OpVariable Initialization
Treat an OpVariable with initialization as if it was an OpStore.
This fixes issue #1017.
2017-12-08 16:02:14 -05:00
Steven Perron
a05ad01e73 Add option to spirv-opt to skip the validator.
The option --skip-validation is added.  When used it will skip the
validation step.

Also rearranged the help text to fix two options that are out of order.
2017-12-08 15:05:41 -05:00
Diego Novillo
241dcacc04 Add a new constant manager class.
This patch adds a new constant manager class to interface with
analysis::Constant.  The new constant manager lives in ir::IRContext
together with the type manager (analysis::TypeManager).

The new analysis::ConstantManager is used by the spec constant folder
and the constant propagator (in progress).

Another cleanup introduced by this patch removes the ID management from
the fold spec constant pass, and ir::IRContext and moves it to
ir::Module. SSA IDs were maintained by IRContext and Module.  That's
pointless and leads to mismatch IDs. Fixed by moving all the bookkeeping
to ir::Module.
2017-12-08 14:14:55 -05:00
Steven Perron
5d602abd66 Add global redundancy elimination
Adds a pass that looks for redundant instruction in a function, and
removes them.  The algorithm is a hash table based value numbering
algorithm that traverses the dominator tree.

This pass removes completely redundant instructions, not partially
redundant ones.
2017-12-07 18:35:38 -05:00
Steven Perron
851e1ad985 Kill names and decoration in inlining.
Currently when inlining a call, the name and decorations for the result of the
call is not deleted.  This should be changed.  Added a test for this as well.

This fixes issue #622.
2017-12-07 12:20:45 -05:00
Victor Lomuller
731d1899b1 Add depth first iterator for trees
- Add generic depth first iterator
 - Update the dominator tree to use this iterator instead of "randomly"
   iterate over the nodes
2017-12-07 10:07:56 -05:00
Diego Novillo
0c2396d20f Revert extraneous changes from commit 8ec62deb2.
Commit 8ec62deb2 merged the code from PR #810, but it also re-introduces
code that had been removed in #885.

This patch removes the (now superfluous code).
2017-12-06 16:04:47 -05:00
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
Diego Novillo
692a22c5bc Sort flags in help message - NFC.
It's slightly easier to read flags from --help if they're sorted.
2017-12-05 16:26:43 -05:00
Lei Zhang
b93c066b0b CMake: allow both SPIRV-Headers and spirv-headers
Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/1057
2017-12-05 14:41:31 -05:00
Andrey Tuganov
94e3e7b8ef Add composite instruction validation pass
Validates instructions in the opcode range from OpVectorExtractDynamic
to OpTranspose.
2017-12-05 10:15:51 -05:00
Lei Zhang
3b6c4f159c Do not zip and deploy for check formatting 2017-12-05 08:02:33 -05:00
Lei Zhang
adb939656d Go back to root directory 2017-12-05 08:02:33 -05:00
Lei Zhang
235ef34571 Travis CI: add clang-format check
Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/1029
2017-12-05 08:02:33 -05:00
Diego Novillo
1af6c4ad28 Update .appveyor.yml 2017-12-04 22:39:14 -05:00
Andrey Tuganov
bf184310b2 Fix some of the known issues in image validation
Applied some of the spec clarifications made in conversation with
@johnkslang.
2017-12-04 18:57:34 -05:00
Steven Perron
fd3a22042b DCEInst kill the same instruction twice.
In DCEInst, it is possible that the same instruction ends up in the
queue multiple times, if the same id is used multiple times in the
same instruction.

The solution is to keep the ids in a set, to ensure no duplication in
the list.
2017-12-04 18:15:35 -05:00
Diego Novillo
726573a0e5 Change Release builds to Release with debug info on Linux
For Linux builds, we want to add debug information on the generated binary (for timing and profiling purposes).  This patch changes Release builds to RelWithDebInfo.
2017-12-04 16:44:09 -05:00
Diego Novillo
e9ecc0cbfd Remove cfg_ field from SSAPropagator class - NFC.
When I moved the CFG into IRContext
(https://github.com/KhronosGroup/SPIRV-Tools/pull/1019), I forgot to
update SSAPropagator to stop requiring one.

Fixed with this patch.
2017-12-04 15:28:21 -05:00
Steven Perron
65046eca7c Change IRContext::KillInst to delete instructions.
The current method of removing an instruction is to call ToNop.  The
problem with this is that it leaves around an instruction that later
passes will look at.  We should just delete the instruction.

In MemPass there is a utility routine called DCEInst.  It can delete
essentially any instruction, which can invalidate pointers now that they
are actually deleted.  The interface was changed to add a call back that
can be used to update any local data structures that contain
ir::Intruction*.
2017-12-04 11:07:45 -05:00
Steven Perron
b35b52f97b Compute value number when the value table is constructed.
Computing the value numbers on demand, as we do now, can lead to
different results depending on the order in which the users asks for
the value numbers.  To make things more stable, we compute them ahead
of time.
2017-12-04 11:02:04 -05:00
Daan Wendelen
b98254b282 Fixed typo that leaked to the binary
The typo was found by lintian when I was packaging glslang
2017-12-03 20:42:14 -05:00
Diego Novillo
9996173f36 Add simplified instructions for pushing a reviewed PR. 2017-12-01 18:15:57 -05:00
Lei Zhang
22582fafa4 Travis: mark MacOS builds as optional
MacOS support in Travis is flakey right now. MacOS build jobs
take a long time to start.

We have extensive checks for Linux and Windows, which should give
us confidence.
2017-12-01 13:11:16 -05:00
Diego Novillo
2885c65daf Re-format CONTRIBUTING.md - NFC.
I'm about to change this file.  I re-formatted it for easier editing.
2017-12-01 12:17:47 -05:00
Lei Zhang
0dd4ee27b1 Fix Dref type check in validator
Dref should be of 32-bit scalar floating type.

Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/1012
2017-12-01 10:17:45 -05:00
Lei Zhang
b8aeab82ea Appveyor: use ninja instead of MSBuild 2017-12-01 10:15:05 -05:00
Pierre Moreau
69043963e4 Opt: Remove unused lambda captures
Those are reported as errors by clang 5.0.0, due to the flags -Werror
and -Wunused-lambda-capture.
2017-12-01 09:54:37 -05:00
Lei Zhang
137953538a Support outputting ANSI color escape sequences in library
Previously we required _PRINT to enable _COLOR, which forbids
outputting colored disassembly into a string in library.

This commit will allow library users to request enabling
ANSI color escape sequences.
2017-12-01 09:03:35 -05:00
David Neto
188cd3780d Erase decorations removed from internal collections
Fixes Android arm-64-v8a build with NDK r14.  That's because
we no longer ignore the result of the std::remove.
2017-11-30 11:35:02 -05:00
David Neto
3c2e4c7d99 Fix validation of group ops in SPV_AMD_shader_ballot
This needs custom code since the rules from the extension
are not encoded in the grammar.

Changes are:
- The new group instructions don't require Group capability
  when the extension is declared.
- The Reduce, InclusiveScan, ExclusiveScan normally require the Kernel
  capability, but don't when the extension is declared.

Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/991
2017-11-30 10:26:04 -05:00
Diego Novillo
8cfa0c40e0 Fix #1034 - Give Edge::operator<() weak ordering semantics.
This should fix #1034.  It changes the predicate on operator< to use
label IDs from each block and compares them as std:pair to define a weak
ordering for std::set.
2017-11-29 17:29:17 -05:00
Andrey Tuganov
e1ceff9f54 Validate OpTypeImage and OpTypeSampleImage
Added new validation rules to the validate image pass.
2017-11-29 13:21:04 -05:00
Daniel Schürmann
4c58086c56 Linker: Fix incorrect exit status. 2017-11-29 11:20:36 -05:00
Steven Perron
d78e11ccef Create CONTRIBUTING.md
This is intended to be a document that people who want to help the project
can get a quick overview of how things are done.  Please comment and suggest
any changes.
2017-11-29 11:17:31 -05:00
GregF
8dd3d93cf6 AggressiveDCE: Add merge and continue branches for live loop.
This ensures that an if-break is not eliminated from a loop.

This fixes issue #989
2017-11-29 09:56:21 -05:00
Lei Zhang
5f2589fd12 Update README about the automatic master-tot relase 2017-11-28 15:58:27 -05:00
Diego Novillo
9f20799fb4 Convert the CFG to an on-demand analysis - NFC.
This fixes some TODOs by moving the CFG into the IRContext as an
analysis.
2017-11-28 13:25:41 -05:00
Diego Novillo
8ffed974ac Fix windows build. unsigned vs signed comparison in EXPECT_EQ. 2017-11-28 09:13:42 -05:00
Diego Novillo
74327845aa Generic value propagation engine.
This class implements a generic value propagation algorithm based on the
conditional constant propagation algorithm proposed in

     Constant propagation with conditional branches,
     Wegman and Zadeck, ACM TOPLAS 13(2):181-210.

The implementation is based on

     A Propagation Engine for GCC
     Diego Novillo, GCC Summit 2005
     http://ols.fedoraproject.org/GCC/Reprints-2005/novillo-Reprint.pdf

The purpose of this implementation is to act as a common framework for any
transformation that needs to propagate values from statements producing new
values to statements using those values.
2017-11-27 23:32:06 -05:00
Diego Novillo
491b112fd2 Fix windows build.
This fixes the lack of uint32_t definition in source/val/decoration.h.
2017-11-27 14:40:03 -05:00
Diego Novillo
83228137e1 Re-format source tree - NFC.
Re-formatted the source tree with the command:

$ /usr/bin/clang-format -style=file -i \
    $(find include source tools test utils -name '*.cpp' -or -name '*.h')

This required a fix to source/val/decoration.h.  It was not including
spirv.h, which broke builds when the #include headers were re-ordered by
clang-format.
2017-11-27 14:31:49 -05:00
Andrey Tuganov
d8b2013ecf Derivative opcodes require Fragment exec model
Added validator check that all derivative opcodes require Fragment
execution model.
2017-11-27 12:05:25 -05:00
Andrey Tuganov
c170afd93b Relaxed OpImageWrite texel type check 2017-11-24 14:31:08 -05:00
David Neto
e1a6f8d1c3 Update CHANGES to mention fixes for 1007 and 1009 2017-11-24 10:17:13 -05:00
Andrey Tuganov
f84f266977 Relaxed OpImageRead validation rules
Removed the check that result type of OpImageRead should be a vector4.
Will reenable/adapt once the spec is clarified on what the right
dimension should be.
2017-11-24 10:12:24 -05:00
Alan Baker
0cae89e79e Notify the context of instructions that are being erased.
Fixes use-after-free error in RemoveDuplicatesPass

Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/1004
2017-11-23 23:43:25 -05:00
Andrey Tuganov
3e08a3f718 Add validation checks for Execution Model
Currently checks that these instructions are called from entry points
with Fragment execution model.
OpImageImplicit*
OpImageQueryLod
OpKill
2017-11-23 23:38:03 -05:00
David Neto
d9129f00a5 Test for pollution of the global namespace
Works on Linux only for now.  That's a good start.

Move ValidateBinaryUsingContextAndValidationState into anonymous
namespace in source/validate.cpp.
2017-11-23 21:27:21 -05:00
Steven Perron
0b1cb27f83 Remove derivative instructions from the list of combinators.
These instructions compute their value based the value of the immediate
neighbours of the current fragment.  This means the result is not
defined purely by the operands of the instruction.
2017-11-23 18:37:43 -05:00