platform/upstream/SPIRV-Tools.git
8 years agoFix the corner case in version generation script.
Lei Zhang [Fri, 11 Mar 2016 20:03:04 +0000 (15:03 -0500)]
Fix the corner case in version generation script.

When the given directory is not inside the SPIRV-Tools project,
describe() returns a str instance instead of bytes instance
in Python3, which will case problem when calling decode() on it.

8 years agoFixed float->int16 conversion warnings in VS2013.
Andrew Woloszyn [Mon, 7 Mar 2016 20:55:44 +0000 (15:55 -0500)]
Fixed float->int16 conversion warnings in VS2013.

8 years agoAdd comments to explain why calling decode().
Lei Zhang [Mon, 7 Mar 2016 18:44:09 +0000 (13:44 -0500)]
Add comments to explain why calling decode().

8 years agoRun pyformat with -s 4 --force_quote_type=single.
Lei Zhang [Sun, 6 Mar 2016 18:00:58 +0000 (13:00 -0500)]
Run pyformat with -s 4 --force_quote_type=single.

8 years ago Imporve compatibility with Python3.
Lei Zhang [Sun, 6 Mar 2016 16:44:21 +0000 (11:44 -0500)]
 Imporve compatibility with Python3.

 * Use print_function from __future__ to tackle the print syntax
   change.
 * In Python3 str and bytes are no longer the same thing. Need
   proper decode.

8 years agoDon't check kernel entry-point signatures.
Florian Ziesche [Tue, 1 Mar 2016 18:56:14 +0000 (19:56 +0100)]
Don't check kernel entry-point signatures.

Recognize SpvOpInBoundsPtrAccessChain and SpvOpPtrAccessChain as opcodes
returning a pointer.

 * spvOpcodeIsPointer: recognize SpvOpInBoundsPtrAccessChain and SpvOpPtrAccessChain as opcodes returning a pointer

 * isValid<SpvOpEntryPoint>: don't check kernel function signatures (these don't have to be 'void main(void)')

 * added tests for kernel OpEntryPoint, OpInBoundsPtrAccessChain and OpPtrAccessChain, as well as facilities to actually test kernel/OpenCL SPIR-V

 * fixed pow and pown specification (both should take 2 parameters), spec bug reported at https://www.khronos.org/bugzilla/show_bug.cgi?id=1469

 * use ASSERT_TRUE instead of ASSERT_EQ

 * added pow and pown test (pow(val, 2.0f) and pown(val, 3))

Revert " * fixed pow and pown specification (both should take 2 parameters), spec bug reported at https://www.khronos.org/bugzilla/show_bug.cgi?id=1469"

This reverts commit c3d5a87e73334b25aa4278964eea6d1c7625cd81.

Revert " * added pow and pown test (pow(val, 2.0f) and pown(val, 3))"

This reverts commit 7624aec720a51dc212704dc92eff6ae3634d2d6c.

8 years agoMake libspirv.h more C friendly.
Dejan Mircevski [Tue, 1 Mar 2016 15:17:18 +0000 (10:17 -0500)]
Make libspirv.h more C friendly.

In C, `#include <stdbool.h>` so `bool` is recognized.

Add a `typedef` for `spv_context_t`.

8 years agoRemove stale code.
Lei Zhang [Fri, 26 Feb 2016 20:38:42 +0000 (15:38 -0500)]
Remove stale code.

8 years agoFix issues reported by cppcheck.
Lei Zhang [Thu, 25 Feb 2016 21:11:16 +0000 (16:11 -0500)]
Fix issues reported by cppcheck.

Remove code not being used, add explicit to constructors, and
add missing fields in constructors.

8 years agoAdded missing <cstdint> in bitutils.
Andrew Woloszyn [Wed, 24 Feb 2016 20:26:05 +0000 (15:26 -0500)]
Added missing <cstdint> in bitutils.

This was breaking MSVC2013.

8 years agoIf no tag in the repo, then show the commit hash
David Neto [Wed, 24 Feb 2016 17:41:29 +0000 (12:41 -0500)]
If no tag in the repo, then show the commit hash

