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 float double x86_fp80 fp128 ppc_fp128 18syn keyword llvmType label metadata x86_mmx 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 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 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 \ alwaysinline 48 \ appending 49 \ argmemonly 50 \ arm_aapcscc 51 \ arm_aapcs_vfpcc 52 \ arm_apcscc 53 \ asm 54 \ atomic 55 \ available_externally 56 \ blockaddress 57 \ byval 58 \ c 59 \ catch 60 \ caller 61 \ cc 62 \ ccc 63 \ cleanup 64 \ coldcc 65 \ common 66 \ constant 67 \ datalayout 68 \ declare 69 \ default 70 \ define 71 \ deplibs 72 \ dereferenceable 73 \ distinct 74 \ dllexport 75 \ dllimport 76 \ except 77 \ external 78 \ externally_initialized 79 \ extern_weak 80 \ fastcc 81 \ filter 82 \ from 83 \ gc 84 \ global 85 \ hhvmcc 86 \ hhvm_ccc 87 \ hidden 88 \ initialexec 89 \ inlinehint 90 \ inreg 91 \ inteldialect 92 \ intel_ocl_bicc 93 \ internal 94 \ linkonce 95 \ linkonce_odr 96 \ localdynamic 97 \ localexec 98 \ local_unnamed_addr 99 \ minsize 100 \ module 101 \ monotonic 102 \ msp430_intrcc 103 \ musttail 104 \ naked 105 \ nest 106 \ noalias 107 \ nocapture 108 \ noimplicitfloat 109 \ noinline 110 \ nonlazybind 111 \ noredzone 112 \ noreturn 113 \ nounwind 114 \ optnone 115 \ optsize 116 \ personality 117 \ private 118 \ protected 119 \ ptx_device 120 \ ptx_kernel 121 \ readnone 122 \ readonly 123 \ release 124 \ returns_twice 125 \ sanitize_address 126 \ sanitize_memory 127 \ sanitize_thread 128 \ section 129 \ seq_cst 130 \ sideeffect 131 \ signext 132 \ singlethread 133 \ source_filename 134 \ spir_func 135 \ spir_kernel 136 \ sret 137 \ ssp 138 \ sspreq 139 \ sspstrong 140 \ swiftcc 141 \ tail 142 \ target 143 \ thread_local 144 \ to 145 \ triple 146 \ unnamed_addr 147 \ unordered 148 \ uselistorder 149 \ uselistorder_bb 150 \ uwtable 151 \ volatile 152 \ weak 153 \ weak_odr 154 \ within 155 \ writeonly 156 \ x86_64_sysvcc 157 \ x86_64_win64cc 158 \ x86_fastcallcc 159 \ x86_stdcallcc 160 \ x86_thiscallcc 161 \ zeroext 162 163" Obsolete keywords. 164syn keyword llvmError getresult begin end 165 166" Misc syntax. 167syn match llvmNoName /[%@!]\d\+\>/ 168syn match llvmNumber /-\?\<\d\+\>/ 169syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/ 170syn match llvmFloat /\<0x\x\+\>/ 171syn keyword llvmBoolean true false 172syn keyword llvmConstant zeroinitializer undef null none 173syn match llvmComment /;.*$/ 174syn region llvmString start=/"/ skip=/\\"/ end=/"/ 175syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/ 176syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/ 177 178" Named metadata and specialized metadata keywords. 179syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/ 180syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/ 181syn match llvmType /!\zs\a\+\ze\s*(/ 182syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/ 183syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/ 184syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/ 185syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/ 186syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/ 187syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/ 188 189" Syntax-highlight lit test commands and bug numbers. 190syn match llvmSpecialComment /;\s*PR\d*\s*$/ 191syn match llvmSpecialComment /;\s*REQUIRES:.*$/ 192syn match llvmSpecialComment /;\s*RUN:.*$/ 193syn match llvmSpecialComment /;\s*XFAIL:.*$/ 194 195if version >= 508 || !exists("did_c_syn_inits") 196 if version < 508 197 let did_c_syn_inits = 1 198 command -nargs=+ HiLink hi link <args> 199 else 200 command -nargs=+ HiLink hi def link <args> 201 endif 202 203 HiLink llvmType Type 204 HiLink llvmStatement Statement 205 HiLink llvmNumber Number 206 HiLink llvmComment Comment 207 HiLink llvmString String 208 HiLink llvmLabel Label 209 HiLink llvmKeyword Keyword 210 HiLink llvmBoolean Boolean 211 HiLink llvmFloat Float 212 HiLink llvmNoName Identifier 213 HiLink llvmConstant Constant 214 HiLink llvmSpecialComment SpecialComment 215 HiLink llvmError Error 216 HiLink llvmIdentifier Identifier 217 218 delcommand HiLink 219endif 220 221let b:current_syntax = "llvm" 222