blob: b4104f9dfe6146602c751e0df7997cb68a304681 [file] [log] [blame]
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +00001" Vim syntax file
Misha Brukmand8acf7c2003-06-03 00:56:09 +00002" Language: llvm
Reid Spencerc67a0602006-03-14 05:54:52 +00003" Maintainer: The LLVM team, http://llvm.org/
Misha Brukmand8acf7c2003-06-03 00:56:09 +00004" Updated: 2003-06-02
Nick Hildenbrandt37e690a2002-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 Gohman29ad9bf2009-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 Gohmand63d9fe2008-01-29 12:35:50 +000017syn keyword llvmType void float double
18syn keyword llvmType x86_fp80 fp128 ppc_fp128
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000019syn keyword llvmType type label opaque
Dan Gohmand63d9fe2008-01-29 12:35:50 +000020syn match llvmType /\<i\d\+\>/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000021
Dan Gohman29ad9bf2009-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 Gohmana5b96452009-06-04 22:49:04 +000025syn keyword llvmStatement add fadd sub fsub mul fmul
26syn keyword llvmStatement sdiv udiv fdiv srem urem frem
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000027syn keyword llvmStatement and or xor
Dan Gohmand63d9fe2008-01-29 12:35:50 +000028syn keyword llvmStatement icmp fcmp
29syn keyword llvmStatement eq ne ugt uge ult ule sgt sge slt sle
Dan Gohman29ad9bf2009-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
32syn keyword llvmStatement phi call select shl lshr ashr va_arg
Dan Gohmand63d9fe2008-01-29 12:35:50 +000033syn keyword llvmStatement trunc zext sext
34syn keyword llvmStatement fptrunc fpext fptoui fptosi uitofp sitofp
35syn keyword llvmStatement ptrtoint inttoptr bitcast
Chris Lattner5a02a3e2004-10-16 18:24:35 +000036syn keyword llvmStatement ret br switch invoke unwind unreachable
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000037syn keyword llvmStatement malloc alloca free load store getelementptr
Dan Gohmand63d9fe2008-01-29 12:35:50 +000038syn keyword llvmStatement extractelement insertelement shufflevector
Dan Gohman29ad9bf2009-01-04 23:09:38 +000039syn keyword llvmStatement extractvalue insertvalue
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000040
Dan Gohman29ad9bf2009-01-04 23:09:38 +000041" Keywords.
42syn keyword llvmKeyword define declare global constant
43syn keyword llvmKeyword internal external
Duncan Sands12da8ce2009-03-07 15:45:40 +000044syn keyword llvmKeyword linkonce linkonce_odr weak weak_odr appending
Duncan Sands4581beb2009-03-11 20:14:15 +000045syn keyword llvmKeyword common extern_weak
Dan Gohman29ad9bf2009-01-04 23:09:38 +000046syn keyword llvmKeyword thread_local dllimport dllexport
Dan Gohman30517ec2009-01-05 17:44:11 +000047syn keyword llvmKeyword hidden protected default
Dan Gohman29ad9bf2009-01-04 23:09:38 +000048syn keyword llvmKeyword except deplibs
49syn keyword llvmKeyword volatile fastcc coldcc cc ccc
50syn keyword llvmKeyword x86_stdcallcc x86_fastcallcc
51syn keyword llvmKeyword signext zeroext inreg sret nounwind noreturn
52syn keyword llvmKeyword nocapture byval nest readnone readonly
53syn keyword llvmKeyword noinline alwaysinline optsize ssp sspreq
54syn keyword llvmKeyword module asm align tail to
Dan Gohman2c4353d2009-01-05 03:22:02 +000055syn keyword llvmKeyword addrspace section alias sideeffect c gc
Dan Gohman29ad9bf2009-01-04 23:09:38 +000056syn keyword llvmKeyword target datalayout triple
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000057
Dan Gohman29ad9bf2009-01-04 23:09:38 +000058" Obsolete keywords.
59syn keyword llvmError uninitialized implementation
Dan Gohman2c4353d2009-01-05 03:22:02 +000060syn keyword llvmError getresult big little endian begin end
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000061
Dan Gohman29ad9bf2009-01-04 23:09:38 +000062" Misc syntax.
63syn match llvmIgnore /[%@]\d\+\>/
64syn match llvmNumber /-\?\<\d\+\>/
65syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
66syn match llvmFloat /\<0x\x\+\>/
67syn keyword llvmBoolean true false
68syn keyword llvmConstant zeroinitializer undef null
69syn match llvmComment /;.*$/
70syn region llvmString start=/"/ skip=/\\"/ end=/"/
71syn match llvmLabel /[\-a-zA-Z\$._0-9]*:/
72
73" Syntax-highlight dejagnu test commands.
74syn match llvmSpecialComment /;\s*RUN:.*$/
75syn match llvmSpecialComment /;\s*PR\d*\s*$/
76syn match llvmSpecialComment /;\s*END\.\s*$/
77syn match llvmSpecialComment /;\s*XFAIL:.*$/
78syn match llvmSpecialComment /;\s*XTARGET:.*$/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000079
80if version >= 508 || !exists("did_c_syn_inits")
81 if version < 508
82 let did_c_syn_inits = 1
83 command -nargs=+ HiLink hi link <args>
84 else
85 command -nargs=+ HiLink hi def link <args>
86 endif
87
88 HiLink llvmType Type
89 HiLink llvmStatement Statement
90 HiLink llvmNumber Number
91 HiLink llvmComment Comment
92 HiLink llvmString String
93 HiLink llvmLabel Label
Dan Gohman29ad9bf2009-01-04 23:09:38 +000094 HiLink llvmKeyword Keyword
95 HiLink llvmBoolean Boolean
96 HiLink llvmFloat Float
97 HiLink llvmIgnore Ignore
98 HiLink llvmConstant Constant
99 HiLink llvmSpecialComment SpecialComment
100 HiLink llvmError Error
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000101
102 delcommand HiLink
103endif
Misha Brukmanac7b4562009-01-02 16:26:14 +0000104
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000105let b:current_syntax = "llvm"