8 years agoActually find the python executable before use.
Andrew Woloszyn [Wed, 24 Feb 2016 15:11:07 +0000 (10:11 -0500)]
Actually find the python executable before use.

Also change PYTHON_EXE to PYTHON_EXECUTABLE to match what
the cmake documentation says.

8 years agoUse subprocess.Popen, hoping for Windows portability
David Neto [Tue, 23 Feb 2016 22:58:31 +0000 (17:58 -0500)]
Use subprocess.Popen, hoping for Windows portability

Replaces use of subprocess.check_output

8 years agoRemove spv_validate_options_t and change tests accrodingly.
Lei Zhang [Mon, 22 Feb 2016 20:25:50 +0000 (15:25 -0500)]
Remove spv_validate_options_t and change tests accrodingly.

Users always want to run all the checks. The spv_validate_options_t
mechanism, which provides little benefits to users, complicates the
internal implementation and also makes the tests exercise different
paths as users do.

Right now the tests are more like integration tests instead of
unit tests, which should be our next refactoring aim.

8 years agoImplement --version for spirv-tools
qining [Mon, 22 Feb 2016 21:07:19 +0000 (16:07 -0500)]
Implement --version for spirv-tools

'spirv-as --version', 'spirv-dis --version' and 'spirv-val --version'
will display version information.

8 years agogetWord() should not go beyond the end of the source text.
Lei Zhang [Mon, 22 Feb 2016 22:17:25 +0000 (17:17 -0500)]
getWord() should not go beyond the end of the source text.

This addresses Bug #126 where EOL is missing at the end of
source file.

8 years agospirv-val help says it's a work in progress.
David Neto [Mon, 22 Feb 2016 21:43:53 +0000 (16:43 -0500)]
spirv-val help says it's a work in progress.

8 years agoAvoid closing stdin and stdout.
Lei Zhang [Fri, 19 Feb 2016 15:15:17 +0000 (10:15 -0500)]
Avoid closing stdin and stdout.

8 years agoFix command line option errors in val.
Lei Zhang [Thu, 18 Feb 2016 23:04:11 +0000 (18:04 -0500)]
Fix command line option errors in val.

* There is no -capability.
* -rules is missing.
* -id by default is turned off.
* Add -all.

8 years agoSupport outputting to stdout in the as tool.
Lei Zhang [Thu, 18 Feb 2016 22:43:23 +0000 (17:43 -0500)]
Support outputting to stdout in the as tool.

8 years agoRemove unnecessary null pointer checks
Eric Engestrom [Thu, 18 Feb 2016 23:41:16 +0000 (23:41 +0000)]
Remove unnecessary null pointer checks

Fixes #110

8 years agoDocument SPIR-V binary and assembly file naming convention.
Lei Zhang [Thu, 18 Feb 2016 20:51:04 +0000 (15:51 -0500)]
Document SPIR-V binary and assembly file naming convention.

8 years agoUse unordered_map to store defs in UseDefTracker for fast lookup.
Lei Zhang [Thu, 18 Feb 2016 19:38:12 +0000 (14:38 -0500)]
Use unordered_map to store defs in UseDefTracker for fast lookup.

8 years agoSupport using stdin to supply input in the val tool.
Lei Zhang [Thu, 18 Feb 2016 18:40:56 +0000 (13:40 -0500)]
Support using stdin to supply input in the val tool.

This allows getting output from other utilities using pipe.

8 years agoSupport using stdin to supply input in the as tool.
Lei Zhang [Thu, 18 Feb 2016 17:21:10 +0000 (12:21 -0500)]
Support using stdin to supply input in the as tool.

This allows getting output from other utilities using pipe.

8 years agoReject unknown long-named command line options in dis.
Lei Zhang [Thu, 18 Feb 2016 15:50:42 +0000 (10:50 -0500)]
Reject unknown long-named command line options in dis.

8 years agoFix the source organization section in README.md
David Neto [Thu, 18 Feb 2016 03:27:46 +0000 (22:27 -0500)]
Fix the source organization section in README.md

