1" Vim syntax file 2" Language: llvm 3" Maintainer: The LLVM team, http://llvm.org/ 4" Version: $Revision$ 5 6if version < 600 7 syntax clear 8elseif exists("b:current_syntax") 9 finish 10endif 11 12syn case match 13 14" Types. 15" Types also include struct, array, vector, etc. but these don't 16" benefit as much from having dedicated highlighting rules. 17syn keyword llvmType void half bfloat float double x86_fp80 fp128 ppc_fp128 18syn keyword llvmType label metadata x86_mmx x86_amx 19syn keyword llvmType type label opaque token 20syn match llvmType /\<i\d\+\>/ 21 22" 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. 25syn keyword llvmStatement add addrspacecast alloca and arcp ashr atomicrmw 26syn keyword llvmStatement bitcast br catchpad catchswitch catchret call callbr 27syn keyword llvmStatement cleanuppad cleanupret cmpxchg eq exact extractelement 28syn keyword llvmStatement extractvalue fadd fast fcmp fdiv fence fmul fpext 29syn keyword llvmStatement fptosi fptoui fptrunc free frem fsub fneg getelementptr 30syn keyword llvmStatement icmp inbounds indirectbr insertelement insertvalue 31syn keyword llvmStatement inttoptr invoke landingpad load lshr malloc max min 32syn keyword llvmStatement mul nand ne ninf nnan nsw nsz nuw oeq oge ogt ole 33syn keyword llvmStatement olt one or ord phi ptrtoint resume ret sdiv select 34syn keyword llvmStatement sext sge sgt shl shufflevector sitofp sle slt srem 35syn keyword llvmStatement store sub switch trunc udiv ueq uge ugt uitofp ule ult 36syn keyword llvmStatement umax umin une uno unreachable unwind urem va_arg 37syn keyword llvmStatement xchg xor zext 38 39" Keywords. 40syn keyword llvmKeyword 41 \ acq_rel 42 \ acquire 43 \ addrspace 44 \ alias 45 \ align 46 \ alignstack 47 \ allocsize 48 \ alwaysinline 49 \ appending 50 \ argmemonly 51 \ arm_aapcs_vfpcc 52 \ arm_aapcscc 53 \ arm_apcscc 54 \ asm 55 \ atomic 56 \ available_externally 57 \ blockaddress 58 \ builtin 59 \ byref 60 \ byval 61 \ c 62 \ caller 63 \ catch 64 \ cc 65 \ ccc 66 \ cleanup 67 \ cold 68 \ coldcc 69 \ comdat 70 \ common 71 \ constant 72 \ convergent 73 \ datalayout 74 \ declare 75 \ default 76 \ define 77 \ deplibs 78 \ dereferenceable 79 \ dereferenceable_or_null 80 \ distinct 81 \ dllexport 82 \ dllimport 83 \ dso_local 84 \ dso_preemptable 85 \ except 86 \ extern_weak 87 \ external 88 \ externally_initialized 89 \ fastcc 90 \ filter 91 \ from 92 \ gc 93 \ global 94 \ hhvm_ccc 95 \ hhvmcc 96 \ hidden 97 \ hot 98 \ immarg 99 \ inaccessiblemem_or_argmemonly 100 \ inaccessiblememonly 101 \ inalloca 102 \ initialexec 103 \ inlinehint 104 \ inreg 105 \ intel_ocl_bicc 106 \ inteldialect 107 \ internal 108 \ jumptable 109 \ linkonce 110 \ linkonce_odr 111 \ local_unnamed_addr 112 \ localdynamic 113 \ localexec 114 \ minsize 115 \ module 116 \ monotonic 117 \ msp430_intrcc 118 \ mustprogress 119 \ musttail 120 \ naked 121 \ nest 122 \ noalias 123 \ nobuiltin 124 \ nocallback 125 \ nocapture 126 \ nocf_check 127 \ noduplicate 128 \ nofree 129 \ noimplicitfloat 130 \ noinline 131 \ nomerge 132 \ nonlazybind 133 \ nonnull 134 \ noprofile 135 \ norecurse 136 \ noredzone 137 \ noreturn 138 \ nosync 139 \ noundef 140 \ nounwind 141 \ null_pointer_is_valid 142 \ optforfuzzing 143 \ optnone 144 \ optsize 145 \ personality 146 \ preallocated 147 \ private 148 \ protected 149 \ ptx_device 150 \ ptx_kernel 151 \ readnone 152 \ readonly 153 \ release 154 \ returned 155 \ returns_twice 156 \ safestack 157 \ sanitize_address 158 \ sanitize_hwaddress 159 \ sanitize_memory 160 \ sanitize_memtag 161 \ sanitize_thread 162 \ section 163 \ seq_cst 164 \ shadowcallstack 165 \ sideeffect 166 \ signext 167 \ source_filename 168 \ speculatable 169 \ speculative_load_hardening 170 \ spir_func 171 \ spir_kernel 172 \ sret 173 \ ssp 174 \ sspreq 175 \ sspstrong 176 \ strictfp 177 \ swiftcc 178 \ swifterror 179 \ swiftself 180 \ syncscope 181 \ tail 182 \ tailcc 183 \ target 184 \ thread_local 185 \ to 186 \ triple 187 \ unnamed_addr 188 \ unordered 189 \ uselistorder 190 \ uselistorder_bb 191 \ uwtable 192 \ volatile 193 \ weak 194 \ weak_odr 195 \ willreturn 196 \ win64cc 197 \ within 198 \ writeonly 199 \ x86_64_sysvcc 200 \ x86_fastcallcc 201 \ x86_stdcallcc 202 \ x86_thiscallcc 203 \ zeroext 204 205" Obsolete keywords. 206syn keyword llvmError getresult begin end 207 208" Misc syntax. 209syn match llvmNoName /[%@!]\d\+\>/ 210syn match llvmNumber /-\?\<\d\+\>/ 211syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/ 212syn match llvmFloat /\<0x\x\+\>/ 213syn keyword llvmBoolean true false 214syn keyword llvmConstant zeroinitializer undef null none poison 215syn match llvmComment /;.*$/ 216syn region llvmString start=/"/ skip=/\\"/ end=/"/ 217syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/ 218syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/ 219 220" Named metadata and specialized metadata keywords. 221syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/ 222syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/ 223syn match llvmType /!\zs\a\+\ze\s*(/ 224syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/ 225syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/ 226syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/ 227syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/ 228syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/ 229syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/ 230 231" Syntax-highlight lit test commands and bug numbers. 232syn match llvmSpecialComment /;\s*PR\d*\s*$/ 233syn match llvmSpecialComment /;\s*REQUIRES:.*$/ 234syn match llvmSpecialComment /;\s*RUN:.*$/ 235syn match llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/ 236syn match llvmSpecialComment /;\s*CHECK:.*$/ 237syn match llvmSpecialComment "\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL):.*$" 238syn match llvmSpecialComment /;\s*XFAIL:.*$/ 239 240if version >= 508 || !exists("did_c_syn_inits") 241 if version < 508 242 let did_c_syn_inits = 1 243 command -nargs=+ HiLink hi link <args> 244 else 245 command -nargs=+ HiLink hi def link <args> 246 endif 247 248 HiLink llvmType Type 249 HiLink llvmStatement Statement 250 HiLink llvmNumber Number 251 HiLink llvmComment Comment 252 HiLink llvmString String 253 HiLink llvmLabel Label 254 HiLink llvmKeyword Keyword 255 HiLink llvmBoolean Boolean 256 HiLink llvmFloat Float 257 HiLink llvmNoName Identifier 258 HiLink llvmConstant Constant 259 HiLink llvmSpecialComment SpecialComment 260 HiLink llvmError Error 261 HiLink llvmIdentifier Identifier 262 263 delcommand HiLink 264endif 265 266let b:current_syntax = "llvm" 267