Commit Graph

986 Commits

Author SHA1 Message Date
David Neto
1d59aa0777 Pass manager recomputes Id bound automatically.
Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/371
in the sense that the id bound is correct after all the passes
have been run.  But it might be inconsistent between passes.
2016-08-27 13:19:18 -04:00
Lei Zhang
b1b2cac2cf Create const overloads for begin() and end() in Instruction. 2016-08-26 21:58:49 -04:00
David Neto
923a4596b4 Fix typo in spirv-opt help 2016-08-26 16:27:54 -04:00
David Neto
d7b6362ed7 Add Module::ComputeIdBound
When IDs change, something should use this utility method
and Module::SetIdBound before writing out the binary.
2016-08-26 16:27:12 -04:00
Lei Zhang
0a175eb0d6 Add tests for decoration_empty(). 2016-08-26 14:05:04 -04:00
qining
ec07a07724 Add a method in the types to check whether there is no decoration on a
type.
2016-08-26 12:09:21 -04:00
David Neto
58e1a1e3be Test ir::Instruction::GetOperand and GetInOperand 2016-08-26 10:59:25 -04:00
David Neto
cc60caba1d IrLoader gracefully handles incomplete blocks and functions
This lets us write smaller test cases with the IrLoader, avoiding
boilerplate for function begin/end, and basic block begin/end.

Also ForEachInst is more forgiving of cases where a basic block
doesn't have a label, and when a function doesn't have a defining
or end instruction.
2016-08-26 10:15:15 -04:00
David Neto
53013cc816 Add Instruction begin and end mutable iterators
Refactored the instuction test.
2016-08-25 17:48:58 -04:00
David Neto
2607bbf30b Add Instruction cbegin and cend to access operands 2016-08-25 15:24:32 -04:00
David Neto
97fc6aa3b8 ForEachInst optionally runs on attached debug line insts
Also:
- Add const forms of ForEachInst
- Rewrite Module::ToBinary in terms of ForEachInst
- Add Instruction::ToBinaryWithoutAttachedDebugInsts
- Delete the ToBinary method on Function, BasicBlock, and Instruction
  since it can now be implemented with ForEachInst in a less confusing
  way, e.g. without recursion.
- Preserve debug line instructions on OpFunctionEnd (and store that
  instruction as a unique-pointer, for regularity).
2016-08-25 11:43:22 -04:00
Lei Zhang
e96a881b0b Travis CI: add build configuration for Android NDK with cmake. 2016-08-24 12:34:33 -04:00
David Neto
0d4b73c3bf Start v2016.4-dev 2016-08-24 11:18:16 -04:00
David Neto
a7a84bd50d Finalize v2016.3 2016-08-24 11:17:07 -04:00
David Neto
3c35b6321e Add spirv-lesspipe.sh
Idea suggested by @steve-lunarg in issue 359.
2016-08-24 10:39:04 -04:00
David Neto
97d06a36b0 Mere mention of PointSize BuiltIn does not require Shader capability
Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/365 which
was reopened for this.
2016-08-24 10:04:17 -04:00
Lei Zhang
f51d82338e Add a home brewed make_unique to ease creating unique_ptrs. 2016-08-24 09:41:55 -04:00
Lei Zhang
6f13c73229 Remove some unused macros and functions. 2016-08-24 09:34:06 -04:00
David Neto
f33aacd165 CHANGES captures fix for issue 365 2016-08-23 18:44:26 -04:00
David Neto
358cb2940a Relax ClipDistance, CullDistance capability check in all environments
Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/365
2016-08-23 18:41:44 -04:00
David Neto
ccabcc4673 Add opt::ir::Module::SetIdBound 2016-08-23 15:20:34 -04:00
qining
7e775aa99e Get the number of elements for Vector and Matrix type 2016-08-23 11:34:24 -04:00
qining
b891845b53 Refine the DefUseManager
* Fix the behavior when analyzing an individual instruction:
  * exisiting instruction:
      Clear the original records and re-analyze it as a new instruction.
  * new instruction with exisiting result id:
      Clear the original records of the exisiting result id. This means
      the records of the analyzed result-id-defining instruction will be
      overwritten by the record of the new instruction with the same
      result id.
  * new instruction with new result id or without result id:
      Just update the internal records to incorperate the new
      instruction.