It now reflects the new header file organization.
It also tells API clients what to add to the search
include path.

8 years agoSPIR-V Tools fully supports SPIR-V 1.0 Rev3
David Neto [Tue, 16 Feb 2016 17:02:05 +0000 (12:02 -0500)]
SPIR-V Tools fully supports SPIR-V 1.0 Rev3

- Update version numbers in libspirv.h.
  Add a test for the relevant macros.
- Update the README

8 years agoAdd MultiViewport capability, new in 1.0.3
David Neto [Wed, 17 Feb 2016 17:12:45 +0000 (12:12 -0500)]
Add MultiViewport capability, new in 1.0.3

Fix typos in previous tests with MultiViewport.

8 years agoRearrange headers
David Neto [Wed, 17 Feb 2016 19:44:00 +0000 (14:44 -0500)]
Rearrange headers

Now we have public headers arranged as follows:
$SPIRV_TOOLS_ROOT/include/spirv-tools/libspirv.h
$SPIRV_TOOLS_ROOT/include/spirv/spirv.h
$SPIRV_TOOLS_ROOT/include/spirv/GLSL.std.450.h
$SPIRV_TOOLS_ROOT/include/spirv/OpenCL.std.h

A project should use -I$SPIRV_TOOLS_ROOT/include
and then #include "spirv-tools/libspirv.h"

The headers from the SPIR-V Registry can be accessed as "spirv/spirv."
for example.

The install target should also install the headers from the SPIR-V
Registry.  The libspirv.h header is broken otherwise.

The SPIRV-Tools library depends on the headers from the SPIR-V Registry.

The util/bitutils.h and util/hex_float.h are pulled into the internal
source tree.  Those are not part of the public API to SPIRV-Tools.

8 years agoSome GLSL extended instructions depend on capabilities.
David Neto [Wed, 17 Feb 2016 17:17:04 +0000 (12:17 -0500)]
Some GLSL extended instructions depend on capabilities.

8 years agoAdd GLSL instructions NMin, NMax, NClamp
David Neto [Wed, 17 Feb 2016 00:26:13 +0000 (19:26 -0500)]
Add GLSL instructions NMin, NMax, NClamp

These appear first in GLSL.std.450 in 1.0 Rev3

8 years agoTest OpImageSparseRead
David Neto [Mon, 15 Feb 2016 19:20:01 +0000 (14:20 -0500)]
Test OpImageSparseRead

Also tweak the image operands test with OpImageFetch so the input assembly
more closely matches the expected output.  But don't make it a round
trip test since we want to check the assembler's ability to read the
image operand mask with out-of-order mask names.

The OpImageSparseRead assembly test is also a round trip disassembler
test.

8 years agoFixed internal compiler error in gcc-4.9.
Andrew Woloszyn [Wed, 17 Feb 2016 18:00:23 +0000 (13:00 -0500)]
Fixed internal compiler error in gcc-4.9.

This showed up in mips and mips64 builds. A combination of templates
and the error reporting were causing gcc to crash. This splits up the
functionality in a way that now successfully compiles.

8 years agoRemove remaining float overflow value tests
David Neto [Wed, 17 Feb 2016 17:39:41 +0000 (12:39 -0500)]
Remove remaining float overflow value tests

Should fix tests on Windows.

8 years agoUse syntax tables for SPIR-V 1.0 Rev3
David Neto [Mon, 15 Feb 2016 18:50:00 +0000 (13:50 -0500)]
Use syntax tables for SPIR-V 1.0 Rev3

- The SPIR-V spec generator has changed how it represents optional
  operands.  Now it tracks a separate boolean flag indicating optionality.
  However, SPIRV-Tools still wants to represent both operand class
  and optionality in the same enums space (SPV_OPERAND_TYPE_*).
  So there's extra work in the patch.

- In the spec generator, OperandImage is now OperandImageOperands.
  This affects enum translation in opcode.cpp.

- In the spec generator, image operands are explicitly followed by
  Id, and VariableIds.  However, SPIRV-Tools uses the bits set
  in the image operand bitmask to control the number and meaning
  of the Ids that follow.  So in writing the opcode.inc syntax
  table, drop all operands after OperandImageOperands.

