Finalize v2017.3
diff --git a/CHANGES b/CHANGES
index 815ea2f..43e55ef 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,25 +1,50 @@
 Revision history for SPIRV-Tools
 
-v2017.3-dev 2017-12-15
- - Start v2017.3-dev
+v2017.3 2018-01-12
  - General:
-   - Generate a SPIRV-Tools.pc file for pkg-config
+   - Support DebugInfo extended instruction set, targeted at OpenCL environments.
+     See the SPIR-V Registry.
+   - Generate a SPIRV-Tools.pc file for pkg-config.
  - Optimizer:
-   - Add Private-to-Function variable conversion for modules with logical
-     addressing
-   - Add --legalize-hlsl option to run transforms used to transform intermediate
-     code generated by HLSL to SPIR-V for Vulkan compilers.  Those compilers
-     normally run these transforms automatically.  This option is used for developing
-     those transforms.
+   - Progress for legalization of code generated from HLSL (issue #1118):
+     - Add --legalize-hlsl option to run transforms used to transform intermediate
+       code generated by HLSL to SPIR-V for Vulkan compilers.  Those compilers
+       normally run these transforms automatically.  This option is used for developing
+       those transforms.
+     - Add Private-to-Function variable conversion for modules with logical
+       addressing.
+   - Add --ccp: SSA Conditional Constant Propagation (CCP)
+   - Add --print-all to show disassembly for each optimization pass.
+   - Internal: Add loop descriptors and post-order tree iterator.
+   - Generalized dead branch elimination
+   - Aggressive dead code elimination (ADCE) now removes dead functions and
+     module-scope variables.
+   - Vector extract/insert elimination now optimizes through some cases of
+     VectorShuffle, and GLSL.std.450 Mix extended instruction.
  - Validator:
+   - Add validation for GLSL.std.450 extended instruction set.
+   - Check out of bounds composite accesses, where that's statically computable.
+     Fixes #1112.
    - Check upper bits of literal numbers that aren't a multiple of 32-bits wide.
    - More validation of primitive instructions
+   - Add optional "relaxed" checking logical addressing mode to permit some
+     cases of pointer-to-pointer.  Contributes to HLSL legalization (issue #1118).
  - Fixes:
    #1100: Validator: Image operand Sample can be used with OpImageSparseFetch,
-     OpImageSparseRead
+     OpImageSparseRead.
    #1108: Remove duplicates transform was incorrectly removing non-duplicate
      decorations.
-   #1111: Optimizer's type manager could reference deleted memory
+   #1111: Optimizer's type manager could reference deleted memory.
+   #1112: Fix decoration equality check, e.g. it is now symmetric.
+   #1129: Validator now disallows Dim=SupbassData for OpImageSparseRead.
+   #1143: Fix CCP: Was generating incorrect code for loops.
+   #1153: Fix CCP crash.
+   #1154: Optimizer's internal instruction-to-block mappings were sometimes
+       inconsistent.
+   #1159: Fix CCP infinite loop.
+   #1168: Fix dead branch elimination intermittently generating incorrect code.
+       Fixes https://github.com/KhronosGroup/glslang/issues/1205
+   #1186: Fix validation of PackDouble2x32 and UnpackDouble2x32
 
 v2017.2 2017-12-15
  - General: