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 \ 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 \ nosanitize_coverage 142 \ null_pointer_is_valid 143 \ optforfuzzing 144 \ optnone 145 \ optsize 146 \ personality 147 \ preallocated 148 \ private 149 \ protected 150 \ ptx_device 151 \ ptx_kernel 152 \ readnone 153 \ readonly 154 \ release 155 \ returned 156 \ returns_twice 157 \ safestack 158 \ sanitize_address 159 \ sanitize_hwaddress 160 \ sanitize_memory 161 \ sanitize_memtag 162 \ sanitize_thread 163 \ section 164 \ seq_cst 165 \ shadowcallstack 166 \ sideeffect 167 \ signext 168 \ source_filename 169 \ speculatable 170 \ speculative_load_hardening 171 \ spir_func 172 \ spir_kernel 173 \ sret 174 \ ssp 175 \ sspreq 176 \ sspstrong 177 \ strictfp 178 \ swiftcc 179 \ swifterror 180 \ swifttailcc 181 \ swiftself 182 \ syncscope 183 \ tail 184 \ tailcc 185 \ target 186 \ thread_local 187 \ to 188 \ triple 189 \ unnamed_addr 190 \ unordered 191 \ uselistorder 192 \ uselistorder_bb 193 \ uwtable 194 \ volatile 195 \ weak 196 \ weak_odr 197 \ willreturn 198 \ win64cc 199 \ within 200 \ writeonly 201 \ x86_64_sysvcc 202 \ x86_fastcallcc 203 \ x86_stdcallcc 204 \ x86_thiscallcc 205 \ zeroext 206 207" Obsolete keywords. 208syn keyword llvmError getresult begin end 209 210" Misc syntax. 211syn match llvmNoName /[%@!]\d\+\>/ 212syn match llvmNumber /-\?\<\d\+\>/ 213syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/ 214syn match llvmFloat /\<0x\x\+\>/ 215syn keyword llvmBoolean true false 216syn keyword llvmConstant zeroinitializer undef null none poison vscale 217syn match llvmComment /;.*$/ 218syn region llvmString start=/"/ skip=/\\"/ end=/"/ 219syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/ 220syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/ 221 222" Named metadata and specialized metadata keywords. 223syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/ 224syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/ 225syn match llvmType /!\zs\a\+\ze\s*(/ 226syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/ 227syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/ 228syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/ 229syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/ 230syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/ 231syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/ 232 233" Syntax-highlight lit test commands and bug numbers. 234syn match llvmSpecialComment /;\s*PR\d*\s*$/ 235syn match llvmSpecialComment /;\s*REQUIRES:.*$/ 236syn match llvmSpecialComment /;\s*RUN:.*$/ 237syn match llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/ 238syn match llvmSpecialComment /;\s*CHECK:.*$/ 239syn match llvmSpecialComment /;\s*CHECK-EMPTY:\s*$/ 240syn match llvmSpecialComment /\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL|COUNT-\d+):.*$/ 241syn match llvmSpecialComment /;\s*XFAIL:.*$/ 242 243if version >= 508 || !exists("did_c_syn_inits") 244 if version < 508 245 let did_c_syn_inits = 1 246 command -nargs=+ HiLink hi link <args> 247 else 248 command -nargs=+ HiLink hi def link <args> 249 endif 250 251 HiLink llvmType Type 252 HiLink llvmStatement Statement 253 HiLink llvmNumber Number 254 HiLink llvmComment Comment 255 HiLink llvmString String 256 HiLink llvmLabel Label 257 HiLink llvmKeyword Keyword 258 HiLink llvmBoolean Boolean 259 HiLink llvmFloat Float 260 HiLink llvmNoName Identifier 261 HiLink llvmConstant Constant 262 HiLink llvmSpecialComment SpecialComment 263 HiLink llvmError Error 264 HiLink llvmIdentifier Identifier 265 266 delcommand HiLink 267endif 268 269let b:current_syntax = "llvm" 270