- Some enums are now more explicitly represented in the generated
  opcode.inc:
    - AccessQualifier (e.g. on OpTypeImage), in both required and
      optional flavours.
    - MemoryAccess (e.g. on loads and stores)

- Add SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER

- Add tests for the optional AccessQualifier operand on OpTypeImage.

- Update the AccessQualifier test for OpTypeImage so it's a round
  trip test through the disassembler as well.

8 years agoUpdate capabilities for 1.0 Rev3
David Neto [Sun, 14 Feb 2016 18:55:50 +0000 (13:55 -0500)]
Update capabilities for 1.0 Rev3

8 years agoDon't promise particular values when float parsing fails.
David Neto [Tue, 16 Feb 2016 17:13:51 +0000 (12:13 -0500)]
Don't promise particular values when float parsing fails.

This should address problems on Windows:
https://github.com/KhronosGroup/SPIRV-Tools/issues/104

8 years agoConfigure gmock locally only if not already configured.
David Neto [Mon, 15 Feb 2016 14:36:20 +0000 (09:36 -0500)]
Configure gmock locally only if not already configured.

Allows an enclosing project to have already configured gmock, even
if the developer has placed the googletest sources under this
project's external/googletest directory.

Describe how to enable the tests in the two essential scenarios:
where SPIR-V Tools is standalone, or where SPIR-V Tools is configured
as a part of a larger project.

8 years agoUse SPIR-V headers for 1.0 Rev3
David Neto [Sun, 14 Feb 2016 18:42:17 +0000 (13:42 -0500)]
Use SPIR-V headers for 1.0 Rev3

Refresh from the SPIR-V registry.

8 years agoParse overflow for fp16 like for 32- and 64-bit
David Neto [Sat, 6 Feb 2016 18:48:05 +0000 (13:48 -0500)]
Parse overflow for fp16  like for 32- and 64-bit

In that case, set the stream fail bit, and set the maximum normal
value or lowest normal value, depending on the sign of the original
value.

8 years agoFloat literal parsing fixes
David Neto [Sat, 6 Feb 2016 18:48:05 +0000 (13:48 -0500)]
Float literal parsing fixes

- For 32- and 64-bit floats, overflow is a parse error

  This works around a difference between Xcode's istringstream
  and other platforms.  Xcode's runtime library will happlily
  "round up" overflow values to infinity.  We want to make it fail.

- When parsing a float fails due to bad syntax, follow C++11
  behaviour for operator>> and set the value to zero.

- When parsing a 32-bit or 64-bit float overflows, follow C++11
  behaviour for operator>> and set the value to the nearest
  normal value: either max or lowest finite value for the type.

- Add FloatProxy<T>::max() and ::lowest()

- Make 16-bit overflow behaviour more consistent: we always get a
  16-bit infinity of the right sign, whether the original string
  is a normal value for 32-bit or an overflow value for 32-bit.
  That matches our earlier intent.
  Added TODO's to make 16-bit overflow always an error, just like
  for 32-bit and 64-bit.

- Simplify normal parsing of Float16 values by delegating to
  normal parsing of 32-bit floats.

8 years agoReject float literals with two leading signs
David Neto [Wed, 10 Feb 2016 16:46:05 +0000 (11:46 -0500)]
Reject float literals with two leading signs

E.g. --1 should be rejected.

8 years agoMore parsing tests for literals with leading minus
David Neto [Mon, 8 Feb 2016 19:33:41 +0000 (14:33 -0500)]
More parsing tests for literals with leading minus

Also checks some hex literal cases.

This addresses part of
https://github.com/KhronosGroup/SPIRV-Tools/issues/45
by removing the parseNumber case for "-0" on unsigned
integers.  We don't care about that platform difference
at the level of std::istringstream, since we reject it
at a higher parsing level.

8 years agoMake IsTypeNullable a transitive check.
Dejan Mircevski [Wed, 3 Feb 2016 22:16:27 +0000 (17:16 -0500)]
Make IsTypeNullable a transitive check.

