blob: 2edba8e5ae8391241dbe215c127ebddb92ccbbe1 [file] [log] [blame]
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +00001" Vim syntax file
Misha Brukman5981d782003-06-03 00:56:09 +00002" Language: llvm
Reid Spencer9dce2b32006-03-14 05:54:52 +00003" Maintainer: The LLVM team, http://llvm.org/
Misha Brukman5981d782003-06-03 00:56:09 +00004" Updated: 2003-06-02
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +00005
6if version < 600
7 syntax clear
8elseif exists("b:current_syntax")
9 finish
10endif
11
12syn case match
13
Dan Gohman5d8ab652009-01-04 23:09:38 +000014" Types.
15" Types also include struct, array, vector, etc. but these don't
16" benefit as much from having dedicated highlighting rules.
Dan Gohman0e9dfb02008-01-29 12:35:50 +000017syn keyword llvmType void float double
18syn keyword llvmType x86_fp80 fp128 ppc_fp128
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000019syn keyword llvmType type label opaque
Dan Gohman0e9dfb02008-01-29 12:35:50 +000020syn match llvmType /\<i\d\+\>/
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000021
Dan Gohman5d8ab652009-01-04 23:09:38 +000022" Instructions.
23" The true and false tokens can be used for comparison opcodes, but it's
24" much more common for these tokens to be used for boolean constants.
Dan Gohman0e9dfb02008-01-29 12:35:50 +000025syn keyword llvmStatement add sub mul sdiv udiv fdiv srem urem frem
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000026syn keyword llvmStatement and or xor
Dan Gohman0e9dfb02008-01-29 12:35:50 +000027syn keyword llvmStatement icmp fcmp
28syn keyword llvmStatement eq ne ugt uge ult ule sgt sge slt sle
Dan Gohman5d8ab652009-01-04 23:09:38 +000029syn keyword llvmStatement oeq ogt oge olt ole one ord ueq ugt uge
30syn keyword llvmStatement ult ule une uno
31syn keyword llvmStatement phi call select shl lshr ashr va_arg
Dan Gohman0e9dfb02008-01-29 12:35:50 +000032syn keyword llvmStatement trunc zext sext
33syn keyword llvmStatement fptrunc fpext fptoui fptosi uitofp sitofp
34syn keyword llvmStatement ptrtoint inttoptr bitcast
Chris Lattner4c554c52004-10-16 18:24:35 +000035syn keyword llvmStatement ret br switch invoke unwind unreachable
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000036syn keyword llvmStatement malloc alloca free load store getelementptr
Dan Gohman0e9dfb02008-01-29 12:35:50 +000037syn keyword llvmStatement extractelement insertelement shufflevector
Dan Gohman5d8ab652009-01-04 23:09:38 +000038syn keyword llvmStatement extractvalue insertvalue
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000039
Dan Gohman5d8ab652009-01-04 23:09:38 +000040" Keywords.
41syn keyword llvmKeyword define declare global constant
42syn keyword llvmKeyword internal external
43syn keyword llvmKeyword linkonce weak appending common extern_weak
44syn keyword llvmKeyword thread_local dllimport dllexport
Dan Gohman1ed79422009-01-05 17:44:11 +000045syn keyword llvmKeyword hidden protected default
Dan Gohman5d8ab652009-01-04 23:09:38 +000046syn keyword llvmKeyword except deplibs
47syn keyword llvmKeyword volatile fastcc coldcc cc ccc
48syn keyword llvmKeyword x86_stdcallcc x86_fastcallcc
49syn keyword llvmKeyword signext zeroext inreg sret nounwind noreturn
50syn keyword llvmKeyword nocapture byval nest readnone readonly
51syn keyword llvmKeyword noinline alwaysinline optsize ssp sspreq
52syn keyword llvmKeyword module asm align tail to
Dan Gohman6a9e75e2009-01-05 03:22:02 +000053syn keyword llvmKeyword addrspace section alias sideeffect c gc
Dan Gohman5d8ab652009-01-04 23:09:38 +000054syn keyword llvmKeyword target datalayout triple
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000055
Dan Gohman5d8ab652009-01-04 23:09:38 +000056" Obsolete keywords.
57syn keyword llvmError uninitialized implementation
Dan Gohman6a9e75e2009-01-05 03:22:02 +000058syn keyword llvmError getresult big little endian begin end
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000059
Dan Gohman5d8ab652009-01-04 23:09:38 +000060" Misc syntax.
61syn match llvmIgnore /[%@]\d\+\>/
62syn match llvmNumber /-\?\<\d\+\>/
63syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
64syn match llvmFloat /\<0x\x\+\>/
65syn keyword llvmBoolean true false
66syn keyword llvmConstant zeroinitializer undef null
67syn match llvmComment /;.*$/
68syn region llvmString start=/"/ skip=/\\"/ end=/"/
69syn match llvmLabel /[\-a-zA-Z\$._0-9]*:/
70
71" Syntax-highlight dejagnu test commands.
72syn match llvmSpecialComment /;\s*RUN:.*$/
73syn match llvmSpecialComment /;\s*PR\d*\s*$/
74syn match llvmSpecialComment /;\s*END\.\s*$/
75syn match llvmSpecialComment /;\s*XFAIL:.*$/
76syn match llvmSpecialComment /;\s*XTARGET:.*$/
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000077
78if version >= 508 || !exists("did_c_syn_inits")
79 if version < 508
80 let did_c_syn_inits = 1
81 command -nargs=+ HiLink hi link <args>
82 else
83 command -nargs=+ HiLink hi def link <args>
84 endif
85
86 HiLink llvmType Type
87 HiLink llvmStatement Statement
88 HiLink llvmNumber Number
89 HiLink llvmComment Comment
90 HiLink llvmString String
91 HiLink llvmLabel Label
Dan Gohman5d8ab652009-01-04 23:09:38 +000092 HiLink llvmKeyword Keyword
93 HiLink llvmBoolean Boolean
94 HiLink llvmFloat Float
95 HiLink llvmIgnore Ignore
96 HiLink llvmConstant Constant
97 HiLink llvmSpecialComment SpecialComment
98 HiLink llvmError Error
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000099
100 delcommand HiLink
101endif
Misha Brukmanadf4e4d2009-01-02 16:26:14 +0000102
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +0000103let b:current_syntax = "llvm"