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 ptr 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 fneg fpext 29syn keyword llvmStatement fptosi fptoui fptrunc free freeze frem fsub 30syn keyword llvmStatement getelementptr icmp inbounds indirectbr insertelement 31syn keyword llvmStatement insertvalue inttoptr invoke landingpad load lshr 32syn keyword llvmStatement malloc max min mul nand ne ninf nnan nsw nsz nuw oeq 33syn keyword llvmStatement oge ogt ole olt one or ord phi ptrtoint resume ret 34syn keyword llvmStatement sdiv select sext sge sgt shl shufflevector sitofp 35syn keyword llvmStatement sle slt srem store sub switch trunc udiv ueq uge ugt 36syn keyword llvmStatement uitofp ule ult umax umin une uno unreachable unwind 37syn keyword llvmStatement urem va_arg 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 \ no_cfi 128 \ noduplicate 129 \ nofree 130 \ noimplicitfloat 131 \ noinline 132 \ nomerge 133 \ nonlazybind 134 \ nonnull 135 \ noprofile 136 \ norecurse 137 \ noredzone 138 \ noreturn 139 \ nosync 140 \ noundef 141 \ nounwind 142 \ nosanitize_bounds 143 \ nosanitize_coverage 144 \ null_pointer_is_valid 145 \ optforfuzzing 146 \ optnone 147 \ optsize 148 \ personality 149 \ preallocated 150 \ private 151 \ protected 152 \ ptx_device 153 \ ptx_kernel 154 \ readnone 155 \ readonly 156 \ release 157 \ returned 158 \ returns_twice 159 \ safestack 160 \ sanitize_address 161 \ sanitize_hwaddress 162 \ sanitize_memory 163 \ sanitize_memtag 164 \ sanitize_thread 165 \ section 166 \ seq_cst 167 \ shadowcallstack 168 \ sideeffect 169 \ signext 170 \ source_filename 171 \ speculatable 172 \ speculative_load_hardening 173 \ spir_func 174 \ spir_kernel 175 \ sret 176 \ ssp 177 \ sspreq 178 \ sspstrong 179 \ strictfp 180 \ swiftcc 181 \ swifterror 182 \ swifttailcc 183 \ swiftself 184 \ syncscope 185 \ tail 186 \ tailcc 187 \ target 188 \ thread_local 189 \ to 190 \ triple 191 \ unnamed_addr 192 \ unordered 193 \ uselistorder 194 \ uselistorder_bb 195 \ uwtable 196 \ volatile 197 \ weak 198 \ weak_odr 199 \ willreturn 200 \ win64cc 201 \ within 202 \ writeonly 203 \ x86_64_sysvcc 204 \ x86_fastcallcc 205 \ x86_stdcallcc 206 \ x86_thiscallcc 207 \ zeroext 208 209" Obsolete keywords. 210syn keyword llvmError getresult begin end 211 212" Misc syntax. 213syn match llvmNoName /[%@!]\d\+\>/ 214syn match llvmNumber /-\?\<\d\+\>/ 215syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/ 216syn match llvmFloat /\<0x\x\+\>/ 217syn keyword llvmBoolean true false 218syn keyword llvmConstant zeroinitializer undef null none poison vscale 219syn match llvmComment /;.*$/ 220syn region llvmString start=/"/ skip=/\\"/ end=/"/ 221syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/ 222syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/ 223 224" Named metadata and specialized metadata keywords. 225syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/ 226syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/ 227syn match llvmType /!\zs\a\+\ze\s*(/ 228syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/ 229syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/ 230syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/ 231syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/ 232syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/ 233syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/ 234 235" Syntax-highlight lit test commands and bug numbers. 236syn match llvmSpecialComment /;\s*PR\d*\s*$/ 237syn match llvmSpecialComment /;\s*REQUIRES:.*$/ 238syn match llvmSpecialComment /;\s*RUN:.*$/ 239syn match llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/ 240syn match llvmSpecialComment /;\s*CHECK:.*$/ 241syn match llvmSpecialComment /;\s*CHECK-EMPTY:\s*$/ 242syn match llvmSpecialComment /\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL|COUNT-\d+):.*$/ 243syn match llvmSpecialComment /;\s*XFAIL:.*$/ 244 245if version >= 508 || !exists("did_c_syn_inits") 246 if version < 508 247 let did_c_syn_inits = 1 248 command -nargs=+ HiLink hi link <args> 249 else 250 command -nargs=+ HiLink hi def link <args> 251 endif 252 253 HiLink llvmType Type 254 HiLink llvmStatement Statement 255 HiLink llvmNumber Number 256 HiLink llvmComment Comment 257 HiLink llvmString String 258 HiLink llvmLabel Label 259 HiLink llvmKeyword Keyword 260 HiLink llvmBoolean Boolean 261 HiLink llvmFloat Float 262 HiLink llvmNoName Identifier 263 HiLink llvmConstant Constant 264 HiLink llvmSpecialComment SpecialComment 265 HiLink llvmError Error 266 HiLink llvmIdentifier Identifier 267 268 delcommand HiLink 269endif 270 271let b:current_syntax = "llvm" 272