8 years agoEliminate parameter-order check from ID-validation.
Dejan Mircevski [Wed, 3 Feb 2016 17:34:52 +0000 (12:34 -0500)]
Eliminate parameter-order check from ID-validation.

8 years agoAllow Op[No]Line between OpFunctionParameters.
Dejan Mircevski [Wed, 3 Feb 2016 15:26:59 +0000 (10:26 -0500)]
Allow Op[No]Line between OpFunctionParameters.

Also ensure we don't get thrown off by too many parameters.

8 years agoEnable ctest.
Dejan Mircevski [Tue, 2 Feb 2016 19:41:35 +0000 (14:41 -0500)]
Enable ctest.

8 years agoValidation of mask operand capabilities is more data driven
David Neto [Tue, 2 Feb 2016 17:12:48 +0000 (12:12 -0500)]
Validation of mask operand capabilities is more data driven

Use spvOperandIsConcreteMask to determine if an operand is
a bitmask.  Check its individual bits in a generic way.

8 years agoAdd spvOperandIsConcreteMask
David Neto [Tue, 2 Feb 2016 17:05:34 +0000 (12:05 -0500)]
Add spvOperandIsConcreteMask

8 years agoUse AssemblyGrammar for capability validation.
Dejan Mircevski [Sun, 31 Jan 2016 04:32:09 +0000 (23:32 -0500)]
Use AssemblyGrammar for capability validation.

Also:
- ForEach() for spv_capability_mask_t.
- Add capability min/max constants.
- Move max definition from validate_types.cpp to spirv_definition.h.

8 years agoForbid Generic variables.
Dejan Mircevski [Fri, 29 Jan 2016 21:49:40 +0000 (16:49 -0500)]
Forbid Generic variables.

8 years agoFix validator mem overflow when tracking capabilities
qining [Fri, 29 Jan 2016 17:09:34 +0000 (12:09 -0500)]
Fix validator mem overflow when tracking capabilities

8 years agoFix in-function storage class validation.
Dejan Mircevski [Fri, 29 Jan 2016 03:20:28 +0000 (22:20 -0500)]
Fix in-function storage class validation.

Move tests into a fixture that properly turns on the relevant passes.

8 years agoInitialize vector<string>s on first use, not statically.
Dejan Mircevski [Thu, 28 Jan 2016 18:18:00 +0000 (13:18 -0500)]
Initialize vector<string>s on first use, not statically.

8 years agoFix validation of return value.
Dejan Mircevski [Fri, 22 Jan 2016 21:52:40 +0000 (16:52 -0500)]
Fix validation of return value.

8 years agoRemove spvOpcodeIsObject().
Dejan Mircevski [Fri, 22 Jan 2016 19:27:00 +0000 (14:27 -0500)]
Remove spvOpcodeIsObject().

Also
- Add type_id to spv_id_info_t.
- Use spv_id_info_t::type_id instead of words[1].
  Triggered some asserts on tests, where the code incorrectly assumed
  words[1] had a type.  Remove the asserts and handle gracefully.
- Add tests for OpStore of a label, a void, and a function.

8 years agoInitial capability implementation and unit tests
Umar Arshad [Sat, 23 Jan 2016 19:14:32 +0000 (14:14 -0500)]
Initial capability implementation and unit tests

* Register capabilility and checks
* Add validate storage class capabilities checks and tests
* Instruction pass refactor
  - More generic form of capability checking by checking operands
    instead of instructions
* Execution Model capabilities checks
* Decorate BuiltIn capability checks
* Addressing Model capability checks
* Memory Model capability checks
* Execution Mode capability checks
* Dim capability checks
* SamplerAddressingMode capability checks

8 years agoQualify CMake function names with "spvtools" to avoid conflictions.
Lei Zhang [Tue, 26 Jan 2016 23:04:55 +0000 (18:04 -0500)]
Qualify CMake function names with "spvtools" to avoid conflictions.

If a third-party project defines a CMake function with the same
name, by importing that project's CMake configuration, we may end
up overwriting our own copy. Qualify all defined functions to
reduce that probability.

