blob: 25a8a5cd1adeb392772c67d2822756f9c2cc9d73 [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/
Dan Gohman1b9dd242010-02-26 21:38:04 +00004" Version: $Revision$
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.
Benjamin Kramer65e7c662012-12-02 16:40:38 +000017syn keyword llvmType void half float double x86_fp80 fp128 ppc_fp128
18syn keyword llvmType label metadata x86_mmx
Manuel Jacob5ced9092015-12-28 19:51:04 +000019syn keyword llvmType type label opaque token
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.
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +000025syn keyword llvmStatement add addrspacecast alloca and arcp ashr atomicrmw
26syn keyword llvmStatement bitcast br call cmpxchg eq exact extractelement
27syn keyword llvmStatement extractvalue fadd fast fcmp fdiv fence fmul fpext
28syn keyword llvmStatement fptosi fptoui fptrunc free frem fsub getelementptr
29syn keyword llvmStatement icmp inbounds indirectbr insertelement insertvalue
30syn keyword llvmStatement inttoptr invoke landingpad load lshr malloc max min
31syn keyword llvmStatement mul nand ne ninf nnan nsw nsz nuw oeq oge ogt ole
32syn keyword llvmStatement olt one or ord phi ptrtoint resume ret sdiv select
33syn keyword llvmStatement sext sge sgt shl shufflevector sitofp sle slt srem
34syn keyword llvmStatement store sub switch trunc udiv ueq uge ugt uitofp ule ult
35syn keyword llvmStatement umax umin une uno unreachable unwind urem va_arg
36syn keyword llvmStatement xchg xor zext
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000037
Dan Gohman29ad9bf2009-01-04 23:09:38 +000038" Keywords.
Kostya Serebryanycf880b92013-02-26 06:58:09 +000039syn keyword llvmKeyword acq_rel acquire sanitize_address addrspace alias align
Benjamin Kramer65e7c662012-12-02 16:40:38 +000040syn keyword llvmKeyword alignstack alwaysinline appending arm_aapcs_vfpcc
41syn keyword llvmKeyword arm_aapcscc arm_apcscc asm atomic available_externally
42syn keyword llvmKeyword blockaddress byval c catch cc ccc cleanup coldcc common
43syn keyword llvmKeyword constant datalayout declare default define deplibs
Duncan P. N. Exon Smith090a19b2015-01-08 22:38:29 +000044syn keyword llvmKeyword distinct dllexport dllimport except extern_weak external
Maksim Panchenkocce239c2015-09-29 22:09:16 +000045syn keyword llvmKeyword externally_initialized fastcc filter gc global hhvmcc
46syn keyword llvmKeyword hhvm_ccc hidden initialexec inlinehint inreg
47syn keyword llvmKeyword intel_ocl_bicc inteldialect internal linkonce
48syn keyword llvmKeyword linkonce_odr localdynamic localexec minsize module
49syn keyword llvmKeyword monotonic msp430_intrcc musttail naked nest
Saleem Abdulrasool9fa3dd42014-12-12 21:52:44 +000050syn keyword llvmKeyword noalias nocapture noimplicitfloat noinline nonlazybind
51syn keyword llvmKeyword noredzone noreturn nounwind optnone optsize personality
52syn keyword llvmKeyword private protected ptx_device ptx_kernel readnone
53syn keyword llvmKeyword readonly release returns_twice sanitize_thread
54syn keyword llvmKeyword sanitize_memory section seq_cst sideeffect signext
55syn keyword llvmKeyword singlethread spir_func spir_kernel sret ssp sspreq
56syn keyword llvmKeyword sspstrong tail target thread_local to triple
57syn keyword llvmKeyword unnamed_addr unordered uwtable volatile weak weak_odr
58syn keyword llvmKeyword x86_fastcallcc x86_stdcallcc x86_thiscallcc
59syn keyword llvmKeyword x86_64_sysvcc x86_64_win64cc zeroext uselistorder
Jonathan Roelofs32eeb762015-09-03 20:10:40 +000060syn keyword llvmKeyword uselistorder_bb musttail
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000061
Dan Gohman29ad9bf2009-01-04 23:09:38 +000062" Obsolete keywords.
Dan Gohmand13b1a32010-08-28 20:14:05 +000063syn keyword llvmError getresult begin end
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000064
Dan Gohman29ad9bf2009-01-04 23:09:38 +000065" Misc syntax.
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +000066syn match llvmNoName /[%@!]\d\+\>/
Dan Gohman29ad9bf2009-01-04 23:09:38 +000067syn match llvmNumber /-\?\<\d\+\>/
68syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
69syn match llvmFloat /\<0x\x\+\>/
70syn keyword llvmBoolean true false
71syn keyword llvmConstant zeroinitializer undef null
72syn match llvmComment /;.*$/
73syn region llvmString start=/"/ skip=/\\"/ end=/"/
Dan Gohman62f05b22010-01-09 17:22:48 +000074syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
75syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
Dan Gohman29ad9bf2009-01-04 23:09:38 +000076
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +000077" Named metadata and specialized metadata keywords.
78syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
79syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
80syn match llvmType /!\zs\a\+\ze\s*(/
Duncan P. N. Exon Smith97486072015-02-03 21:56:01 +000081syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/
Duncan P. N. Exon Smithcd6636c2015-02-13 01:17:35 +000082syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
Duncan P. N. Exon Smith0c5c0122015-02-13 01:42:09 +000083syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smithaece2dc2015-02-13 01:21:25 +000084syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smith890533e2015-02-13 01:28:16 +000085syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
Duncan P. N. Exon Smith70ab3d22015-02-21 01:02:18 +000086syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +000087
Chandler Carruth60ec79e2015-07-15 01:48:40 +000088" Syntax-highlight lit test commands and bug numbers.
Dan Gohman29ad9bf2009-01-04 23:09:38 +000089syn match llvmSpecialComment /;\s*PR\d*\s*$/
Chandler Carruth60ec79e2015-07-15 01:48:40 +000090syn match llvmSpecialComment /;\s*REQUIRES:.*$/
91syn match llvmSpecialComment /;\s*RUN:.*$/
Dan Gohman29ad9bf2009-01-04 23:09:38 +000092syn match llvmSpecialComment /;\s*XFAIL:.*$/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000093
94if version >= 508 || !exists("did_c_syn_inits")
95 if version < 508
96 let did_c_syn_inits = 1
97 command -nargs=+ HiLink hi link <args>
98 else
99 command -nargs=+ HiLink hi def link <args>
100 endif
101
102 HiLink llvmType Type
103 HiLink llvmStatement Statement
104 HiLink llvmNumber Number
105 HiLink llvmComment Comment
106 HiLink llvmString String
107 HiLink llvmLabel Label
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000108 HiLink llvmKeyword Keyword
109 HiLink llvmBoolean Boolean
110 HiLink llvmFloat Float
Owen Andersonb2c657c2010-07-29 17:57:57 +0000111 HiLink llvmNoName Identifier
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000112 HiLink llvmConstant Constant
113 HiLink llvmSpecialComment SpecialComment
114 HiLink llvmError Error
Dan Gohman62f05b22010-01-09 17:22:48 +0000115 HiLink llvmIdentifier Identifier
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000116
117 delcommand HiLink
118endif
Misha Brukmanac7b4562009-01-02 16:26:14 +0000119
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000120let b:current_syntax = "llvm"