blob: 7b653e9d135521dca16576eeb29ea03e0edda6dd [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 Gohmanae3a0be2009-06-04 22:49:04 +000025syn keyword llvmStatement add fadd sub fsub mul fmul
26syn keyword llvmStatement sdiv udiv fdiv srem urem frem
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000027syn keyword llvmStatement and or xor
Dan Gohman0e9dfb02008-01-29 12:35:50 +000028syn keyword llvmStatement icmp fcmp
29syn keyword llvmStatement eq ne ugt uge ult ule sgt sge slt sle
Dan Gohman5d8ab652009-01-04 23:09:38 +000030syn keyword llvmStatement oeq ogt oge olt ole one ord ueq ugt uge
31syn keyword llvmStatement ult ule une uno
Dan Gohmand5c94702009-07-27 21:54:51 +000032syn keyword llvmStatement nuw nsw exact inbounds
Dan Gohman5d8ab652009-01-04 23:09:38 +000033syn keyword llvmStatement phi call select shl lshr ashr va_arg
Dan Gohman0e9dfb02008-01-29 12:35:50 +000034syn keyword llvmStatement trunc zext sext
35syn keyword llvmStatement fptrunc fpext fptoui fptosi uitofp sitofp
36syn keyword llvmStatement ptrtoint inttoptr bitcast
Chris Lattner4c554c52004-10-16 18:24:35 +000037syn keyword llvmStatement ret br switch invoke unwind unreachable
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000038syn keyword llvmStatement malloc alloca free load store getelementptr
Dan Gohman0e9dfb02008-01-29 12:35:50 +000039syn keyword llvmStatement extractelement insertelement shufflevector
Dan Gohman5d8ab652009-01-04 23:09:38 +000040syn keyword llvmStatement extractvalue insertvalue
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000041
Dan Gohman5d8ab652009-01-04 23:09:38 +000042" Keywords.
43syn keyword llvmKeyword define declare global constant
Dan Gohman21de0242009-07-17 01:06:53 +000044syn keyword llvmKeyword internal external private
Duncan Sands667d4b82009-03-07 15:45:40 +000045syn keyword llvmKeyword linkonce linkonce_odr weak weak_odr appending
Duncan Sands4dc2b392009-03-11 20:14:15 +000046syn keyword llvmKeyword common extern_weak
Dan Gohman5d8ab652009-01-04 23:09:38 +000047syn keyword llvmKeyword thread_local dllimport dllexport
Dan Gohman1ed79422009-01-05 17:44:11 +000048syn keyword llvmKeyword hidden protected default
Dan Gohman5d8ab652009-01-04 23:09:38 +000049syn keyword llvmKeyword except deplibs
50syn keyword llvmKeyword volatile fastcc coldcc cc ccc
51syn keyword llvmKeyword x86_stdcallcc x86_fastcallcc
52syn keyword llvmKeyword signext zeroext inreg sret nounwind noreturn
53syn keyword llvmKeyword nocapture byval nest readnone readonly
54syn keyword llvmKeyword noinline alwaysinline optsize ssp sspreq
55syn keyword llvmKeyword module asm align tail to
Dan Gohman6a9e75e2009-01-05 03:22:02 +000056syn keyword llvmKeyword addrspace section alias sideeffect c gc
Dan Gohman5d8ab652009-01-04 23:09:38 +000057syn keyword llvmKeyword target datalayout triple
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000058
Dan Gohman5d8ab652009-01-04 23:09:38 +000059" Obsolete keywords.
60syn keyword llvmError uninitialized implementation
Dan Gohman6a9e75e2009-01-05 03:22:02 +000061syn keyword llvmError getresult big little endian begin end
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000062
Dan Gohman5d8ab652009-01-04 23:09:38 +000063" Misc syntax.
64syn match llvmIgnore /[%@]\d\+\>/
65syn match llvmNumber /-\?\<\d\+\>/
66syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
67syn match llvmFloat /\<0x\x\+\>/
68syn keyword llvmBoolean true false
69syn keyword llvmConstant zeroinitializer undef null
70syn match llvmComment /;.*$/
71syn region llvmString start=/"/ skip=/\\"/ end=/"/
72syn match llvmLabel /[\-a-zA-Z\$._0-9]*:/
73
74" Syntax-highlight dejagnu test commands.
75syn match llvmSpecialComment /;\s*RUN:.*$/
76syn match llvmSpecialComment /;\s*PR\d*\s*$/
77syn match llvmSpecialComment /;\s*END\.\s*$/
78syn match llvmSpecialComment /;\s*XFAIL:.*$/
79syn match llvmSpecialComment /;\s*XTARGET:.*$/
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +000080
81if version >= 508 || !exists("did_c_syn_inits")
82 if version < 508
83 let did_c_syn_inits = 1
84 command -nargs=+ HiLink hi link <args>
85 else
86 command -nargs=+ HiLink hi def link <args>
87 endif
88
89 HiLink llvmType Type
90 HiLink llvmStatement Statement
91 HiLink llvmNumber Number
92 HiLink llvmComment Comment
93 HiLink llvmString String
94 HiLink llvmLabel Label
Dan Gohman5d8ab652009-01-04 23:09:38 +000095 HiLink llvmKeyword Keyword
96 HiLink llvmBoolean Boolean
97 HiLink llvmFloat Float
98 HiLink llvmIgnore Ignore
99 HiLink llvmConstant Constant
100 HiLink llvmSpecialComment SpecialComment
101 HiLink llvmError Error
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +0000102
103 delcommand HiLink
104endif
Misha Brukmanadf4e4d2009-01-02 16:26:14 +0000105
Nick Hildenbrandt75f79b92002-10-07 22:54:48 +0000106let b:current_syntax = "llvm"