8 years agoFix spvOpcodeIsScalarType() to include Boolean.
Dejan Mircevski [Thu, 21 Jan 2016 20:55:43 +0000 (15:55 -0500)]
Fix spvOpcodeIsScalarType() to include Boolean.

Remove redundant validations of OpConstant and OpConstantComposite.
Binary parser already performs these checks, so the validations can
never be triggered.

Enable bad-constant tests.

8 years agoDon't fail validation in unimplemented cases.
Dejan Mircevski [Thu, 21 Jan 2016 14:03:58 +0000 (09:03 -0500)]
Don't fail validation in unimplemented cases.

8 years agoFix OpLoad pointee type validation.
Dejan Mircevski [Thu, 21 Jan 2016 14:00:15 +0000 (09:00 -0500)]
Fix OpLoad pointee type validation.

8 years agoAdd disassembler option to show byte offset
David Neto [Mon, 18 Jan 2016 20:29:15 +0000 (15:29 -0500)]
Add disassembler option to show byte offset

The option is disabled by default.

The offset is printed in hex, as a comment after each instruction.

8 years agoTrack uses and defs during parsing.
Dejan Mircevski [Fri, 15 Jan 2016 16:25:11 +0000 (11:25 -0500)]
Track uses and defs during parsing.

Replace two other, imperfect mechanisms for use-def tracking.

Use ValidationState_t::entry_points to track entry points.

Concentrate undefined-ID diagnostics in a single place.

Move validate_types.h content into validate.h due to increased
inter-dependency.

Track uses of all IDs: TYPE_ID, SCOPE_ID, ...

Also update some blurbs.

Fix entry-point accumulation and move it outside ProcessIds().

Remove validate_types.h from CMakeLists.txt.

Blurb for spvIsIdType.

Remove redundant diagnostics for undefined IDs.

Join "can not" and reformat.

8 years agoSince g++-4.9 has an ICE occasionally in travis add a retry.
Andrew Woloszyn [Tue, 19 Jan 2016 21:13:45 +0000 (16:13 -0500)]
Since g++-4.9 has an ICE occasionally in travis add a retry.

Try to re-run the build with ninja -j 1 if the build fails,
this should reduce the number of build failures we see.

8 years agoFix missing OpNoLine layout checks
Umar Arshad [Mon, 18 Jan 2016 18:41:52 +0000 (13:41 -0500)]
Fix missing OpNoLine layout checks

8 years agoDisable warnings C4503 on MSVC for test code
David Neto [Fri, 15 Jan 2016 15:43:39 +0000 (10:43 -0500)]
Disable warnings C4503 on MSVC for test code

C4503 is "decorated name length exceeded", triggered
by some heavily templated types.

8 years agoValidation refactor
Umar Arshad [Thu, 14 Jan 2016 04:25:11 +0000 (23:25 -0500)]
Validation refactor

* Organize passes into seperate files
* Remove module layout logic from Cfg pass
* Remove module layout logic from Functions class
* Refactor ModuleLayoutPass for readability
* Adapt consistent naming of layout sections (Stage/Section -> Section)

8 years agoAdd configuration for Travis CI.
Lei Zhang [Thu, 7 Jan 2016 04:55:16 +0000 (23:55 -0500)]
Add configuration for Travis CI.

8 years agoAdd missing branch instructions in SSA tests
Umar Arshad [Thu, 14 Jan 2016 14:48:29 +0000 (09:48 -0500)]
Add missing branch instructions in SSA tests

8 years agoRemove static vector from GetModuleOrder
Umar Arshad [Sat, 9 Jan 2016 22:25:36 +0000 (17:25 -0500)]
Remove static vector from GetModuleOrder

8 years agoFixed warning in VS2013 build.
Andrew Woloszyn [Wed, 13 Jan 2016 15:44:05 +0000 (10:44 -0500)]
Fixed warning in VS2013 build.

Signed/Unsigned mismatch in progressToNextLayoutStageOrder().

