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