diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 77d766f..b5da9e6 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,7 @@
+2015-05-30  Mikhail Maltsev  <maltsevm@gmail.com>
+
+	* gimple.vim: New file.
+
 2015-05-18  Tom de Vries  <tom@codesourcery.com>
 
 	* check_GNU_style.sh: Add temp files tmp2 and tmp3.
diff --git a/contrib/gimple.vim b/contrib/gimple.vim
new file mode 100644
index 0000000..6334dfa
--- /dev/null
+++ b/contrib/gimple.vim
@@ -0,0 +1,139 @@
+" Syntax highlighting rules for GIMPLE dump files (for Vim).
+"
+" Copyright (C) 2015 Free Software Foundation, Inc.
+"
+" This script is free software; you can redistribute it and/or modify
+" it under the terms of the GNU General Public License as published by
+" the Free Software Foundation; either version 3, or (at your option)
+" any later version
+"
+" This Vim script highlights syntax in debug dumps containing GIMPLE
+" intermediate representation.  Such dumps are produced by GCC when
+" it is invoked with -fdump-tree-* and/or -fdump-ipa-* switches.  Tested
+" in Vim 7.4 (but should also work with earlier versions).
+"
+" INSTALLATION:
+" 1. Copy the script into $HOME/.vim/syntax directory
+" 2. Create a file gimple.vim in $HOME/.vim/ftdetect directory with the
+"    following command in it:
+"
+" au BufRead,BufNewFile *.[0-2][0-9][0-9][ti].* set filetype=gimple
+"
+" The pattern in this autocommand corresponds to default file names
+" of debug dumps, e.g.:
+" filename.cc.123t.pass-name
+
+
+" Do not continue, if syntax is already enabled in current buffer.
+if exists("b:current_syntax")
+    finish
+endif
+
+" If this variable is set to true, "Unknown tree" in -fdump-tree-original will
+" be highlighted as an error.
+let s:unknown_tree_is_error=0
+
+" Comments for Phi nodes, value ranges, use/def-chains, etc.
+syn match   gimpleAnnotation    "\v#.*$"
+            \ contains=gimpleAnnotationOp, gimpleAnnotationMark,
+            \ gimpleNumber, gimpleLineNo
+syn match   gimpleAnnotationMark    "#" contained
+syn keyword gimpleAnnotationOp    PHI VUSE VDEF RANGE PT USE CLB
+            \ ALIGN MISALIGN NONZERO contained
+
+" General-purpose comments.
+syn match   gimpleComment       ";;.*$"
+
+" Types - mostly borrowed from original Vim syntax file for C
+syn keyword     gimpleType  int long short char void
+            \ signed unsigned float double
+            \ size_t ssize_t off_t wchar_t ptrdiff_t sig_atomic_t fpos_t
+            \ clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t
+            \ mbstate_t wctrans_t wint_t wctype_t
+            \ _Bool bool _Complex complex _Imaginary imaginary
+            \ int8_t int16_t int32_t int64_t
+            \ uint8_t uint16_t uint32_t uint64_t
+            \ int_least8_t int_least16_t int_least32_t int_least64_t
+            \ uint_least8_t uint_least16_t uint_least32_t uint_least64_t
+            \ int_fast8_t int_fast16_t int_fast32_t int_fast64_t
+            \ uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
+            \ intptr_t uintptr_t
+            \ intmax_t uintmax_t
+            \ __label__ __complex__ __volatile__
+            \ char16_t char32_t sizetype __vtbl_ptr_type
+
+" C/C++-like control structures
+syn keyword gimpleStatement     goto return
+syn keyword gimpleConditional   if else
+syn keyword gimpleLoop          while
+syn keyword gimpleException     try catch finally
+
+" Special 'values'
+syn match   gimpleConstant      "{CLOBBER}"
+syn match   gimpleConstant      "{ref-all}"
+syn match   gimpleConstant      "{v}"
+
+" Blocks
+syn region  gimpleBlock         start="{" end="}" transparent fold
+
+" String literals
+syn region  gimpleString        start=/\v"/ skip=/\v\\./ end=/\v"/
+
+" GENERIC AST nodes
+syn keyword gimpleASTNode       BIT_FIELD_REF TARGET_EXPR expr_stmt
+            \ NON_LVALUE_EXPR
+            \ must_not_throw_expr eh_spec_block eh_filter
+            \ eh_must_not_throw aggr_init_expr cleanup_point
+
+if s:unknown_tree_is_error
+    syn match   gimpleUnknownTree   "\vUnknown tree: \w+"
+end
+
+" Numbers
+syn match   gimpleNumber        "\v([^.a-zA-Z0-9_])\zs-?\d+B?"
+syn match   gimpleFloat         "\v\W\zs-?\d*\.\d+(e\+\d+)?"
+
+" Basic block label
+" <bb 123>:
+syn match   gimpleLabel         "\v^\s*\zs\<bb \d+\>"
+" <D.1234>:
+" <L1>:
+syn match   gimpleLabel         "\v^\s*\zs\<[DL]\.?\d+\>"
+" label: - user-defined label
+" bb1L.1:
+syn match   gimpleLabel         "\v^\s*[a-zA-Z0-9._]+\ze:\s*$"
+
+" Match label after goto to suppress highlighting of numbers inside
+syn match   gimpleGotoLabel     "\v<bb \d+\>[^:]"
+
+" Line numbers, generated with -fdump-tree-*-lineno
+syn match   gimpleLineNo        "\v\[[^\]]+:\d+:\d+\]"
+
+" Misc C/C++-like keywords
+syn keyword gimpleStructure     struct union enum typedef class
+syn keyword gimpleStorageClass  static register auto volatile extern const
+            \ template inline __attribute__ _Alignas alignas _Atomic
+            \ _Thread_local thread_local _Alignof alignof sizeof
+
+hi def link gimpleType          Type
+hi def link gimpleNumber        Number
+hi def link gimpleFloat         Float
+hi def link gimpleConstant      Constant
+hi def link gimpleStructure     Structure
+hi def link gimpleStorageClass  StorageClass
+hi def link gimpleOperator      Operator
+hi def link gimpleASTNode       Operator
+hi def link gimpleStatement     Statement
+hi def link gimpleConditional   Conditional
+hi def link gimpleLoop          Repeat
+hi def link gimpleException     Exception
+hi def link gimpleComment       Comment
+hi def link gimpleLineNo        Comment
+hi def link gimpleLabel         Label
+hi def link gimpleAnnotationOp  Debug
+hi def link gimpleAnnotationMark Debug
+hi def link gimpleString        String
+hi def link gimpleUnknownTree   Error
+
+let b:current_syntax = "gimple"
+