8 years agoFix, that spirv-tools did not build, as two casts are not present.
Norbert Nopper [Wed, 13 Jan 2016 09:35:44 +0000 (10:35 +0100)]
Fix, that spirv-tools did not build, as two casts are not present.

8 years agoFix build by renaming ValidationState_t constructor argument.
Dejan Mircevski [Wed, 13 Jan 2016 14:52:23 +0000 (09:52 -0500)]
Fix build by renaming ValidationState_t constructor argument.

The `diag` argument shadows the `diag` method, so the strict build fails.

8 years agoFunction and block layout checks. very basic CFG.
Umar Arshad [Wed, 16 Dec 2015 02:44:21 +0000 (21:44 -0500)]
Function and block layout checks. very basic CFG.

This adds function and block layout checks to the validator. Very
basic CFG code has been added to make sure labels and branches
are correctly ordered.

Also:
* MemoryModel and Variable instruction checks/tests
* Use spvCheckReturn instead of CHECK_RESULT
* Fix invalid SSA tests
* Created libspirv::spvResultToString in diagnostic.h
* Documented various functions and classes
* Fixed error messages
* Fixed using declaration for FunctionDecl enum class

8 years agoFixed use-after-free in isStartOfNewInst() tests.
Andrew Woloszyn [Tue, 12 Jan 2016 19:47:24 +0000 (14:47 -0500)]
Fixed use-after-free in isStartOfNewInst() tests.

8 years agoMinor fixes to remove warnings in VS2013.
Andrew Woloszyn [Mon, 11 Jan 2016 21:22:34 +0000 (16:22 -0500)]
Minor fixes to remove warnings in VS2013.

Also fixes VS2015 build due to missing #include <iterator>

8 years agospvDiagnosticDestroy is safe to call on nullptr
David Neto [Mon, 11 Jan 2016 17:28:19 +0000 (12:28 -0500)]
spvDiagnosticDestroy is safe to call on nullptr

Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/62

8 years agoFix endian-ness conversion in the binary parser.
Andrew Woloszyn [Mon, 11 Jan 2016 18:54:30 +0000 (13:54 -0500)]
Fix endian-ness conversion in the binary parser.

When we were swapping endian-ness in the binary parser, we would
write outside of the bounds of our vector.

8 years agoMade compilation with gcc and clang more strict.
Andrew Woloszyn [Mon, 11 Jan 2016 15:54:20 +0000 (10:54 -0500)]
Made compilation with gcc and clang more strict.

Added additional compilation flags to gcc and clang builds.
Adds -Wall -Wextra -Wno-long-long -Wshadow -Wundef -Wconversion
-WNo-sign-conversion and -Wno-missing-field-initializers
where appropriate.

Does not add -Wundef to tests, because GTEST tests undefined
macros all over the place.

8 years agoSupport 16-bit float in assembler and disassembler
Andrew Woloszyn [Fri, 8 Jan 2016 14:54:42 +0000 (09:54 -0500)]
Support 16-bit float in assembler and disassembler

This adds half-precision constants to spirv-tools.
16-bit floats are always disassembled into hex-float format,
but can be assembled from floating point or hex-float inputs.

8 years agoExtend copyright to 2016.
Dejan Mircevski [Thu, 7 Jan 2016 18:44:22 +0000 (13:44 -0500)]
Extend copyright to 2016.

8 years agoUndefine a macro after use.
Dejan Mircevski [Thu, 7 Jan 2016 16:00:38 +0000 (11:00 -0500)]
Undefine a macro after use.

8 years agoFix shadowing warnings reported by GCC
David Neto [Wed, 6 Jan 2016 19:43:55 +0000 (14:43 -0500)]
Fix shadowing warnings reported by GCC

8 years agoFix conversion warnings reported by GCC.
David Neto [Wed, 6 Jan 2016 18:08:39 +0000 (13:08 -0500)]
Fix conversion warnings reported by GCC.

8 years agoExplicitly convert to narrower type.
David Neto [Tue, 5 Jan 2016 19:57:58 +0000 (14:57 -0500)]
Explicitly convert to narrower type.

Fixes a strict Clang warning.