* Add tests for analyzing individual instruction w/o an exisiting module.
* Refactor ClearInst() implementation
* Remove ClearDef() function.
* Fixed a bug in DefUseManager::ReplaceAllUsesWith() that OpName
  instruction may trigger the assertion incorrectly.
* update the blurbs for EraseUseRecordsOfOperandIds()
2016-08-17 23:13:01 -04:00
qining
6c5bdc9a39 Get the width from integer and float type 2016-08-17 20:33:56 -04:00
qining
e8b7c7b210 Replace the SetOperand() with SetInOperand() and SetResultType() 2016-08-16 15:05:07 -04:00
Lei Zhang
b65124f097 Make clear that we are using ptrdiff_t as the iterator difference type.
And ptrdiff_t is a implementation defined signed type. Comparing it
with unsigned number literal causes compiler warnings.
2016-08-16 11:21:08 -04:00
Lei Zhang
9747d33d08 Derive iterator from std::iterator to reap standarad algorithms.
By deriving from std::iterator, iterator_traits will be properly
set up for our custom iterator type, thus we can use algorithms
from STL with our custom iterators.
2016-08-15 16:29:56 -04:00
Lei Zhang
1eec0ed4b9 Make analyses RAII-like and turn disable copy/move constructors. 2016-08-15 13:41:47 -04:00
David Neto
4dd4c14b80 Avoid integer modulo by 1, to avoid warning
Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/349
2016-08-15 11:27:13 -04:00
David Neto
033b7d00f0 Avoid race on mkdir
Should fix https://github.com/KhronosGroup/SPIRV-Tools/issues/340
2016-08-15 11:14:34 -04:00
Lei Zhang
097ff25ea7 Allow OpUndef appearing in the type and global variable section.
Also clean up API functions for adding instructions into the
type and global values section.
2016-08-15 10:44:14 -04:00
qining
c814911904 Add another construtor for opt::ir::Instruction 2016-08-13 11:17:11 -04:00
David Neto
4987ae6549 Test INotEqual for OpSpecConstantOp in asm, disasm 2016-08-12 16:00:46 -04:00
qining
d065593404 Add iterator getter interface for types_values_ 2016-08-12 15:10:51 -04:00
Umar Arshad
b01755a5e2 OpUndef can appear in type declaration section 2016-08-12 14:28:17 -04:00
Lei Zhang
94912ad1ba Turn off modifying methods for const iterators. 2016-08-12 14:05:41 -04:00
qining
81532584cb Clear old def-use record when re-analyze an ID 2016-08-12 13:04:07 -04:00
Lei Zhang
95dc16d1ec Add make_range() & make_const_range() for creating iterator ranges. 2016-08-12 10:34:47 -04:00
Lei Zhang
4b3247feba Avoid non-oneliner definition in class and add missing iterators. 2016-08-12 10:34:47 -04:00
qining
7a94e66433 Move the def-use analysis for single inst to public 2016-08-12 10:25:37 -04:00
qining
e5bb46d274 Add getter for pointee, element type 2016-08-11 20:53:57 -04:00
Lei Zhang
645ee1d9e0 Create an iterator class for in-memory representation. 2016-08-11 18:35:12 -04:00
qining
f949e321f2 Make the lookup up of type id accepts const arg 2016-08-11 18:21:57 -04:00
David Neto
82405cf499 Reuse the iterator on Id and type lookup 2016-08-11 18:18:12 -04:00
qining
f4e3a905d4 Add the const version of AsXXtype() interface. 2016-08-11 17:13:43 -04:00
qining
cd6d6c0ccf Add GetId(Type* type) API to the type manager 2016-08-11 15:10:09 -04:00
David Neto
892239b7cc Avoid double-copy of NameMapper object. 2016-08-11 12:11:36 -04:00
David Neto
8a5ce18f12 Use friendly names for Ids 2016-08-11 11:30:18 -04:00
David Neto
996a814ae3 Add spirv-cfg to dump a GraphViz graph of the CFG
This is experimental, and has not tests.
It's been used to debug validation of structured control flow.

- Has a legend describing special arcs to merge blocks and continue
  targets.
- Labels the function entry block, with the Id of the function.
2016-08-11 11:24:51 -04:00
qining
23266c9b56 Add back the missing msg about --eliminate-dead-const 2016-08-10 19:44:18 -04:00