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