8 years agoAvoid variable shadowing
David Neto [Tue, 5 Jan 2016 19:56:02 +0000 (14:56 -0500)]
Avoid variable shadowing

8 years agoAvoid warning for implicit conversion of char array to bool.
David Neto [Tue, 5 Jan 2016 19:49:08 +0000 (14:49 -0500)]
Avoid warning for implicit conversion of char array to bool.

Clang complains about assert("unhandled") but not
assert(false && "unhandled").

8 years agoFix var shadowing and width mismatches in hex_float.h
David Neto [Tue, 5 Jan 2016 16:25:11 +0000 (11:25 -0500)]
Fix var shadowing and width mismatches in hex_float.h

8 years agoAvoid parameter shadowing in source/diagnostic.h
David Neto [Mon, 4 Jan 2016 22:27:34 +0000 (17:27 -0500)]
Avoid parameter shadowing in source/diagnostic.h

Change the offending class to more closely follow Google C++ style:
- Member names have a trailing underscore.
- Use an accessor method for the stream_ member.

8 years agoFix list of opcodes allowed for OpSpecConstantOp
David Neto [Tue, 5 Jan 2016 23:22:22 +0000 (18:22 -0500)]
Fix list of opcodes allowed for OpSpecConstantOp

Was missing BitcastXor, GenericCastToPtr.
Remove duplicate of SLessThanEqual

8 years agooperator<< on FloatProxy preserves float and fill
David Neto [Tue, 5 Jan 2016 17:45:54 +0000 (12:45 -0500)]
operator<< on FloatProxy preserves float and fill

Fixes formatting of disassembler output after printing
a hex float, e.g. for a NaN or subnormal.

8 years agoFix parser assert failure for a bad OpSwitch
David Neto [Wed, 23 Dec 2015 18:21:43 +0000 (13:21 -0500)]
Fix parser assert failure for a bad OpSwitch

Emit a diagnostic if the OpSwitch selector refers to an ID that
is valid but has no type.

Discovered by afl-fuzz.

8 years agoAvoid relative path in #include
David Neto [Tue, 22 Dec 2015 20:15:46 +0000 (15:15 -0500)]
Avoid relative path in #include

Adds CMAKE_CURRENT_SOURCE_DIR to the include path for UnitSPIRV

8 years agoRename endian.h to spirv_endian.h
David Neto [Tue, 22 Dec 2015 20:08:41 +0000 (15:08 -0500)]
Rename endian.h to spirv_endian.h

If we later add a source/ as an -I include directory,
then avoid confusing other headers that want to include the
standard "endian.h" from /usr/include.

Also rename source/endian.cpp to source/spirv_endian.cpp

8 years agoAdd spirv.py from the SPIR-V 1.0.2 registry
David Neto [Mon, 7 Dec 2015 18:54:20 +0000 (13:54 -0500)]
Add spirv.py from the SPIR-V 1.0.2 registry

8 years agoInitial logical layout validation
Umar Arshad [Tue, 15 Dec 2015 19:50:05 +0000 (14:50 -0500)]
Initial logical layout validation

* Validates module level instructions for logical layout
  conformance
* Does not validate:
  1. Function logical layout
  2. Minor cases with OpVariable
  3. Missing MemoryModel instruction in module
  4. Order of function definition and function declaration
* 782 unit tests for logical layout

Addressed feedback

8 years agoRefactor validation types into another file
Umar Arshad [Mon, 14 Dec 2015 13:21:08 +0000 (08:21 -0500)]
Refactor validation types into another file

8 years agoFix tests which rely on OpName;Use EXPECT_THAT
Umar Arshad [Mon, 14 Dec 2015 15:57:15 +0000 (10:57 -0500)]
Fix tests which rely on OpName;Use EXPECT_THAT

All OpName calls should appear before annotation and type
declarations.

8 years agoFix warnings with Apple clang++
Umar Arshad [Thu, 10 Dec 2015 16:56:34 +0000 (11:56 -0500)]
Fix warnings with Apple clang++

* Unused private member
* Overflow error when subtracting num_fraction_bits for HF16 and HF