From 231aa4a5c44820aca8e4672590c6351285971cdf Mon Sep 17 00:00:00 2001 From: "mdevan.foobar" Date: Mon, 23 Feb 2009 11:24:12 +0000 Subject: [PATCH] Code cleanup, pylint, updated README, CHANGELOG git-svn-id: http://llvm-py.googlecode.com/svn/trunk@67 8d1e9007-1d4e-0410-b67e-1979fd6579aa --- CHANGELOG | 12 + README | 14 +- llvm/__init__.py | 16 +- llvm/_intrinsic_ids.py | 647 +++++++++++++++++++++++++++ llvm/_util.py | 26 +- llvm/core.py | 986 ++++++++++------------------------------- llvm/ee.py | 26 +- llvm/passes.py | 22 +- setup.py | 20 +- test/example.py | 90 ++-- test/issue10.py | 1 + test/operands.py | 96 ++-- test/testall.py | 21 +- 13 files changed, 1055 insertions(+), 922 deletions(-) create mode 100644 llvm/_intrinsic_ids.py diff --git a/CHANGELOG b/CHANGELOG index 197a1ae..a1e25a2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,16 @@ +0.6, in progress: + + * Fetch operands of instructions (Seth Warn). + * Unaliased objects (with Seth Warn). + * Value factory, more Constant subclasses. + * Module.link_in and Instruction.is_volatile (Seth Warn). + * Fix Builder.position_at_beginning crash (Issue #10). + * Builds on gentoo. + * Code cleanup. + * Migrate to LLVM 2.5. + + 0.5, 22-Nov-2008: * Added vicmp, vfcmp instructions and constant expressions. diff --git a/README b/README index aed7e30..238f8d7 100644 --- a/README +++ b/README @@ -12,19 +12,19 @@ Home page: Versions: --------- - This package will work only with LLVM 2.4 release version. If you need - llvm-py for LLVM 2.3, use the 0.4 version of llvm-py. + This package will work only with LLVM 2.5 (currently in pre-release + testing). If you need llvm-py for LLVM 2.4, use the 0.5 version of llvm-py. Quickstart: ----------- - 1. Get 2.4 version of LLVM, build it. Make sure '--enable-pic' is passed to - LLVM's 'configure'. + 1. Get 2.5 version of LLVM, build it. Make sure '--enable-pic' is passed to + LLVM's 'configure'. (Currently, you've to get it from LLVM SVN). - 2. Unpack llvm-py, build and install: + 2. Get llvm-py from SVN, install it: - $ tar jxvf llvm-py-0.5.tar.bz2 - $ cd llvm-py-0.5 + $ svn co http://llvm-py.googlecode.com/svn/trunk/ llvm-py + $ cd llvm-py # Locate llvm-config, usually under /Release/bin $ sudo python setup.py install --llvm-config=/path/to/llvm-config diff --git a/llvm/__init__.py b/llvm/__init__.py index 2a95cef..2533cae 100644 --- a/llvm/__init__.py +++ b/llvm/__init__.py @@ -1,20 +1,20 @@ -# +# # Copyright (c) 2008, Mahadevan R All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: -# +# # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# -# * Neither the name of this software, nor the names of its +# +# * Neither the name of this software, nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -26,7 +26,7 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# +# """Common classes related to LLVM. diff --git a/llvm/_intrinsic_ids.py b/llvm/_intrinsic_ids.py new file mode 100644 index 0000000..538793b --- /dev/null +++ b/llvm/_intrinsic_ids.py @@ -0,0 +1,647 @@ +# +# Copyright (c) 2008, Mahadevan R All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# * Neither the name of this software, nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +"""Intrinsic IDs. + +Intended to be imported into the llvm.core namespace. Not for public use.""" + + +INTR_ALPHA_UMULH = 1 +INTR_ANNOTATION = 2 +INTR_ARM_THREAD_POINTER = 3 +INTR_ATOMIC_CMP_SWAP = 4 +INTR_ATOMIC_LOAD_ADD = 5 +INTR_ATOMIC_LOAD_AND = 6 +INTR_ATOMIC_LOAD_MAX = 7 +INTR_ATOMIC_LOAD_MIN = 8 +INTR_ATOMIC_LOAD_NAND = 9 +INTR_ATOMIC_LOAD_OR = 10 +INTR_ATOMIC_LOAD_SUB = 11 +INTR_ATOMIC_LOAD_UMAX = 12 +INTR_ATOMIC_LOAD_UMIN = 13 +INTR_ATOMIC_LOAD_XOR = 14 +INTR_ATOMIC_SWAP = 15 +INTR_BSWAP = 16 +INTR_CONVERTFF = 17 +INTR_CONVERTFSI = 18 +INTR_CONVERTFUI = 19 +INTR_CONVERTSIF = 20 +INTR_CONVERTSS = 21 +INTR_CONVERTSU = 22 +INTR_CONVERTUIF = 23 +INTR_CONVERTUS = 24 +INTR_CONVERTUU = 25 +INTR_COS = 26 +INTR_CTLZ = 27 +INTR_CTPOP = 28 +INTR_CTTZ = 29 +INTR_DBG_DECLARE = 30 +INTR_DBG_FUNC_START = 31 +INTR_DBG_REGION_END = 32 +INTR_DBG_REGION_START = 33 +INTR_DBG_STOPPOINT = 34 +INTR_EH_DWARF_CFA = 35 +INTR_EH_EXCEPTION = 36 +INTR_EH_RETURN_I32 = 37 +INTR_EH_RETURN_I64 = 38 +INTR_EH_SELECTOR_I32 = 39 +INTR_EH_SELECTOR_I64 = 40 +INTR_EH_TYPEID_FOR_I32 = 41 +INTR_EH_TYPEID_FOR_I64 = 42 +INTR_EH_UNWIND_INIT = 43 +INTR_EXP = 44 +INTR_EXP2 = 45 +INTR_FLT_ROUNDS = 46 +INTR_FRAMEADDRESS = 47 +INTR_GCREAD = 48 +INTR_GCROOT = 49 +INTR_GCWRITE = 50 +INTR_INIT_TRAMPOLINE = 51 +INTR_LOG = 52 +INTR_LOG10 = 53 +INTR_LOG2 = 54 +INTR_LONGJMP = 55 +INTR_MEMCPY = 56 +INTR_MEMMOVE = 57 +INTR_MEMORY_BARRIER = 58 +INTR_MEMSET = 59 +INTR_PART_SELECT = 60 +INTR_PART_SET = 61 +INTR_PCMARKER = 62 +INTR_POW = 63 +INTR_POWI = 64 +INTR_PPC_ALTIVEC_DSS = 65 +INTR_PPC_ALTIVEC_DSSALL = 66 +INTR_PPC_ALTIVEC_DST = 67 +INTR_PPC_ALTIVEC_DSTST = 68 +INTR_PPC_ALTIVEC_DSTSTT = 69 +INTR_PPC_ALTIVEC_DSTT = 70 +INTR_PPC_ALTIVEC_LVEBX = 71 +INTR_PPC_ALTIVEC_LVEHX = 72 +INTR_PPC_ALTIVEC_LVEWX = 73 +INTR_PPC_ALTIVEC_LVSL = 74 +INTR_PPC_ALTIVEC_LVSR = 75 +INTR_PPC_ALTIVEC_LVX = 76 +INTR_PPC_ALTIVEC_LVXL = 77 +INTR_PPC_ALTIVEC_MFVSCR = 78 +INTR_PPC_ALTIVEC_MTVSCR = 79 +INTR_PPC_ALTIVEC_STVEBX = 80 +INTR_PPC_ALTIVEC_STVEHX = 81 +INTR_PPC_ALTIVEC_STVEWX = 82 +INTR_PPC_ALTIVEC_STVX = 83 +INTR_PPC_ALTIVEC_STVXL = 84 +INTR_PPC_ALTIVEC_VADDCUW = 85 +INTR_PPC_ALTIVEC_VADDSBS = 86 +INTR_PPC_ALTIVEC_VADDSHS = 87 +INTR_PPC_ALTIVEC_VADDSWS = 88 +INTR_PPC_ALTIVEC_VADDUBS = 89 +INTR_PPC_ALTIVEC_VADDUHS = 90 +INTR_PPC_ALTIVEC_VADDUWS = 91 +INTR_PPC_ALTIVEC_VAVGSB = 92 +INTR_PPC_ALTIVEC_VAVGSH = 93 +INTR_PPC_ALTIVEC_VAVGSW = 94 +INTR_PPC_ALTIVEC_VAVGUB = 95 +INTR_PPC_ALTIVEC_VAVGUH = 96 +INTR_PPC_ALTIVEC_VAVGUW = 97 +INTR_PPC_ALTIVEC_VCFSX = 98 +INTR_PPC_ALTIVEC_VCFUX = 99 +INTR_PPC_ALTIVEC_VCMPBFP = 100 +INTR_PPC_ALTIVEC_VCMPBFP_P = 101 +INTR_PPC_ALTIVEC_VCMPEQFP = 102 +INTR_PPC_ALTIVEC_VCMPEQFP_P = 103 +INTR_PPC_ALTIVEC_VCMPEQUB = 104 +INTR_PPC_ALTIVEC_VCMPEQUB_P = 105 +INTR_PPC_ALTIVEC_VCMPEQUH = 106 +INTR_PPC_ALTIVEC_VCMPEQUH_P = 107 +INTR_PPC_ALTIVEC_VCMPEQUW = 108 +INTR_PPC_ALTIVEC_VCMPEQUW_P = 109 +INTR_PPC_ALTIVEC_VCMPGEFP = 110 +INTR_PPC_ALTIVEC_VCMPGEFP_P = 111 +INTR_PPC_ALTIVEC_VCMPGTFP = 112 +INTR_PPC_ALTIVEC_VCMPGTFP_P = 113 +INTR_PPC_ALTIVEC_VCMPGTSB = 114 +INTR_PPC_ALTIVEC_VCMPGTSB_P = 115 +INTR_PPC_ALTIVEC_VCMPGTSH = 116 +INTR_PPC_ALTIVEC_VCMPGTSH_P = 117 +INTR_PPC_ALTIVEC_VCMPGTSW = 118 +INTR_PPC_ALTIVEC_VCMPGTSW_P = 119 +INTR_PPC_ALTIVEC_VCMPGTUB = 120 +INTR_PPC_ALTIVEC_VCMPGTUB_P = 121 +INTR_PPC_ALTIVEC_VCMPGTUH = 122 +INTR_PPC_ALTIVEC_VCMPGTUH_P = 123 +INTR_PPC_ALTIVEC_VCMPGTUW = 124 +INTR_PPC_ALTIVEC_VCMPGTUW_P = 125 +INTR_PPC_ALTIVEC_VCTSXS = 126 +INTR_PPC_ALTIVEC_VCTUXS = 127 +INTR_PPC_ALTIVEC_VEXPTEFP = 128 +INTR_PPC_ALTIVEC_VLOGEFP = 129 +INTR_PPC_ALTIVEC_VMADDFP = 130 +INTR_PPC_ALTIVEC_VMAXFP = 131 +INTR_PPC_ALTIVEC_VMAXSB = 132 +INTR_PPC_ALTIVEC_VMAXSH = 133 +INTR_PPC_ALTIVEC_VMAXSW = 134 +INTR_PPC_ALTIVEC_VMAXUB = 135 +INTR_PPC_ALTIVEC_VMAXUH = 136 +INTR_PPC_ALTIVEC_VMAXUW = 137 +INTR_PPC_ALTIVEC_VMHADDSHS = 138 +INTR_PPC_ALTIVEC_VMHRADDSHS = 139 +INTR_PPC_ALTIVEC_VMINFP = 140 +INTR_PPC_ALTIVEC_VMINSB = 141 +INTR_PPC_ALTIVEC_VMINSH = 142 +INTR_PPC_ALTIVEC_VMINSW = 143 +INTR_PPC_ALTIVEC_VMINUB = 144 +INTR_PPC_ALTIVEC_VMINUH = 145 +INTR_PPC_ALTIVEC_VMINUW = 146 +INTR_PPC_ALTIVEC_VMLADDUHM = 147 +INTR_PPC_ALTIVEC_VMSUMMBM = 148 +INTR_PPC_ALTIVEC_VMSUMSHM = 149 +INTR_PPC_ALTIVEC_VMSUMSHS = 150 +INTR_PPC_ALTIVEC_VMSUMUBM = 151 +INTR_PPC_ALTIVEC_VMSUMUHM = 152 +INTR_PPC_ALTIVEC_VMSUMUHS = 153 +INTR_PPC_ALTIVEC_VMULESB = 154 +INTR_PPC_ALTIVEC_VMULESH = 155 +INTR_PPC_ALTIVEC_VMULEUB = 156 +INTR_PPC_ALTIVEC_VMULEUH = 157 +INTR_PPC_ALTIVEC_VMULOSB = 158 +INTR_PPC_ALTIVEC_VMULOSH = 159 +INTR_PPC_ALTIVEC_VMULOUB = 160 +INTR_PPC_ALTIVEC_VMULOUH = 161 +INTR_PPC_ALTIVEC_VNMSUBFP = 162 +INTR_PPC_ALTIVEC_VPERM = 163 +INTR_PPC_ALTIVEC_VPKPX = 164 +INTR_PPC_ALTIVEC_VPKSHSS = 165 +INTR_PPC_ALTIVEC_VPKSHUS = 166 +INTR_PPC_ALTIVEC_VPKSWSS = 167 +INTR_PPC_ALTIVEC_VPKSWUS = 168 +INTR_PPC_ALTIVEC_VPKUHUS = 169 +INTR_PPC_ALTIVEC_VPKUWUS = 170 +INTR_PPC_ALTIVEC_VREFP = 171 +INTR_PPC_ALTIVEC_VRFIM = 172 +INTR_PPC_ALTIVEC_VRFIN = 173 +INTR_PPC_ALTIVEC_VRFIP = 174 +INTR_PPC_ALTIVEC_VRFIZ = 175 +INTR_PPC_ALTIVEC_VRLB = 176 +INTR_PPC_ALTIVEC_VRLH = 177 +INTR_PPC_ALTIVEC_VRLW = 178 +INTR_PPC_ALTIVEC_VRSQRTEFP = 179 +INTR_PPC_ALTIVEC_VSEL = 180 +INTR_PPC_ALTIVEC_VSL = 181 +INTR_PPC_ALTIVEC_VSLB = 182 +INTR_PPC_ALTIVEC_VSLH = 183 +INTR_PPC_ALTIVEC_VSLO = 184 +INTR_PPC_ALTIVEC_VSLW = 185 +INTR_PPC_ALTIVEC_VSR = 186 +INTR_PPC_ALTIVEC_VSRAB = 187 +INTR_PPC_ALTIVEC_VSRAH = 188 +INTR_PPC_ALTIVEC_VSRAW = 189 +INTR_PPC_ALTIVEC_VSRB = 190 +INTR_PPC_ALTIVEC_VSRH = 191 +INTR_PPC_ALTIVEC_VSRO = 192 +INTR_PPC_ALTIVEC_VSRW = 193 +INTR_PPC_ALTIVEC_VSUBCUW = 194 +INTR_PPC_ALTIVEC_VSUBSBS = 195 +INTR_PPC_ALTIVEC_VSUBSHS = 196 +INTR_PPC_ALTIVEC_VSUBSWS = 197 +INTR_PPC_ALTIVEC_VSUBUBS = 198 +INTR_PPC_ALTIVEC_VSUBUHS = 199 +INTR_PPC_ALTIVEC_VSUBUWS = 200 +INTR_PPC_ALTIVEC_VSUM2SWS = 201 +INTR_PPC_ALTIVEC_VSUM4SBS = 202 +INTR_PPC_ALTIVEC_VSUM4SHS = 203 +INTR_PPC_ALTIVEC_VSUM4UBS = 204 +INTR_PPC_ALTIVEC_VSUMSWS = 205 +INTR_PPC_ALTIVEC_VUPKHPX = 206 +INTR_PPC_ALTIVEC_VUPKHSB = 207 +INTR_PPC_ALTIVEC_VUPKHSH = 208 +INTR_PPC_ALTIVEC_VUPKLPX = 209 +INTR_PPC_ALTIVEC_VUPKLSB = 210 +INTR_PPC_ALTIVEC_VUPKLSH = 211 +INTR_PPC_DCBA = 212 +INTR_PPC_DCBF = 213 +INTR_PPC_DCBI = 214 +INTR_PPC_DCBST = 215 +INTR_PPC_DCBT = 216 +INTR_PPC_DCBTST = 217 +INTR_PPC_DCBZ = 218 +INTR_PPC_DCBZL = 219 +INTR_PPC_SYNC = 220 +INTR_PREFETCH = 221 +INTR_PTR_ANNOTATION = 222 +INTR_READCYCLECOUNTER = 223 +INTR_RETURNADDRESS = 224 +INTR_SADD_WITH_OVERFLOW = 225 +INTR_SETJMP = 226 +INTR_SIGLONGJMP = 227 +INTR_SIGSETJMP = 228 +INTR_SIN = 229 +INTR_SMUL_WITH_OVERFLOW = 230 +INTR_SPU_SI_A = 231 +INTR_SPU_SI_ADDX = 232 +INTR_SPU_SI_AH = 233 +INTR_SPU_SI_AHI = 234 +INTR_SPU_SI_AI = 235 +INTR_SPU_SI_AND = 236 +INTR_SPU_SI_ANDBI = 237 +INTR_SPU_SI_ANDC = 238 +INTR_SPU_SI_ANDHI = 239 +INTR_SPU_SI_ANDI = 240 +INTR_SPU_SI_BG = 241 +INTR_SPU_SI_BGX = 242 +INTR_SPU_SI_CEQ = 243 +INTR_SPU_SI_CEQB = 244 +INTR_SPU_SI_CEQBI = 245 +INTR_SPU_SI_CEQH = 246 +INTR_SPU_SI_CEQHI = 247 +INTR_SPU_SI_CEQI = 248 +INTR_SPU_SI_CG = 249 +INTR_SPU_SI_CGT = 250 +INTR_SPU_SI_CGTB = 251 +INTR_SPU_SI_CGTBI = 252 +INTR_SPU_SI_CGTH = 253 +INTR_SPU_SI_CGTHI = 254 +INTR_SPU_SI_CGTI = 255 +INTR_SPU_SI_CGX = 256 +INTR_SPU_SI_CLGT = 257 +INTR_SPU_SI_CLGTB = 258 +INTR_SPU_SI_CLGTBI = 259 +INTR_SPU_SI_CLGTH = 260 +INTR_SPU_SI_CLGTHI = 261 +INTR_SPU_SI_CLGTI = 262 +INTR_SPU_SI_DFA = 263 +INTR_SPU_SI_DFM = 264 +INTR_SPU_SI_DFMA = 265 +INTR_SPU_SI_DFMS = 266 +INTR_SPU_SI_DFNMA = 267 +INTR_SPU_SI_DFNMS = 268 +INTR_SPU_SI_DFS = 269 +INTR_SPU_SI_FA = 270 +INTR_SPU_SI_FCEQ = 271 +INTR_SPU_SI_FCGT = 272 +INTR_SPU_SI_FCMEQ = 273 +INTR_SPU_SI_FCMGT = 274 +INTR_SPU_SI_FM = 275 +INTR_SPU_SI_FMA = 276 +INTR_SPU_SI_FMS = 277 +INTR_SPU_SI_FNMS = 278 +INTR_SPU_SI_FS = 279 +INTR_SPU_SI_FSMBI = 280 +INTR_SPU_SI_MPY = 281 +INTR_SPU_SI_MPYA = 282 +INTR_SPU_SI_MPYH = 283 +INTR_SPU_SI_MPYHH = 284 +INTR_SPU_SI_MPYHHA = 285 +INTR_SPU_SI_MPYHHAU = 286 +INTR_SPU_SI_MPYHHU = 287 +INTR_SPU_SI_MPYI = 288 +INTR_SPU_SI_MPYS = 289 +INTR_SPU_SI_MPYU = 290 +INTR_SPU_SI_MPYUI = 291 +INTR_SPU_SI_NAND = 292 +INTR_SPU_SI_NOR = 293 +INTR_SPU_SI_OR = 294 +INTR_SPU_SI_ORBI = 295 +INTR_SPU_SI_ORC = 296 +INTR_SPU_SI_ORHI = 297 +INTR_SPU_SI_ORI = 298 +INTR_SPU_SI_SF = 299 +INTR_SPU_SI_SFH = 300 +INTR_SPU_SI_SFHI = 301 +INTR_SPU_SI_SFI = 302 +INTR_SPU_SI_SFX = 303 +INTR_SPU_SI_SHLI = 304 +INTR_SPU_SI_SHLQBI = 305 +INTR_SPU_SI_SHLQBII = 306 +INTR_SPU_SI_SHLQBY = 307 +INTR_SPU_SI_SHLQBYI = 308 +INTR_SPU_SI_XOR = 309 +INTR_SPU_SI_XORBI = 310 +INTR_SPU_SI_XORHI = 311 +INTR_SPU_SI_XORI = 312 +INTR_SQRT = 313 +INTR_SSUB_WITH_OVERFLOW = 314 +INTR_STACKPROTECTOR = 315 +INTR_STACKRESTORE = 316 +INTR_STACKSAVE = 317 +INTR_TRAP = 318 +INTR_UADD_WITH_OVERFLOW = 319 +INTR_UMUL_WITH_OVERFLOW = 320 +INTR_USUB_WITH_OVERFLOW = 321 +INTR_VACOPY = 322 +INTR_VAEND = 323 +INTR_VAR_ANNOTATION = 324 +INTR_VASTART = 325 +INTR_X86_MMX_EMMS = 326 +INTR_X86_MMX_FEMMS = 327 +INTR_X86_MMX_MASKMOVQ = 328 +INTR_X86_MMX_MOVNT_DQ = 329 +INTR_X86_MMX_PACKSSDW = 330 +INTR_X86_MMX_PACKSSWB = 331 +INTR_X86_MMX_PACKUSWB = 332 +INTR_X86_MMX_PADDS_B = 333 +INTR_X86_MMX_PADDS_W = 334 +INTR_X86_MMX_PADDUS_B = 335 +INTR_X86_MMX_PADDUS_W = 336 +INTR_X86_MMX_PAVG_B = 337 +INTR_X86_MMX_PAVG_W = 338 +INTR_X86_MMX_PCMPEQ_B = 339 +INTR_X86_MMX_PCMPEQ_D = 340 +INTR_X86_MMX_PCMPEQ_W = 341 +INTR_X86_MMX_PCMPGT_B = 342 +INTR_X86_MMX_PCMPGT_D = 343 +INTR_X86_MMX_PCMPGT_W = 344 +INTR_X86_MMX_PMADD_WD = 345 +INTR_X86_MMX_PMAXS_W = 346 +INTR_X86_MMX_PMAXU_B = 347 +INTR_X86_MMX_PMINS_W = 348 +INTR_X86_MMX_PMINU_B = 349 +INTR_X86_MMX_PMOVMSKB = 350 +INTR_X86_MMX_PMULH_W = 351 +INTR_X86_MMX_PMULHU_W = 352 +INTR_X86_MMX_PMULU_DQ = 353 +INTR_X86_MMX_PSAD_BW = 354 +INTR_X86_MMX_PSLL_D = 355 +INTR_X86_MMX_PSLL_Q = 356 +INTR_X86_MMX_PSLL_W = 357 +INTR_X86_MMX_PSLLI_D = 358 +INTR_X86_MMX_PSLLI_Q = 359 +INTR_X86_MMX_PSLLI_W = 360 +INTR_X86_MMX_PSRA_D = 361 +INTR_X86_MMX_PSRA_W = 362 +INTR_X86_MMX_PSRAI_D = 363 +INTR_X86_MMX_PSRAI_W = 364 +INTR_X86_MMX_PSRL_D = 365 +INTR_X86_MMX_PSRL_Q = 366 +INTR_X86_MMX_PSRL_W = 367 +INTR_X86_MMX_PSRLI_D = 368 +INTR_X86_MMX_PSRLI_Q = 369 +INTR_X86_MMX_PSRLI_W = 370 +INTR_X86_MMX_PSUBS_B = 371 +INTR_X86_MMX_PSUBS_W = 372 +INTR_X86_MMX_PSUBUS_B = 373 +INTR_X86_MMX_PSUBUS_W = 374 +INTR_X86_SSE2_ADD_SD = 375 +INTR_X86_SSE2_CLFLUSH = 376 +INTR_X86_SSE2_CMP_PD = 377 +INTR_X86_SSE2_CMP_SD = 378 +INTR_X86_SSE2_COMIEQ_SD = 379 +INTR_X86_SSE2_COMIGE_SD = 380 +INTR_X86_SSE2_COMIGT_SD = 381 +INTR_X86_SSE2_COMILE_SD = 382 +INTR_X86_SSE2_COMILT_SD = 383 +INTR_X86_SSE2_COMINEQ_SD = 384 +INTR_X86_SSE2_CVTDQ2PD = 385 +INTR_X86_SSE2_CVTDQ2PS = 386 +INTR_X86_SSE2_CVTPD2DQ = 387 +INTR_X86_SSE2_CVTPD2PS = 388 +INTR_X86_SSE2_CVTPS2DQ = 389 +INTR_X86_SSE2_CVTPS2PD = 390 +INTR_X86_SSE2_CVTSD2SI = 391 +INTR_X86_SSE2_CVTSD2SI64 = 392 +INTR_X86_SSE2_CVTSD2SS = 393 +INTR_X86_SSE2_CVTSI2SD = 394 +INTR_X86_SSE2_CVTSI642SD = 395 +INTR_X86_SSE2_CVTSS2SD = 396 +INTR_X86_SSE2_CVTTPD2DQ = 397 +INTR_X86_SSE2_CVTTPS2DQ = 398 +INTR_X86_SSE2_CVTTSD2SI = 399 +INTR_X86_SSE2_CVTTSD2SI64 = 400 +INTR_X86_SSE2_DIV_SD = 401 +INTR_X86_SSE2_LFENCE = 402 +INTR_X86_SSE2_LOADU_DQ = 403 +INTR_X86_SSE2_LOADU_PD = 404 +INTR_X86_SSE2_MASKMOV_DQU = 405 +INTR_X86_SSE2_MAX_PD = 406 +INTR_X86_SSE2_MAX_SD = 407 +INTR_X86_SSE2_MFENCE = 408 +INTR_X86_SSE2_MIN_PD = 409 +INTR_X86_SSE2_MIN_SD = 410 +INTR_X86_SSE2_MOVMSK_PD = 411 +INTR_X86_SSE2_MOVNT_DQ = 412 +INTR_X86_SSE2_MOVNT_I = 413 +INTR_X86_SSE2_MOVNT_PD = 414 +INTR_X86_SSE2_MUL_SD = 415 +INTR_X86_SSE2_PACKSSDW_128 = 416 +INTR_X86_SSE2_PACKSSWB_128 = 417 +INTR_X86_SSE2_PACKUSWB_128 = 418 +INTR_X86_SSE2_PADDS_B = 419 +INTR_X86_SSE2_PADDS_W = 420 +INTR_X86_SSE2_PADDUS_B = 421 +INTR_X86_SSE2_PADDUS_W = 422 +INTR_X86_SSE2_PAVG_B = 423 +INTR_X86_SSE2_PAVG_W = 424 +INTR_X86_SSE2_PCMPEQ_B = 425 +INTR_X86_SSE2_PCMPEQ_D = 426 +INTR_X86_SSE2_PCMPEQ_W = 427 +INTR_X86_SSE2_PCMPGT_B = 428 +INTR_X86_SSE2_PCMPGT_D = 429 +INTR_X86_SSE2_PCMPGT_W = 430 +INTR_X86_SSE2_PMADD_WD = 431 +INTR_X86_SSE2_PMAXS_W = 432 +INTR_X86_SSE2_PMAXU_B = 433 +INTR_X86_SSE2_PMINS_W = 434 +INTR_X86_SSE2_PMINU_B = 435 +INTR_X86_SSE2_PMOVMSKB_128 = 436 +INTR_X86_SSE2_PMULH_W = 437 +INTR_X86_SSE2_PMULHU_W = 438 +INTR_X86_SSE2_PMULU_DQ = 439 +INTR_X86_SSE2_PSAD_BW = 440 +INTR_X86_SSE2_PSLL_D = 441 +INTR_X86_SSE2_PSLL_DQ = 442 +INTR_X86_SSE2_PSLL_DQ_BS = 443 +INTR_X86_SSE2_PSLL_Q = 444 +INTR_X86_SSE2_PSLL_W = 445 +INTR_X86_SSE2_PSLLI_D = 446 +INTR_X86_SSE2_PSLLI_Q = 447 +INTR_X86_SSE2_PSLLI_W = 448 +INTR_X86_SSE2_PSRA_D = 449 +INTR_X86_SSE2_PSRA_W = 450 +INTR_X86_SSE2_PSRAI_D = 451 +INTR_X86_SSE2_PSRAI_W = 452 +INTR_X86_SSE2_PSRL_D = 453 +INTR_X86_SSE2_PSRL_DQ = 454 +INTR_X86_SSE2_PSRL_DQ_BS = 455 +INTR_X86_SSE2_PSRL_Q = 456 +INTR_X86_SSE2_PSRL_W = 457 +INTR_X86_SSE2_PSRLI_D = 458 +INTR_X86_SSE2_PSRLI_Q = 459 +INTR_X86_SSE2_PSRLI_W = 460 +INTR_X86_SSE2_PSUBS_B = 461 +INTR_X86_SSE2_PSUBS_W = 462 +INTR_X86_SSE2_PSUBUS_B = 463 +INTR_X86_SSE2_PSUBUS_W = 464 +INTR_X86_SSE2_SQRT_PD = 465 +INTR_X86_SSE2_SQRT_SD = 466 +INTR_X86_SSE2_STOREL_DQ = 467 +INTR_X86_SSE2_STOREU_DQ = 468 +INTR_X86_SSE2_STOREU_PD = 469 +INTR_X86_SSE2_SUB_SD = 470 +INTR_X86_SSE2_UCOMIEQ_SD = 471 +INTR_X86_SSE2_UCOMIGE_SD = 472 +INTR_X86_SSE2_UCOMIGT_SD = 473 +INTR_X86_SSE2_UCOMILE_SD = 474 +INTR_X86_SSE2_UCOMILT_SD = 475 +INTR_X86_SSE2_UCOMINEQ_SD = 476 +INTR_X86_SSE3_ADDSUB_PD = 477 +INTR_X86_SSE3_ADDSUB_PS = 478 +INTR_X86_SSE3_HADD_PD = 479 +INTR_X86_SSE3_HADD_PS = 480 +INTR_X86_SSE3_HSUB_PD = 481 +INTR_X86_SSE3_HSUB_PS = 482 +INTR_X86_SSE3_LDU_DQ = 483 +INTR_X86_SSE3_MONITOR = 484 +INTR_X86_SSE3_MWAIT = 485 +INTR_X86_SSE41_BLENDPD = 486 +INTR_X86_SSE41_BLENDPS = 487 +INTR_X86_SSE41_BLENDVPD = 488 +INTR_X86_SSE41_BLENDVPS = 489 +INTR_X86_SSE41_DPPD = 490 +INTR_X86_SSE41_DPPS = 491 +INTR_X86_SSE41_EXTRACTPS = 492 +INTR_X86_SSE41_INSERTPS = 493 +INTR_X86_SSE41_MOVNTDQA = 494 +INTR_X86_SSE41_MPSADBW = 495 +INTR_X86_SSE41_PACKUSDW = 496 +INTR_X86_SSE41_PBLENDVB = 497 +INTR_X86_SSE41_PBLENDW = 498 +INTR_X86_SSE41_PCMPEQQ = 499 +INTR_X86_SSE41_PEXTRB = 500 +INTR_X86_SSE41_PEXTRD = 501 +INTR_X86_SSE41_PEXTRQ = 502 +INTR_X86_SSE41_PHMINPOSUW = 503 +INTR_X86_SSE41_PINSRB = 504 +INTR_X86_SSE41_PMAXSB = 505 +INTR_X86_SSE41_PMAXSD = 506 +INTR_X86_SSE41_PMAXUD = 507 +INTR_X86_SSE41_PMAXUW = 508 +INTR_X86_SSE41_PMINSB = 509 +INTR_X86_SSE41_PMINSD = 510 +INTR_X86_SSE41_PMINUD = 511 +INTR_X86_SSE41_PMINUW = 512 +INTR_X86_SSE41_PMOVSXBD = 513 +INTR_X86_SSE41_PMOVSXBQ = 514 +INTR_X86_SSE41_PMOVSXBW = 515 +INTR_X86_SSE41_PMOVSXDQ = 516 +INTR_X86_SSE41_PMOVSXWD = 517 +INTR_X86_SSE41_PMOVSXWQ = 518 +INTR_X86_SSE41_PMOVZXBD = 519 +INTR_X86_SSE41_PMOVZXBQ = 520 +INTR_X86_SSE41_PMOVZXBW = 521 +INTR_X86_SSE41_PMOVZXDQ = 522 +INTR_X86_SSE41_PMOVZXWD = 523 +INTR_X86_SSE41_PMOVZXWQ = 524 +INTR_X86_SSE41_PMULDQ = 525 +INTR_X86_SSE41_PMULLD = 526 +INTR_X86_SSE41_ROUND_PD = 527 +INTR_X86_SSE41_ROUND_PS = 528 +INTR_X86_SSE41_ROUND_SD = 529 +INTR_X86_SSE41_ROUND_SS = 530 +INTR_X86_SSE42_PCMPGTQ = 531 +INTR_X86_SSE_ADD_SS = 532 +INTR_X86_SSE_CMP_PS = 533 +INTR_X86_SSE_CMP_SS = 534 +INTR_X86_SSE_COMIEQ_SS = 535 +INTR_X86_SSE_COMIGE_SS = 536 +INTR_X86_SSE_COMIGT_SS = 537 +INTR_X86_SSE_COMILE_SS = 538 +INTR_X86_SSE_COMILT_SS = 539 +INTR_X86_SSE_COMINEQ_SS = 540 +INTR_X86_SSE_CVTPD2PI = 541 +INTR_X86_SSE_CVTPI2PD = 542 +INTR_X86_SSE_CVTPI2PS = 543 +INTR_X86_SSE_CVTPS2PI = 544 +INTR_X86_SSE_CVTSI2SS = 545 +INTR_X86_SSE_CVTSI642SS = 546 +INTR_X86_SSE_CVTSS2SI = 547 +INTR_X86_SSE_CVTSS2SI64 = 548 +INTR_X86_SSE_CVTTPD2PI = 549 +INTR_X86_SSE_CVTTPS2PI = 550 +INTR_X86_SSE_CVTTSS2SI = 551 +INTR_X86_SSE_CVTTSS2SI64 = 552 +INTR_X86_SSE_DIV_SS = 553 +INTR_X86_SSE_LDMXCSR = 554 +INTR_X86_SSE_LOADU_PS = 555 +INTR_X86_SSE_MAX_PS = 556 +INTR_X86_SSE_MAX_SS = 557 +INTR_X86_SSE_MIN_PS = 558 +INTR_X86_SSE_MIN_SS = 559 +INTR_X86_SSE_MOVMSK_PS = 560 +INTR_X86_SSE_MOVNT_PS = 561 +INTR_X86_SSE_MUL_SS = 562 +INTR_X86_SSE_RCP_PS = 563 +INTR_X86_SSE_RCP_SS = 564 +INTR_X86_SSE_RSQRT_PS = 565 +INTR_X86_SSE_RSQRT_SS = 566 +INTR_X86_SSE_SFENCE = 567 +INTR_X86_SSE_SQRT_PS = 568 +INTR_X86_SSE_SQRT_SS = 569 +INTR_X86_SSE_STMXCSR = 570 +INTR_X86_SSE_STOREU_PS = 571 +INTR_X86_SSE_SUB_SS = 572 +INTR_X86_SSE_UCOMIEQ_SS = 573 +INTR_X86_SSE_UCOMIGE_SS = 574 +INTR_X86_SSE_UCOMIGT_SS = 575 +INTR_X86_SSE_UCOMILE_SS = 576 +INTR_X86_SSE_UCOMILT_SS = 577 +INTR_X86_SSE_UCOMINEQ_SS = 578 +INTR_X86_SSSE3_PABS_B = 579 +INTR_X86_SSSE3_PABS_B_128 = 580 +INTR_X86_SSSE3_PABS_D = 581 +INTR_X86_SSSE3_PABS_D_128 = 582 +INTR_X86_SSSE3_PABS_W = 583 +INTR_X86_SSSE3_PABS_W_128 = 584 +INTR_X86_SSSE3_PALIGN_R = 585 +INTR_X86_SSSE3_PALIGN_R_128 = 586 +INTR_X86_SSSE3_PHADD_D = 587 +INTR_X86_SSSE3_PHADD_D_128 = 588 +INTR_X86_SSSE3_PHADD_SW = 589 +INTR_X86_SSSE3_PHADD_SW_128 = 590 +INTR_X86_SSSE3_PHADD_W = 591 +INTR_X86_SSSE3_PHADD_W_128 = 592 +INTR_X86_SSSE3_PHSUB_D = 593 +INTR_X86_SSSE3_PHSUB_D_128 = 594 +INTR_X86_SSSE3_PHSUB_SW = 595 +INTR_X86_SSSE3_PHSUB_SW_128 = 596 +INTR_X86_SSSE3_PHSUB_W = 597 +INTR_X86_SSSE3_PHSUB_W_128 = 598 +INTR_X86_SSSE3_PMADD_UB_SW = 599 +INTR_X86_SSSE3_PMADD_UB_SW_128 = 600 +INTR_X86_SSSE3_PMUL_HR_SW = 601 +INTR_X86_SSSE3_PMUL_HR_SW_128 = 602 +INTR_X86_SSSE3_PSHUF_B = 603 +INTR_X86_SSSE3_PSHUF_B_128 = 604 +INTR_X86_SSSE3_PSIGN_B = 605 +INTR_X86_SSSE3_PSIGN_B_128 = 606 +INTR_X86_SSSE3_PSIGN_D = 607 +INTR_X86_SSSE3_PSIGN_D_128 = 608 +INTR_X86_SSSE3_PSIGN_W = 609 +INTR_X86_SSSE3_PSIGN_W_128 = 610 +INTR_XCORE_BITREV = 611 +INTR_XCORE_GETID = 612 diff --git a/llvm/_util.py b/llvm/_util.py index 36a9b6e..1014910 100644 --- a/llvm/_util.py +++ b/llvm/_util.py @@ -1,20 +1,20 @@ -# +# # Copyright (c) 2008, Mahadevan R All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: -# +# # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# -# * Neither the name of this software, nor the names of its +# +# * Neither the name of this software, nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -26,7 +26,7 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# +# """Utility functions and classes. @@ -83,16 +83,6 @@ def wrapiter(first, next, container, wrapper, extra=[]): return ret -#===----------------------------------------------------------------------=== -# Dummy owner, will not delete ownee. Be careful. -#===----------------------------------------------------------------------=== - -class dummy_owner(object): - - def __init__(self, ownee): - ownee._own(self) - - #===----------------------------------------------------------------------=== # A metaclass to prevent aliasing. It stores a (weak) reference to objects # constructed based on a PyCObject. If an object is constructed based on a diff --git a/llvm/core.py b/llvm/core.py index 3be813f..3943102 100644 --- a/llvm/core.py +++ b/llvm/core.py @@ -1,20 +1,20 @@ -# +# # Copyright (c) 2008, Mahadevan R All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: -# +# # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# -# * Neither the name of this software, nor the names of its +# +# * Neither the name of this software, nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -26,7 +26,7 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# +# """Core classes of LLVM. @@ -36,7 +36,7 @@ in-memory intermediate representation (IR) data structures.""" import llvm # top-level, for common stuff import llvm._core as _core # C wrappers -from llvm._util import * # utility functions +import llvm._util as _util # utility functions import weakref # global list of modules @@ -233,642 +233,31 @@ ATTR_READ_NONE = 512 ATTR_READONLY = 1024 # intrinsic IDs -INTR_ALPHA_UMULH = 1 -INTR_ANNOTATION = 2 -INTR_ARM_THREAD_POINTER = 3 -INTR_ATOMIC_CMP_SWAP = 4 -INTR_ATOMIC_LOAD_ADD = 5 -INTR_ATOMIC_LOAD_AND = 6 -INTR_ATOMIC_LOAD_MAX = 7 -INTR_ATOMIC_LOAD_MIN = 8 -INTR_ATOMIC_LOAD_NAND = 9 -INTR_ATOMIC_LOAD_OR = 10 -INTR_ATOMIC_LOAD_SUB = 11 -INTR_ATOMIC_LOAD_UMAX = 12 -INTR_ATOMIC_LOAD_UMIN = 13 -INTR_ATOMIC_LOAD_XOR = 14 -INTR_ATOMIC_SWAP = 15 -INTR_BSWAP = 16 -INTR_CONVERTFF = 17 -INTR_CONVERTFSI = 18 -INTR_CONVERTFUI = 19 -INTR_CONVERTSIF = 20 -INTR_CONVERTSS = 21 -INTR_CONVERTSU = 22 -INTR_CONVERTUIF = 23 -INTR_CONVERTUS = 24 -INTR_CONVERTUU = 25 -INTR_COS = 26 -INTR_CTLZ = 27 -INTR_CTPOP = 28 -INTR_CTTZ = 29 -INTR_DBG_DECLARE = 30 -INTR_DBG_FUNC_START = 31 -INTR_DBG_REGION_END = 32 -INTR_DBG_REGION_START = 33 -INTR_DBG_STOPPOINT = 34 -INTR_EH_DWARF_CFA = 35 -INTR_EH_EXCEPTION = 36 -INTR_EH_RETURN_I32 = 37 -INTR_EH_RETURN_I64 = 38 -INTR_EH_SELECTOR_I32 = 39 -INTR_EH_SELECTOR_I64 = 40 -INTR_EH_TYPEID_FOR_I32 = 41 -INTR_EH_TYPEID_FOR_I64 = 42 -INTR_EH_UNWIND_INIT = 43 -INTR_EXP = 44 -INTR_EXP2 = 45 -INTR_FLT_ROUNDS = 46 -INTR_FRAMEADDRESS = 47 -INTR_GCREAD = 48 -INTR_GCROOT = 49 -INTR_GCWRITE = 50 -INTR_INIT_TRAMPOLINE = 51 -INTR_LOG = 52 -INTR_LOG10 = 53 -INTR_LOG2 = 54 -INTR_LONGJMP = 55 -INTR_MEMCPY = 56 -INTR_MEMMOVE = 57 -INTR_MEMORY_BARRIER = 58 -INTR_MEMSET = 59 -INTR_PART_SELECT = 60 -INTR_PART_SET = 61 -INTR_PCMARKER = 62 -INTR_POW = 63 -INTR_POWI = 64 -INTR_PPC_ALTIVEC_DSS = 65 -INTR_PPC_ALTIVEC_DSSALL = 66 -INTR_PPC_ALTIVEC_DST = 67 -INTR_PPC_ALTIVEC_DSTST = 68 -INTR_PPC_ALTIVEC_DSTSTT = 69 -INTR_PPC_ALTIVEC_DSTT = 70 -INTR_PPC_ALTIVEC_LVEBX = 71 -INTR_PPC_ALTIVEC_LVEHX = 72 -INTR_PPC_ALTIVEC_LVEWX = 73 -INTR_PPC_ALTIVEC_LVSL = 74 -INTR_PPC_ALTIVEC_LVSR = 75 -INTR_PPC_ALTIVEC_LVX = 76 -INTR_PPC_ALTIVEC_LVXL = 77 -INTR_PPC_ALTIVEC_MFVSCR = 78 -INTR_PPC_ALTIVEC_MTVSCR = 79 -INTR_PPC_ALTIVEC_STVEBX = 80 -INTR_PPC_ALTIVEC_STVEHX = 81 -INTR_PPC_ALTIVEC_STVEWX = 82 -INTR_PPC_ALTIVEC_STVX = 83 -INTR_PPC_ALTIVEC_STVXL = 84 -INTR_PPC_ALTIVEC_VADDCUW = 85 -INTR_PPC_ALTIVEC_VADDSBS = 86 -INTR_PPC_ALTIVEC_VADDSHS = 87 -INTR_PPC_ALTIVEC_VADDSWS = 88 -INTR_PPC_ALTIVEC_VADDUBS = 89 -INTR_PPC_ALTIVEC_VADDUHS = 90 -INTR_PPC_ALTIVEC_VADDUWS = 91 -INTR_PPC_ALTIVEC_VAVGSB = 92 -INTR_PPC_ALTIVEC_VAVGSH = 93 -INTR_PPC_ALTIVEC_VAVGSW = 94 -INTR_PPC_ALTIVEC_VAVGUB = 95 -INTR_PPC_ALTIVEC_VAVGUH = 96 -INTR_PPC_ALTIVEC_VAVGUW = 97 -INTR_PPC_ALTIVEC_VCFSX = 98 -INTR_PPC_ALTIVEC_VCFUX = 99 -INTR_PPC_ALTIVEC_VCMPBFP = 100 -INTR_PPC_ALTIVEC_VCMPBFP_P = 101 -INTR_PPC_ALTIVEC_VCMPEQFP = 102 -INTR_PPC_ALTIVEC_VCMPEQFP_P = 103 -INTR_PPC_ALTIVEC_VCMPEQUB = 104 -INTR_PPC_ALTIVEC_VCMPEQUB_P = 105 -INTR_PPC_ALTIVEC_VCMPEQUH = 106 -INTR_PPC_ALTIVEC_VCMPEQUH_P = 107 -INTR_PPC_ALTIVEC_VCMPEQUW = 108 -INTR_PPC_ALTIVEC_VCMPEQUW_P = 109 -INTR_PPC_ALTIVEC_VCMPGEFP = 110 -INTR_PPC_ALTIVEC_VCMPGEFP_P = 111 -INTR_PPC_ALTIVEC_VCMPGTFP = 112 -INTR_PPC_ALTIVEC_VCMPGTFP_P = 113 -INTR_PPC_ALTIVEC_VCMPGTSB = 114 -INTR_PPC_ALTIVEC_VCMPGTSB_P = 115 -INTR_PPC_ALTIVEC_VCMPGTSH = 116 -INTR_PPC_ALTIVEC_VCMPGTSH_P = 117 -INTR_PPC_ALTIVEC_VCMPGTSW = 118 -INTR_PPC_ALTIVEC_VCMPGTSW_P = 119 -INTR_PPC_ALTIVEC_VCMPGTUB = 120 -INTR_PPC_ALTIVEC_VCMPGTUB_P = 121 -INTR_PPC_ALTIVEC_VCMPGTUH = 122 -INTR_PPC_ALTIVEC_VCMPGTUH_P = 123 -INTR_PPC_ALTIVEC_VCMPGTUW = 124 -INTR_PPC_ALTIVEC_VCMPGTUW_P = 125 -INTR_PPC_ALTIVEC_VCTSXS = 126 -INTR_PPC_ALTIVEC_VCTUXS = 127 -INTR_PPC_ALTIVEC_VEXPTEFP = 128 -INTR_PPC_ALTIVEC_VLOGEFP = 129 -INTR_PPC_ALTIVEC_VMADDFP = 130 -INTR_PPC_ALTIVEC_VMAXFP = 131 -INTR_PPC_ALTIVEC_VMAXSB = 132 -INTR_PPC_ALTIVEC_VMAXSH = 133 -INTR_PPC_ALTIVEC_VMAXSW = 134 -INTR_PPC_ALTIVEC_VMAXUB = 135 -INTR_PPC_ALTIVEC_VMAXUH = 136 -INTR_PPC_ALTIVEC_VMAXUW = 137 -INTR_PPC_ALTIVEC_VMHADDSHS = 138 -INTR_PPC_ALTIVEC_VMHRADDSHS = 139 -INTR_PPC_ALTIVEC_VMINFP = 140 -INTR_PPC_ALTIVEC_VMINSB = 141 -INTR_PPC_ALTIVEC_VMINSH = 142 -INTR_PPC_ALTIVEC_VMINSW = 143 -INTR_PPC_ALTIVEC_VMINUB = 144 -INTR_PPC_ALTIVEC_VMINUH = 145 -INTR_PPC_ALTIVEC_VMINUW = 146 -INTR_PPC_ALTIVEC_VMLADDUHM = 147 -INTR_PPC_ALTIVEC_VMSUMMBM = 148 -INTR_PPC_ALTIVEC_VMSUMSHM = 149 -INTR_PPC_ALTIVEC_VMSUMSHS = 150 -INTR_PPC_ALTIVEC_VMSUMUBM = 151 -INTR_PPC_ALTIVEC_VMSUMUHM = 152 -INTR_PPC_ALTIVEC_VMSUMUHS = 153 -INTR_PPC_ALTIVEC_VMULESB = 154 -INTR_PPC_ALTIVEC_VMULESH = 155 -INTR_PPC_ALTIVEC_VMULEUB = 156 -INTR_PPC_ALTIVEC_VMULEUH = 157 -INTR_PPC_ALTIVEC_VMULOSB = 158 -INTR_PPC_ALTIVEC_VMULOSH = 159 -INTR_PPC_ALTIVEC_VMULOUB = 160 -INTR_PPC_ALTIVEC_VMULOUH = 161 -INTR_PPC_ALTIVEC_VNMSUBFP = 162 -INTR_PPC_ALTIVEC_VPERM = 163 -INTR_PPC_ALTIVEC_VPKPX = 164 -INTR_PPC_ALTIVEC_VPKSHSS = 165 -INTR_PPC_ALTIVEC_VPKSHUS = 166 -INTR_PPC_ALTIVEC_VPKSWSS = 167 -INTR_PPC_ALTIVEC_VPKSWUS = 168 -INTR_PPC_ALTIVEC_VPKUHUS = 169 -INTR_PPC_ALTIVEC_VPKUWUS = 170 -INTR_PPC_ALTIVEC_VREFP = 171 -INTR_PPC_ALTIVEC_VRFIM = 172 -INTR_PPC_ALTIVEC_VRFIN = 173 -INTR_PPC_ALTIVEC_VRFIP = 174 -INTR_PPC_ALTIVEC_VRFIZ = 175 -INTR_PPC_ALTIVEC_VRLB = 176 -INTR_PPC_ALTIVEC_VRLH = 177 -INTR_PPC_ALTIVEC_VRLW = 178 -INTR_PPC_ALTIVEC_VRSQRTEFP = 179 -INTR_PPC_ALTIVEC_VSEL = 180 -INTR_PPC_ALTIVEC_VSL = 181 -INTR_PPC_ALTIVEC_VSLB = 182 -INTR_PPC_ALTIVEC_VSLH = 183 -INTR_PPC_ALTIVEC_VSLO = 184 -INTR_PPC_ALTIVEC_VSLW = 185 -INTR_PPC_ALTIVEC_VSR = 186 -INTR_PPC_ALTIVEC_VSRAB = 187 -INTR_PPC_ALTIVEC_VSRAH = 188 -INTR_PPC_ALTIVEC_VSRAW = 189 -INTR_PPC_ALTIVEC_VSRB = 190 -INTR_PPC_ALTIVEC_VSRH = 191 -INTR_PPC_ALTIVEC_VSRO = 192 -INTR_PPC_ALTIVEC_VSRW = 193 -INTR_PPC_ALTIVEC_VSUBCUW = 194 -INTR_PPC_ALTIVEC_VSUBSBS = 195 -INTR_PPC_ALTIVEC_VSUBSHS = 196 -INTR_PPC_ALTIVEC_VSUBSWS = 197 -INTR_PPC_ALTIVEC_VSUBUBS = 198 -INTR_PPC_ALTIVEC_VSUBUHS = 199 -INTR_PPC_ALTIVEC_VSUBUWS = 200 -INTR_PPC_ALTIVEC_VSUM2SWS = 201 -INTR_PPC_ALTIVEC_VSUM4SBS = 202 -INTR_PPC_ALTIVEC_VSUM4SHS = 203 -INTR_PPC_ALTIVEC_VSUM4UBS = 204 -INTR_PPC_ALTIVEC_VSUMSWS = 205 -INTR_PPC_ALTIVEC_VUPKHPX = 206 -INTR_PPC_ALTIVEC_VUPKHSB = 207 -INTR_PPC_ALTIVEC_VUPKHSH = 208 -INTR_PPC_ALTIVEC_VUPKLPX = 209 -INTR_PPC_ALTIVEC_VUPKLSB = 210 -INTR_PPC_ALTIVEC_VUPKLSH = 211 -INTR_PPC_DCBA = 212 -INTR_PPC_DCBF = 213 -INTR_PPC_DCBI = 214 -INTR_PPC_DCBST = 215 -INTR_PPC_DCBT = 216 -INTR_PPC_DCBTST = 217 -INTR_PPC_DCBZ = 218 -INTR_PPC_DCBZL = 219 -INTR_PPC_SYNC = 220 -INTR_PREFETCH = 221 -INTR_PTR_ANNOTATION = 222 -INTR_READCYCLECOUNTER = 223 -INTR_RETURNADDRESS = 224 -INTR_SADD_WITH_OVERFLOW = 225 -INTR_SETJMP = 226 -INTR_SIGLONGJMP = 227 -INTR_SIGSETJMP = 228 -INTR_SIN = 229 -INTR_SMUL_WITH_OVERFLOW = 230 -INTR_SPU_SI_A = 231 -INTR_SPU_SI_ADDX = 232 -INTR_SPU_SI_AH = 233 -INTR_SPU_SI_AHI = 234 -INTR_SPU_SI_AI = 235 -INTR_SPU_SI_AND = 236 -INTR_SPU_SI_ANDBI = 237 -INTR_SPU_SI_ANDC = 238 -INTR_SPU_SI_ANDHI = 239 -INTR_SPU_SI_ANDI = 240 -INTR_SPU_SI_BG = 241 -INTR_SPU_SI_BGX = 242 -INTR_SPU_SI_CEQ = 243 -INTR_SPU_SI_CEQB = 244 -INTR_SPU_SI_CEQBI = 245 -INTR_SPU_SI_CEQH = 246 -INTR_SPU_SI_CEQHI = 247 -INTR_SPU_SI_CEQI = 248 -INTR_SPU_SI_CG = 249 -INTR_SPU_SI_CGT = 250 -INTR_SPU_SI_CGTB = 251 -INTR_SPU_SI_CGTBI = 252 -INTR_SPU_SI_CGTH = 253 -INTR_SPU_SI_CGTHI = 254 -INTR_SPU_SI_CGTI = 255 -INTR_SPU_SI_CGX = 256 -INTR_SPU_SI_CLGT = 257 -INTR_SPU_SI_CLGTB = 258 -INTR_SPU_SI_CLGTBI = 259 -INTR_SPU_SI_CLGTH = 260 -INTR_SPU_SI_CLGTHI = 261 -INTR_SPU_SI_CLGTI = 262 -INTR_SPU_SI_DFA = 263 -INTR_SPU_SI_DFM = 264 -INTR_SPU_SI_DFMA = 265 -INTR_SPU_SI_DFMS = 266 -INTR_SPU_SI_DFNMA = 267 -INTR_SPU_SI_DFNMS = 268 -INTR_SPU_SI_DFS = 269 -INTR_SPU_SI_FA = 270 -INTR_SPU_SI_FCEQ = 271 -INTR_SPU_SI_FCGT = 272 -INTR_SPU_SI_FCMEQ = 273 -INTR_SPU_SI_FCMGT = 274 -INTR_SPU_SI_FM = 275 -INTR_SPU_SI_FMA = 276 -INTR_SPU_SI_FMS = 277 -INTR_SPU_SI_FNMS = 278 -INTR_SPU_SI_FS = 279 -INTR_SPU_SI_FSMBI = 280 -INTR_SPU_SI_MPY = 281 -INTR_SPU_SI_MPYA = 282 -INTR_SPU_SI_MPYH = 283 -INTR_SPU_SI_MPYHH = 284 -INTR_SPU_SI_MPYHHA = 285 -INTR_SPU_SI_MPYHHAU = 286 -INTR_SPU_SI_MPYHHU = 287 -INTR_SPU_SI_MPYI = 288 -INTR_SPU_SI_MPYS = 289 -INTR_SPU_SI_MPYU = 290 -INTR_SPU_SI_MPYUI = 291 -INTR_SPU_SI_NAND = 292 -INTR_SPU_SI_NOR = 293 -INTR_SPU_SI_OR = 294 -INTR_SPU_SI_ORBI = 295 -INTR_SPU_SI_ORC = 296 -INTR_SPU_SI_ORHI = 297 -INTR_SPU_SI_ORI = 298 -INTR_SPU_SI_SF = 299 -INTR_SPU_SI_SFH = 300 -INTR_SPU_SI_SFHI = 301 -INTR_SPU_SI_SFI = 302 -INTR_SPU_SI_SFX = 303 -INTR_SPU_SI_SHLI = 304 -INTR_SPU_SI_SHLQBI = 305 -INTR_SPU_SI_SHLQBII = 306 -INTR_SPU_SI_SHLQBY = 307 -INTR_SPU_SI_SHLQBYI = 308 -INTR_SPU_SI_XOR = 309 -INTR_SPU_SI_XORBI = 310 -INTR_SPU_SI_XORHI = 311 -INTR_SPU_SI_XORI = 312 -INTR_SQRT = 313 -INTR_SSUB_WITH_OVERFLOW = 314 -INTR_STACKPROTECTOR = 315 -INTR_STACKRESTORE = 316 -INTR_STACKSAVE = 317 -INTR_TRAP = 318 -INTR_UADD_WITH_OVERFLOW = 319 -INTR_UMUL_WITH_OVERFLOW = 320 -INTR_USUB_WITH_OVERFLOW = 321 -INTR_VACOPY = 322 -INTR_VAEND = 323 -INTR_VAR_ANNOTATION = 324 -INTR_VASTART = 325 -INTR_X86_MMX_EMMS = 326 -INTR_X86_MMX_FEMMS = 327 -INTR_X86_MMX_MASKMOVQ = 328 -INTR_X86_MMX_MOVNT_DQ = 329 -INTR_X86_MMX_PACKSSDW = 330 -INTR_X86_MMX_PACKSSWB = 331 -INTR_X86_MMX_PACKUSWB = 332 -INTR_X86_MMX_PADDS_B = 333 -INTR_X86_MMX_PADDS_W = 334 -INTR_X86_MMX_PADDUS_B = 335 -INTR_X86_MMX_PADDUS_W = 336 -INTR_X86_MMX_PAVG_B = 337 -INTR_X86_MMX_PAVG_W = 338 -INTR_X86_MMX_PCMPEQ_B = 339 -INTR_X86_MMX_PCMPEQ_D = 340 -INTR_X86_MMX_PCMPEQ_W = 341 -INTR_X86_MMX_PCMPGT_B = 342 -INTR_X86_MMX_PCMPGT_D = 343 -INTR_X86_MMX_PCMPGT_W = 344 -INTR_X86_MMX_PMADD_WD = 345 -INTR_X86_MMX_PMAXS_W = 346 -INTR_X86_MMX_PMAXU_B = 347 -INTR_X86_MMX_PMINS_W = 348 -INTR_X86_MMX_PMINU_B = 349 -INTR_X86_MMX_PMOVMSKB = 350 -INTR_X86_MMX_PMULH_W = 351 -INTR_X86_MMX_PMULHU_W = 352 -INTR_X86_MMX_PMULU_DQ = 353 -INTR_X86_MMX_PSAD_BW = 354 -INTR_X86_MMX_PSLL_D = 355 -INTR_X86_MMX_PSLL_Q = 356 -INTR_X86_MMX_PSLL_W = 357 -INTR_X86_MMX_PSLLI_D = 358 -INTR_X86_MMX_PSLLI_Q = 359 -INTR_X86_MMX_PSLLI_W = 360 -INTR_X86_MMX_PSRA_D = 361 -INTR_X86_MMX_PSRA_W = 362 -INTR_X86_MMX_PSRAI_D = 363 -INTR_X86_MMX_PSRAI_W = 364 -INTR_X86_MMX_PSRL_D = 365 -INTR_X86_MMX_PSRL_Q = 366 -INTR_X86_MMX_PSRL_W = 367 -INTR_X86_MMX_PSRLI_D = 368 -INTR_X86_MMX_PSRLI_Q = 369 -INTR_X86_MMX_PSRLI_W = 370 -INTR_X86_MMX_PSUBS_B = 371 -INTR_X86_MMX_PSUBS_W = 372 -INTR_X86_MMX_PSUBUS_B = 373 -INTR_X86_MMX_PSUBUS_W = 374 -INTR_X86_SSE2_ADD_SD = 375 -INTR_X86_SSE2_CLFLUSH = 376 -INTR_X86_SSE2_CMP_PD = 377 -INTR_X86_SSE2_CMP_SD = 378 -INTR_X86_SSE2_COMIEQ_SD = 379 -INTR_X86_SSE2_COMIGE_SD = 380 -INTR_X86_SSE2_COMIGT_SD = 381 -INTR_X86_SSE2_COMILE_SD = 382 -INTR_X86_SSE2_COMILT_SD = 383 -INTR_X86_SSE2_COMINEQ_SD = 384 -INTR_X86_SSE2_CVTDQ2PD = 385 -INTR_X86_SSE2_CVTDQ2PS = 386 -INTR_X86_SSE2_CVTPD2DQ = 387 -INTR_X86_SSE2_CVTPD2PS = 388 -INTR_X86_SSE2_CVTPS2DQ = 389 -INTR_X86_SSE2_CVTPS2PD = 390 -INTR_X86_SSE2_CVTSD2SI = 391 -INTR_X86_SSE2_CVTSD2SI64 = 392 -INTR_X86_SSE2_CVTSD2SS = 393 -INTR_X86_SSE2_CVTSI2SD = 394 -INTR_X86_SSE2_CVTSI642SD = 395 -INTR_X86_SSE2_CVTSS2SD = 396 -INTR_X86_SSE2_CVTTPD2DQ = 397 -INTR_X86_SSE2_CVTTPS2DQ = 398 -INTR_X86_SSE2_CVTTSD2SI = 399 -INTR_X86_SSE2_CVTTSD2SI64 = 400 -INTR_X86_SSE2_DIV_SD = 401 -INTR_X86_SSE2_LFENCE = 402 -INTR_X86_SSE2_LOADU_DQ = 403 -INTR_X86_SSE2_LOADU_PD = 404 -INTR_X86_SSE2_MASKMOV_DQU = 405 -INTR_X86_SSE2_MAX_PD = 406 -INTR_X86_SSE2_MAX_SD = 407 -INTR_X86_SSE2_MFENCE = 408 -INTR_X86_SSE2_MIN_PD = 409 -INTR_X86_SSE2_MIN_SD = 410 -INTR_X86_SSE2_MOVMSK_PD = 411 -INTR_X86_SSE2_MOVNT_DQ = 412 -INTR_X86_SSE2_MOVNT_I = 413 -INTR_X86_SSE2_MOVNT_PD = 414 -INTR_X86_SSE2_MUL_SD = 415 -INTR_X86_SSE2_PACKSSDW_128 = 416 -INTR_X86_SSE2_PACKSSWB_128 = 417 -INTR_X86_SSE2_PACKUSWB_128 = 418 -INTR_X86_SSE2_PADDS_B = 419 -INTR_X86_SSE2_PADDS_W = 420 -INTR_X86_SSE2_PADDUS_B = 421 -INTR_X86_SSE2_PADDUS_W = 422 -INTR_X86_SSE2_PAVG_B = 423 -INTR_X86_SSE2_PAVG_W = 424 -INTR_X86_SSE2_PCMPEQ_B = 425 -INTR_X86_SSE2_PCMPEQ_D = 426 -INTR_X86_SSE2_PCMPEQ_W = 427 -INTR_X86_SSE2_PCMPGT_B = 428 -INTR_X86_SSE2_PCMPGT_D = 429 -INTR_X86_SSE2_PCMPGT_W = 430 -INTR_X86_SSE2_PMADD_WD = 431 -INTR_X86_SSE2_PMAXS_W = 432 -INTR_X86_SSE2_PMAXU_B = 433 -INTR_X86_SSE2_PMINS_W = 434 -INTR_X86_SSE2_PMINU_B = 435 -INTR_X86_SSE2_PMOVMSKB_128 = 436 -INTR_X86_SSE2_PMULH_W = 437 -INTR_X86_SSE2_PMULHU_W = 438 -INTR_X86_SSE2_PMULU_DQ = 439 -INTR_X86_SSE2_PSAD_BW = 440 -INTR_X86_SSE2_PSLL_D = 441 -INTR_X86_SSE2_PSLL_DQ = 442 -INTR_X86_SSE2_PSLL_DQ_BS = 443 -INTR_X86_SSE2_PSLL_Q = 444 -INTR_X86_SSE2_PSLL_W = 445 -INTR_X86_SSE2_PSLLI_D = 446 -INTR_X86_SSE2_PSLLI_Q = 447 -INTR_X86_SSE2_PSLLI_W = 448 -INTR_X86_SSE2_PSRA_D = 449 -INTR_X86_SSE2_PSRA_W = 450 -INTR_X86_SSE2_PSRAI_D = 451 -INTR_X86_SSE2_PSRAI_W = 452 -INTR_X86_SSE2_PSRL_D = 453 -INTR_X86_SSE2_PSRL_DQ = 454 -INTR_X86_SSE2_PSRL_DQ_BS = 455 -INTR_X86_SSE2_PSRL_Q = 456 -INTR_X86_SSE2_PSRL_W = 457 -INTR_X86_SSE2_PSRLI_D = 458 -INTR_X86_SSE2_PSRLI_Q = 459 -INTR_X86_SSE2_PSRLI_W = 460 -INTR_X86_SSE2_PSUBS_B = 461 -INTR_X86_SSE2_PSUBS_W = 462 -INTR_X86_SSE2_PSUBUS_B = 463 -INTR_X86_SSE2_PSUBUS_W = 464 -INTR_X86_SSE2_SQRT_PD = 465 -INTR_X86_SSE2_SQRT_SD = 466 -INTR_X86_SSE2_STOREL_DQ = 467 -INTR_X86_SSE2_STOREU_DQ = 468 -INTR_X86_SSE2_STOREU_PD = 469 -INTR_X86_SSE2_SUB_SD = 470 -INTR_X86_SSE2_UCOMIEQ_SD = 471 -INTR_X86_SSE2_UCOMIGE_SD = 472 -INTR_X86_SSE2_UCOMIGT_SD = 473 -INTR_X86_SSE2_UCOMILE_SD = 474 -INTR_X86_SSE2_UCOMILT_SD = 475 -INTR_X86_SSE2_UCOMINEQ_SD = 476 -INTR_X86_SSE3_ADDSUB_PD = 477 -INTR_X86_SSE3_ADDSUB_PS = 478 -INTR_X86_SSE3_HADD_PD = 479 -INTR_X86_SSE3_HADD_PS = 480 -INTR_X86_SSE3_HSUB_PD = 481 -INTR_X86_SSE3_HSUB_PS = 482 -INTR_X86_SSE3_LDU_DQ = 483 -INTR_X86_SSE3_MONITOR = 484 -INTR_X86_SSE3_MWAIT = 485 -INTR_X86_SSE41_BLENDPD = 486 -INTR_X86_SSE41_BLENDPS = 487 -INTR_X86_SSE41_BLENDVPD = 488 -INTR_X86_SSE41_BLENDVPS = 489 -INTR_X86_SSE41_DPPD = 490 -INTR_X86_SSE41_DPPS = 491 -INTR_X86_SSE41_EXTRACTPS = 492 -INTR_X86_SSE41_INSERTPS = 493 -INTR_X86_SSE41_MOVNTDQA = 494 -INTR_X86_SSE41_MPSADBW = 495 -INTR_X86_SSE41_PACKUSDW = 496 -INTR_X86_SSE41_PBLENDVB = 497 -INTR_X86_SSE41_PBLENDW = 498 -INTR_X86_SSE41_PCMPEQQ = 499 -INTR_X86_SSE41_PEXTRB = 500 -INTR_X86_SSE41_PEXTRD = 501 -INTR_X86_SSE41_PEXTRQ = 502 -INTR_X86_SSE41_PHMINPOSUW = 503 -INTR_X86_SSE41_PINSRB = 504 -INTR_X86_SSE41_PMAXSB = 505 -INTR_X86_SSE41_PMAXSD = 506 -INTR_X86_SSE41_PMAXUD = 507 -INTR_X86_SSE41_PMAXUW = 508 -INTR_X86_SSE41_PMINSB = 509 -INTR_X86_SSE41_PMINSD = 510 -INTR_X86_SSE41_PMINUD = 511 -INTR_X86_SSE41_PMINUW = 512 -INTR_X86_SSE41_PMOVSXBD = 513 -INTR_X86_SSE41_PMOVSXBQ = 514 -INTR_X86_SSE41_PMOVSXBW = 515 -INTR_X86_SSE41_PMOVSXDQ = 516 -INTR_X86_SSE41_PMOVSXWD = 517 -INTR_X86_SSE41_PMOVSXWQ = 518 -INTR_X86_SSE41_PMOVZXBD = 519 -INTR_X86_SSE41_PMOVZXBQ = 520 -INTR_X86_SSE41_PMOVZXBW = 521 -INTR_X86_SSE41_PMOVZXDQ = 522 -INTR_X86_SSE41_PMOVZXWD = 523 -INTR_X86_SSE41_PMOVZXWQ = 524 -INTR_X86_SSE41_PMULDQ = 525 -INTR_X86_SSE41_PMULLD = 526 -INTR_X86_SSE41_ROUND_PD = 527 -INTR_X86_SSE41_ROUND_PS = 528 -INTR_X86_SSE41_ROUND_SD = 529 -INTR_X86_SSE41_ROUND_SS = 530 -INTR_X86_SSE42_PCMPGTQ = 531 -INTR_X86_SSE_ADD_SS = 532 -INTR_X86_SSE_CMP_PS = 533 -INTR_X86_SSE_CMP_SS = 534 -INTR_X86_SSE_COMIEQ_SS = 535 -INTR_X86_SSE_COMIGE_SS = 536 -INTR_X86_SSE_COMIGT_SS = 537 -INTR_X86_SSE_COMILE_SS = 538 -INTR_X86_SSE_COMILT_SS = 539 -INTR_X86_SSE_COMINEQ_SS = 540 -INTR_X86_SSE_CVTPD2PI = 541 -INTR_X86_SSE_CVTPI2PD = 542 -INTR_X86_SSE_CVTPI2PS = 543 -INTR_X86_SSE_CVTPS2PI = 544 -INTR_X86_SSE_CVTSI2SS = 545 -INTR_X86_SSE_CVTSI642SS = 546 -INTR_X86_SSE_CVTSS2SI = 547 -INTR_X86_SSE_CVTSS2SI64 = 548 -INTR_X86_SSE_CVTTPD2PI = 549 -INTR_X86_SSE_CVTTPS2PI = 550 -INTR_X86_SSE_CVTTSS2SI = 551 -INTR_X86_SSE_CVTTSS2SI64 = 552 -INTR_X86_SSE_DIV_SS = 553 -INTR_X86_SSE_LDMXCSR = 554 -INTR_X86_SSE_LOADU_PS = 555 -INTR_X86_SSE_MAX_PS = 556 -INTR_X86_SSE_MAX_SS = 557 -INTR_X86_SSE_MIN_PS = 558 -INTR_X86_SSE_MIN_SS = 559 -INTR_X86_SSE_MOVMSK_PS = 560 -INTR_X86_SSE_MOVNT_PS = 561 -INTR_X86_SSE_MUL_SS = 562 -INTR_X86_SSE_RCP_PS = 563 -INTR_X86_SSE_RCP_SS = 564 -INTR_X86_SSE_RSQRT_PS = 565 -INTR_X86_SSE_RSQRT_SS = 566 -INTR_X86_SSE_SFENCE = 567 -INTR_X86_SSE_SQRT_PS = 568 -INTR_X86_SSE_SQRT_SS = 569 -INTR_X86_SSE_STMXCSR = 570 -INTR_X86_SSE_STOREU_PS = 571 -INTR_X86_SSE_SUB_SS = 572 -INTR_X86_SSE_UCOMIEQ_SS = 573 -INTR_X86_SSE_UCOMIGE_SS = 574 -INTR_X86_SSE_UCOMIGT_SS = 575 -INTR_X86_SSE_UCOMILE_SS = 576 -INTR_X86_SSE_UCOMILT_SS = 577 -INTR_X86_SSE_UCOMINEQ_SS = 578 -INTR_X86_SSSE3_PABS_B = 579 -INTR_X86_SSSE3_PABS_B_128 = 580 -INTR_X86_SSSE3_PABS_D = 581 -INTR_X86_SSSE3_PABS_D_128 = 582 -INTR_X86_SSSE3_PABS_W = 583 -INTR_X86_SSSE3_PABS_W_128 = 584 -INTR_X86_SSSE3_PALIGN_R = 585 -INTR_X86_SSSE3_PALIGN_R_128 = 586 -INTR_X86_SSSE3_PHADD_D = 587 -INTR_X86_SSSE3_PHADD_D_128 = 588 -INTR_X86_SSSE3_PHADD_SW = 589 -INTR_X86_SSSE3_PHADD_SW_128 = 590 -INTR_X86_SSSE3_PHADD_W = 591 -INTR_X86_SSSE3_PHADD_W_128 = 592 -INTR_X86_SSSE3_PHSUB_D = 593 -INTR_X86_SSSE3_PHSUB_D_128 = 594 -INTR_X86_SSSE3_PHSUB_SW = 595 -INTR_X86_SSSE3_PHSUB_SW_128 = 596 -INTR_X86_SSSE3_PHSUB_W = 597 -INTR_X86_SSSE3_PHSUB_W_128 = 598 -INTR_X86_SSSE3_PMADD_UB_SW = 599 -INTR_X86_SSSE3_PMADD_UB_SW_128 = 600 -INTR_X86_SSSE3_PMUL_HR_SW = 601 -INTR_X86_SSSE3_PMUL_HR_SW_128 = 602 -INTR_X86_SSSE3_PSHUF_B = 603 -INTR_X86_SSSE3_PSHUF_B_128 = 604 -INTR_X86_SSSE3_PSIGN_B = 605 -INTR_X86_SSSE3_PSIGN_B_128 = 606 -INTR_X86_SSSE3_PSIGN_D = 607 -INTR_X86_SSSE3_PSIGN_D_128 = 608 -INTR_X86_SSSE3_PSIGN_W = 609 -INTR_X86_SSSE3_PSIGN_W_128 = 610 -INTR_XCORE_BITREV = 611 -INTR_XCORE_GETID = 612 +from llvm._intrinsic_ids import * #===----------------------------------------------------------------------=== # Helpers (for internal use) #===----------------------------------------------------------------------=== -def check_is_type(obj): check_gen(obj, Type) -def check_is_value(obj): check_gen(obj, Value) -def check_is_constant(obj): check_gen(obj, Constant) -def check_is_function(obj): check_gen(obj, Function) -def check_is_basic_block(obj): check_gen(obj, BasicBlock) -def check_is_module(obj): check_gen(obj, Module) -def check_is_module_provider(obj): check_gen(obj, ModuleProvider) +def check_is_type(obj): _util.check_gen(obj, Type) +def check_is_value(obj): _util.check_gen(obj, Value) +def check_is_constant(obj): _util.check_gen(obj, Constant) +def check_is_function(obj): _util.check_gen(obj, Function) +def check_is_basic_block(obj): _util.check_gen(obj, BasicBlock) +def check_is_module(obj): _util.check_gen(obj, Module) +def check_is_module_provider(obj): _util.check_gen(obj, ModuleProvider) -def unpack_types(objlist): return unpack_gen(objlist, check_is_type) -def unpack_values(objlist): return unpack_gen(objlist, check_is_value) -def unpack_constants(objlist): return unpack_gen(objlist, check_is_constant) +def unpack_types(objlst): return _util.unpack_gen(objlst, check_is_type) +def unpack_values(objlst): return _util.unpack_gen(objlst, check_is_value) +def unpack_constants(objlst): return _util.unpack_gen(objlst, check_is_constant) def check_is_callable(obj): if isinstance(obj, Function): return - type = obj.type - if isinstance(type, PointerType) and \ - isinstance(type.pointee, FunctionType): + typ = obj.type + if isinstance(typ, PointerType) and \ + isinstance(typ.pointee, FunctionType): return raise TypeError, "argument is neither a function nor a function pointer" @@ -884,8 +273,8 @@ def _to_int(v): #===----------------------------------------------------------------------=== class Module(llvm.Ownable): - """A Module instance stores all the information related to an LLVM module. - + """A Module instance stores all the information related to an LLVM module. + Modules are the top level container of all other LLVM Intermediate Representation (IR) objects. Each module directly contains a list of globals variables, a list of functions, a list of libraries (or @@ -898,7 +287,7 @@ class Module(llvm.Ownable): module_obj = Module.new('my_module') """ - __metaclass__ = ObjectCache + __metaclass__ = _util.ObjectCache @staticmethod def new(id): @@ -1045,8 +434,8 @@ class Module(llvm.Ownable): # gv is an instance of GlobalVariable # do stuff with gv """ - return wrapiter(_core.LLVMGetFirstGlobal, _core.LLVMGetNextGlobal, - self.ptr, _make_value) + return _util.wrapiter(_core.LLVMGetFirstGlobal, + _core.LLVMGetNextGlobal, self.ptr, _make_value) def add_function(self, ty, name): """Add a function of given type with given name.""" @@ -1071,7 +460,7 @@ class Module(llvm.Ownable): # f is an instance of Function # do stuff with f """ - return wrapiter(_core.LLVMGetFirstFunction, + return _util.wrapiter(_core.LLVMGetFirstFunction, _core.LLVMGetNextFunction, self.ptr, _make_value) def verify(self): @@ -1120,7 +509,7 @@ class Type(object): else: bits = int(bits) # bits must be an int return _make_type(_core.LLVMIntType(bits), TYPE_INTEGER) - + @staticmethod def float(): """Create a 32-bit floating point type.""" @@ -1158,7 +547,7 @@ class Type(object): check_is_type(return_ty) var_arg = _to_int(var_arg) # ensure int params = unpack_types(param_tys) - return _make_type(_core.LLVMFunctionType(return_ty.ptr, params, + return _make_type(_core.LLVMFunctionType(return_ty.ptr, params, var_arg), TYPE_FUNCTION) @staticmethod @@ -1189,7 +578,7 @@ class Type(object): having 'count' elements.""" check_is_type(element_ty) count = int(count) # must be an int - return _make_type(_core.LLVMArrayType(element_ty.ptr, count), + return _make_type(_core.LLVMArrayType(element_ty.ptr, count), TYPE_ARRAY) @staticmethod @@ -1200,7 +589,7 @@ class Type(object): `pointee_ty', in the address space `addr_space'.""" check_is_type(pointee_ty) addr_space = int(addr_space) # must be an int - return _make_type(_core.LLVMPointerType(pointee_ty.ptr, + return _make_type(_core.LLVMPointerType(pointee_ty.ptr, addr_space), TYPE_POINTER) @staticmethod @@ -1211,7 +600,7 @@ class Type(object): having `count' elements.""" check_is_type(element_ty) count = int(count) # must be an int - return _make_type(_core.LLVMVectorType(element_ty.ptr, count), + return _make_type(_core.LLVMVectorType(element_ty.ptr, count), TYPE_VECTOR) @staticmethod @@ -1262,8 +651,9 @@ class Type(object): def refine(self, dest): """Refine the abstract type represented by self into a concrete class. - This object is no longer valid after refining, so do not hold references - to it after calling. See the user guide for examples on how to use this.""" + This object is no longer valid after refining, so do not hold + references to it after calling. See the user guide for examples on how + to use this.""" check_is_type(dest) _core.LLVMRefineType(self.ptr, dest.ptr) @@ -1412,20 +802,22 @@ class VectorType(Type): # Type factory method #===----------------------------------------------------------------------=== +# type ID -> class map +__class_for_typeid = { + TYPE_INTEGER : IntegerType, + TYPE_FUNCTION : FunctionType, + TYPE_STRUCT : StructType, + TYPE_ARRAY : ArrayType, + TYPE_POINTER : PointerType, + TYPE_VECTOR : VectorType, +} + def _make_type(ptr, kind): - if kind == TYPE_INTEGER: - return IntegerType(ptr, kind) - elif kind == TYPE_FUNCTION: - return FunctionType(ptr, kind) - elif kind == TYPE_STRUCT: - return StructType(ptr, kind) - elif kind == TYPE_ARRAY: - return ArrayType(ptr, kind) - elif kind == TYPE_POINTER: - return PointerType(ptr, kind) - elif kind == TYPE_VECTOR: - return VectorType(ptr, kind) + class_obj = __class_for_typeid.get(kind) + if class_obj: + return class_obj(ptr, kind) else: + # "generic" type return Type(ptr, kind) @@ -1458,7 +850,7 @@ class TypeHandle(object): class Value(object): - __metaclass__ = ObjectCache + __metaclass__ = _util.ObjectCache def __init__(self, ptr): self.ptr = ptr @@ -1485,7 +877,7 @@ class Value(object): @property def value_id(self): - return _core.LLVMValueGetID(ptr) + return _core.LLVMValueGetID(self.ptr) @property def type(self): @@ -1499,17 +891,17 @@ class Constant(Value): @staticmethod def null(ty): check_is_type(ty) - return _make_value(_core.LLVMConstNull(ty.ptr)); - + return _make_value(_core.LLVMConstNull(ty.ptr)) + @staticmethod def all_ones(ty): check_is_type(ty) - return _make_value(_core.LLVMConstAllOnes(ty.ptr)); - + return _make_value(_core.LLVMConstAllOnes(ty.ptr)) + @staticmethod def undef(ty): check_is_type(ty) - return _make_value(_core.LLVMGetUndef(ty.ptr)); + return _make_value(_core.LLVMGetUndef(ty.ptr)) @staticmethod def int(ty, value): @@ -1532,7 +924,7 @@ class Constant(Value): @staticmethod def string(strval): # dont_null_terminate=True return _make_value(_core.LLVMConstString(strval, 1)) - + @staticmethod def stringz(strval): # dont_null_terminate=False return _make_value(_core.LLVMConstString(strval, 0)) @@ -1542,17 +934,17 @@ class Constant(Value): check_is_type(ty) const_ptrs = unpack_constants(consts) return _make_value(_core.LLVMConstArray(ty.ptr, const_ptrs)) - + @staticmethod def struct(consts): # not packed const_ptrs = unpack_constants(consts) return _make_value(_core.LLVMConstStruct(const_ptrs, 0)) - + @staticmethod def packed_struct(consts): const_ptrs = unpack_constants(consts) return _make_value(_core.LLVMConstStruct(const_ptrs, 1)) - + @staticmethod def vector(consts): const_ptrs = unpack_constants(consts) @@ -1565,13 +957,13 @@ class Constant(Value): def __init__(self, ptr): Value.__init__(self, ptr) - + def neg(self): return _make_value(_core.LLVMConstNeg(self.ptr)) - + def not_(self): return _make_value(_core.LLVMConstNot(self.ptr)) - + def add(self, rhs): check_is_constant(rhs) return _make_value(_core.LLVMConstAdd(self.ptr, rhs.ptr)) @@ -1651,7 +1043,7 @@ class Constant(Value): def gep(self, indices): index_ptrs = unpack_constants(indices) return _make_value(_core.LLVMConstGEP(self.ptr, index_ptrs)) - + def trunc(self, ty): check_is_type(ty) return _make_value(_core.LLVMConstTrunc(self.ptr, ty.ptr)) @@ -1703,21 +1095,28 @@ class Constant(Value): def select(self, true_const, false_const): check_is_constant(true_const) check_is_constant(false_const) - return _make_value(_core.LLVMConstSelect(self.ptr, true_const.ptr, false_const.ptr)) + return _make_value( + _core.LLVMConstSelect(self.ptr, true_const.ptr, false_const.ptr)) def extract_element(self, index): # note: self must be a _vector_ constant check_is_constant(index) - return _make_value(_core.LLVMConstExtractElement(self.ptr, index.ptr)) + return _make_value( + _core.LLVMConstExtractElement(self.ptr, index.ptr)) - def insert_element(self, value, index): # note: self must be a _vector_ constant + def insert_element(self, value, index): + # note: self must be a _vector_ constant check_is_constant(value) check_is_constant(index) - return _make_value(_core.LLVMConstInsertElement(self.ptr, value.ptr, index.ptr)) + return _make_value( + _core.LLVMConstInsertElement(self.ptr, value.ptr, index.ptr)) - def shuffle_vector(self, vector_b, mask): # note: self must be a _vector_ constant - check_is_constant(vector_b) # note: vector_b must be a _vector_ constant + def shuffle_vector(self, vector_b, mask): + # note: self must be a _vector_ constant + check_is_constant(vector_b) + # note: vector_b must be a _vector_ constant check_is_constant(mask) - return _make_value(_core.LLVMConstShuffleVector(self.ptr, vector_b.ptr, mask.ptr)) + return _make_value( + _core.LLVMConstShuffleVector(self.ptr, vector_b.ptr, mask.ptr)) class ConstantExpr(Constant): @@ -1773,24 +1172,34 @@ class GlobalValue(Constant): def __init__(self, ptr): Constant.__init__(self, ptr) # Hang on to the module, don't let it die before we do. - # It is nice to have just a map of functions without + # It is nice to have just a map of functions without # retaining a ref to the owning module. self._module_obj = self.module + def _delete(self): + # Called in subclass delete() methods. + self._module_obj = None + def _get_linkage(self): return _core.LLVMGetLinkage(self.ptr) def _set_linkage(self, value): _core.LLVMSetLinkage(self.ptr, value) linkage = property(_get_linkage, _set_linkage) - def _get_section(self): return _core.LLVMGetSection(self.ptr) - def _set_section(self, value): return _core.LLVMSetSection(self.ptr, value) + def _get_section(self): + return _core.LLVMGetSection(self.ptr) + def _set_section(self, value): + return _core.LLVMSetSection(self.ptr, value) section = property(_get_section, _set_section) - - def _get_visibility(self): return _core.LLVMGetVisibility(self.ptr) - def _set_visibility(self, value): return _core.LLVMSetVisibility(self.ptr, value) + + def _get_visibility(self): + return _core.LLVMGetVisibility(self.ptr) + def _set_visibility(self, value): + return _core.LLVMSetVisibility(self.ptr, value) visibility = property(_get_visibility, _set_visibility) - def _get_alignment(self): return _core.LLVMGetAlignment(self.ptr) - def _set_alignment(self, value): return _core.LLVMSetAlignment(self.ptr, value) + def _get_alignment(self): + return _core.LLVMGetAlignment(self.ptr) + def _set_alignment(self, value): + return _core.LLVMSetAlignment(self.ptr, value) alignment = property(_get_alignment, _set_alignment) @property @@ -1822,7 +1231,9 @@ class GlobalVariable(GlobalValue): GlobalValue.__init__(self, ptr) def delete(self): + self._delete() _core.LLVMDeleteGlobal(self.ptr) + self.ptr = None def _get_initializer(self): if _core.LLVMHasInitializer(self.ptr): @@ -1843,7 +1254,8 @@ class GlobalVariable(GlobalValue): value = _to_int(value) _core.LLVMSetGlobalConstant(self.ptr, value) - global_constant = property(_get_is_global_constant, _set_is_global_constant) + global_constant = \ + property(_get_is_global_constant, _set_is_global_constant) class Argument(Value): @@ -1867,14 +1279,14 @@ class Function(GlobalValue): def new(module, func_ty, name): check_is_module(module) check_is_type(func_ty) - return _make_value(_core.LLVMAddFunction(module.ptr, name, \ + return _make_value(_core.LLVMAddFunction(module.ptr, name, func_ty.ptr)) @staticmethod def get_or_insert(module, func_ty, name): check_is_module(module) check_is_type(func_ty) - return _make_value(_core.LLVMModuleGetOrInsertFunction(module.ptr, \ + return _make_value(_core.LLVMModuleGetOrInsertFunction(module.ptr, name, func_ty.ptr)) @staticmethod @@ -1884,18 +1296,21 @@ class Function(GlobalValue): if not ptr: raise llvm.LLVMException, ("no function named `%s`" % name) return _make_value(ptr) - + @staticmethod - def intrinsic(module, id, types): + def intrinsic(module, intrinsic_id, types): check_is_module(module) ptrs = unpack_types(types) - return _make_value(_core.LLVMGetIntrinsic(module.ptr, id, ptrs)) + return _make_value( + _core.LLVMGetIntrinsic(module.ptr, intrinsic_id, ptrs)) def __init__(self, ptr): GlobalValue.__init__(self, ptr) def delete(self): + self._delete() _core.LLVMDeleteFunction(self.ptr) + self.ptr = None @property def intrinsic_id(self): @@ -1911,8 +1326,8 @@ class Function(GlobalValue): @property def args(self): - return wrapiter(_core.LLVMGetFirstParam, _core.LLVMGetNextParam, - self.ptr, _make_value) + return _util.wrapiter(_core.LLVMGetFirstParam, + _core.LLVMGetNextParam, self.ptr, _make_value) @property def basic_block_count(self): @@ -1928,7 +1343,7 @@ class Function(GlobalValue): @property def basic_blocks(self): - return wrapiter(_core.LLVMGetFirstBasicBlock, + return _util.wrapiter(_core.LLVMGetFirstBasicBlock, _core.LLVMGetNextBasicBlock, self.ptr, _make_value) def viewCFG(self): @@ -2076,7 +1491,7 @@ class SwitchInstruction(Instruction): class BasicBlock(Value): def __init__(self, ptr): - self.ptr = ptr + Value.__init__(self, ptr) def insert_before(self, name): return _make_value(_core.LLVMInsertBasicBlock(self.ptr, name)) @@ -2092,7 +1507,7 @@ class BasicBlock(Value): @property def instructions(self): - return wrapiter(_core.LLVMGetFirstInstruction, + return _util.wrapiter(_core.LLVMGetFirstInstruction, _core.LLVMGetNextInstruction, self.ptr, _make_value) @@ -2125,8 +1540,9 @@ __class_for_valueid = { def _make_value(ptr): kind = _core.LLVMValueGetID(ptr) # based on kind, create one of the Value subclasses - if kind in __class_for_valueid: - return __class_for_valueid[kind](ptr) + class_obj = __class_for_valueid.get(kind) + if class_obj: + return class_obj(ptr) elif kind > VALUE_INSTRUCTION: # "generic" instruction return Instruction(ptr) @@ -2147,7 +1563,7 @@ class Builder(object): b = Builder(_core.LLVMCreateBuilder()) b.position_at_end(basic_block) return b - + def __init__(self, ptr): self.ptr = ptr @@ -2156,11 +1572,12 @@ class Builder(object): def position_at_beginning(self, bblk): """Position the builder at the beginning of the given block. - + Next instruction inserted will be first one in the block.""" + check_is_basic_block(bblk) # Avoids using "blk.instructions", which will fetch all the # instructions into a list. Don't try this at home, though. - inst_ptr = _core.LLVMGetFirstInstruction(self.block.ptr) + inst_ptr = _core.LLVMGetFirstInstruction(bblk.ptr) if inst_ptr: # Issue #10: inst_ptr can be None if b/b has no insts. inst = Instruction(inst_ptr) @@ -2210,33 +1627,38 @@ class Builder(object): check_is_value(if_value) check_is_basic_block(then_blk) check_is_basic_block(else_blk) - return _make_value(_core.LLVMBuildCondBr(self.ptr, if_value.ptr, then_blk.ptr, else_blk.ptr)) - + return _make_value( + _core.LLVMBuildCondBr(self.ptr, + if_value.ptr, then_blk.ptr, else_blk.ptr)) + def switch(self, value, else_blk, n=10): check_is_value(value) # value has to be of any 'int' type check_is_basic_block(else_blk) - return _make_value(_core.LLVMBuildSwitch(self.ptr, value.ptr, else_blk.ptr, n)) - + return _make_value( + _core.LLVMBuildSwitch(self.ptr, value.ptr, else_blk.ptr, n)) + def invoke(self, func, args, then_blk, catch_blk, name=""): check_is_callable(func) check_is_basic_block(then_blk) check_is_basic_block(catch_blk) args2 = unpack_values(args) - return _make_value(_core.LLVMBuildInvoke(self.ptr, func.ptr, args2, then_blk.ptr, catch_blk.ptr, name)) + return _make_value( + _core.LLVMBuildInvoke(self.ptr, func.ptr, args2, + then_blk.ptr, catch_blk.ptr, name)) def unwind(self): return _make_value(_core.LLVMBuildUnwind(self.ptr)) - + def unreachable(self): return _make_value(_core.LLVMBuildUnreachable(self.ptr)) # arithmethic, bitwise and logical - + def add(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) return _make_value(_core.LLVMBuildAdd(self.ptr, lhs.ptr, rhs.ptr, name)) - + def sub(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) @@ -2250,62 +1672,74 @@ class Builder(object): def udiv(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildUDiv(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildUDiv(self.ptr, lhs.ptr, rhs.ptr, name)) def sdiv(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildSDiv(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildSDiv(self.ptr, lhs.ptr, rhs.ptr, name)) def fdiv(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildFDiv(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildFDiv(self.ptr, lhs.ptr, rhs.ptr, name)) def urem(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildURem(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildURem(self.ptr, lhs.ptr, rhs.ptr, name)) def srem(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildSRem(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildSRem(self.ptr, lhs.ptr, rhs.ptr, name)) def frem(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildFRem(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildFRem(self.ptr, lhs.ptr, rhs.ptr, name)) def shl(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildShl(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildShl(self.ptr, lhs.ptr, rhs.ptr, name)) def lshr(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildLShr(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildLShr(self.ptr, lhs.ptr, rhs.ptr, name)) def ashr(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildAShr(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildAShr(self.ptr, lhs.ptr, rhs.ptr, name)) def and_(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildAnd(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildAnd(self.ptr, lhs.ptr, rhs.ptr, name)) def or_(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildOr(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildOr(self.ptr, lhs.ptr, rhs.ptr, name)) def xor(self, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildXor(self.ptr, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildXor(self.ptr, lhs.ptr, rhs.ptr, name)) def neg(self, val, name=""): check_is_value(val) @@ -2324,7 +1758,8 @@ class Builder(object): def malloc_array(self, ty, size, name=""): check_is_type(ty) check_is_value(size) - return _make_value(_core.LLVMBuildArrayMalloc(self.ptr, ty.ptr, size.ptr, name)) + return _make_value( + _core.LLVMBuildArrayMalloc(self.ptr, ty.ptr, size.ptr, name)) def alloca(self, ty, name=""): check_is_type(ty) @@ -2333,7 +1768,8 @@ class Builder(object): def alloca_array(self, ty, size, name=""): check_is_type(ty) check_is_value(size) - return _make_value(_core.LLVMBuildArrayAlloca(self.ptr, ty.ptr, size.ptr, name)) + return _make_value( + _core.LLVMBuildArrayAlloca(self.ptr, ty.ptr, size.ptr, name)) def free(self, ptr): check_is_value(ptr) @@ -2351,134 +1787,162 @@ class Builder(object): def gep(self, ptr, indices, name=""): check_is_value(ptr) index_ptrs = unpack_values(indices) - return _make_value(_core.LLVMBuildGEP(self.ptr, ptr.ptr, index_ptrs, name)) + return _make_value( + _core.LLVMBuildGEP(self.ptr, ptr.ptr, index_ptrs, name)) # casts and extensions def trunc(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildTrunc(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildTrunc(self.ptr, value.ptr, dest_ty.ptr, name)) def zext(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildZExt(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildZExt(self.ptr, value.ptr, dest_ty.ptr, name)) def sext(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildSExt(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildSExt(self.ptr, value.ptr, dest_ty.ptr, name)) def fptoui(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildFPToUI(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildFPToUI(self.ptr, value.ptr, dest_ty.ptr, name)) def fptosi(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildFPToSI(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildFPToSI(self.ptr, value.ptr, dest_ty.ptr, name)) def uitofp(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildUIToFP(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildUIToFP(self.ptr, value.ptr, dest_ty.ptr, name)) def sitofp(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildSIToFP(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildSIToFP(self.ptr, value.ptr, dest_ty.ptr, name)) def fptrunc(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildFPTrunc(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildFPTrunc(self.ptr, value.ptr, dest_ty.ptr, name)) def fpext(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildFPExt(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildFPExt(self.ptr, value.ptr, dest_ty.ptr, name)) def ptrtoint(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildPtrToInt(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildPtrToInt(self.ptr, value.ptr, dest_ty.ptr, name)) def inttoptr(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildIntToPtr(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildIntToPtr(self.ptr, value.ptr, dest_ty.ptr, name)) def bitcast(self, value, dest_ty, name=""): check_is_value(value) check_is_type(dest_ty) - return _make_value(_core.LLVMBuildBitCast(self.ptr, value.ptr, dest_ty.ptr, name)) + return _make_value( + _core.LLVMBuildBitCast(self.ptr, value.ptr, dest_ty.ptr, name)) # comparisons def icmp(self, ipred, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildICmp(self.ptr, ipred, lhs.ptr, rhs.ptr, name)) - + return _make_value( + _core.LLVMBuildICmp(self.ptr, ipred, lhs.ptr, rhs.ptr, name)) + def fcmp(self, rpred, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildFCmp(self.ptr, rpred, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildFCmp(self.ptr, rpred, lhs.ptr, rhs.ptr, name)) def vicmp(self, ipred, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildVICmp(self.ptr, ipred, lhs.ptr, rhs.ptr, name)) - + return _make_value( + _core.LLVMBuildVICmp(self.ptr, ipred, lhs.ptr, rhs.ptr, name)) + def vfcmp(self, rpred, lhs, rhs, name=""): check_is_value(lhs) check_is_value(rhs) - return _make_value(_core.LLVMBuildVFCmp(self.ptr, rpred, lhs.ptr, rhs.ptr, name)) + return _make_value( + _core.LLVMBuildVFCmp(self.ptr, rpred, lhs.ptr, rhs.ptr, name)) # misc def getresult(self, retval, idx, name=""): check_is_value(retval) - return _make_value(_core.LLVMBuildGetResult(self.ptr, retval.ptr, idx, name)) + return _make_value( + _core.LLVMBuildGetResult(self.ptr, retval.ptr, idx, name)) def phi(self, ty, name=""): check_is_type(ty) return _make_value(_core.LLVMBuildPhi(self.ptr, ty.ptr, name)) - + def call(self, fn, args, name=""): check_is_callable(fn) arg_ptrs = unpack_values(args) - return _make_value(_core.LLVMBuildCall(self.ptr, fn.ptr, arg_ptrs, name)) - + return _make_value( + _core.LLVMBuildCall(self.ptr, fn.ptr, arg_ptrs, name)) + def select(self, cond, then_value, else_value, name=""): check_is_value(cond) check_is_value(then_value) check_is_value(else_value) - return _make_value(_core.LLVMBuildSelect(self.ptr, cond.ptr, then_value.ptr, else_value.ptr, name)) - + return _make_value( + _core.LLVMBuildSelect(self.ptr, cond.ptr, + then_value.ptr, else_value.ptr, name)) + def vaarg(self, list_val, ty, name=""): check_is_value(list_val) check_is_type(ty) - return _make_value(_core.LLVMBuildVAArg(self.ptr, list_val.ptr, ty.ptr, name)) - + return _make_value( + _core.LLVMBuildVAArg(self.ptr, list_val.ptr, ty.ptr, name)) + def extract_element(self, vec_val, idx_val, name=""): check_is_value(vec_val) check_is_value(idx_val) - return _make_value(_core.LLVMBuildExtractElement(self.ptr, vec_val.ptr, idx_val.ptr, name)) - + return _make_value( + _core.LLVMBuildExtractElement(self.ptr, vec_val.ptr, + idx_val.ptr, name)) + def insert_element(self, vec_val, elt_val, idx_val, name=""): check_is_value(vec_val) check_is_value(elt_val) check_is_value(idx_val) - return _make_value(_core.LLVMBuildInsertElement(self.ptr, vec_val.ptr, elt_val.ptr, idx_val.ptr, name)) + return _make_value( + _core.LLVMBuildInsertElement(self.ptr, vec_val.ptr, + elt_val.ptr, idx_val.ptr, name)) def shuffle_vector(self, vecA, vecB, mask, name=""): check_is_value(vecA) check_is_value(vecB) check_is_value(mask) - return _make_value(_core.LLVMBuildShuffleVector(self.ptr, vecA.ptr, vecB.ptr, mask.ptr, name)) + return _make_value( + _core.LLVMBuildShuffleVector(self.ptr, + vecA.ptr, vecB.ptr, mask.ptr, name)) #===----------------------------------------------------------------------=== @@ -2490,7 +1954,7 @@ class ModuleProvider(llvm.Ownable): @staticmethod def new(module): check_is_module(module) - check_is_unowned(module) + _util.check_is_unowned(module) return ModuleProvider( _core.LLVMCreateModuleProviderForExistingModule(module.ptr), module) @@ -2509,7 +1973,7 @@ class ModuleProvider(llvm.Ownable): class MemoryBuffer(object): @staticmethod - def from_file(self, fname): + def from_file(fname): ret = _core.LLVMCreateMemoryBufferWithContentsOfFile(fname) if isinstance(ret, str): return (None, ret) @@ -2518,7 +1982,7 @@ class MemoryBuffer(object): return (obj, "") @staticmethod - def from_stdin(self): + def from_stdin(): ret = _core.LLVMCreateMemoryBufferWithSTDIN() if isinstance(ret, str): return (None, ret) diff --git a/llvm/ee.py b/llvm/ee.py index adcc2a7..16aef80 100644 --- a/llvm/ee.py +++ b/llvm/ee.py @@ -1,20 +1,20 @@ -# +# # Copyright (c) 2008, Mahadevan R All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: -# +# # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# -# * Neither the name of this software, nor the names of its +# +# * Neither the name of this software, nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -26,7 +26,7 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# +# """Execution Engine and related classes. @@ -35,7 +35,7 @@ import llvm # top-level, for common stuff import llvm.core as core # module provider, function etc. import llvm._core as _core # C wrappers -from llvm._util import * # utility functions +import llvm._util as _util # utility functions #===----------------------------------------------------------------------=== @@ -97,9 +97,9 @@ class GenericValue(object): # helper functions for generic value objects -def check_is_generic_value(obj): check_gen(obj, GenericValue) -def _unpack_generic_values(objlist): - return unpack_gen(objlist, check_is_generic_value) +def check_is_generic_value(obj): _util.check_gen(obj, GenericValue) +def _unpack_generic_values(objlist): + return _util.unpack_gen(objlist, check_is_generic_value) #===----------------------------------------------------------------------=== @@ -111,7 +111,7 @@ class ExecutionEngine(object): @staticmethod def new(mp, force_interpreter=False): core.check_is_module_provider(mp) - core.check_is_unowned(mp) + _util.check_is_unowned(mp) ret = _core.LLVMCreateExecutionEngine(mp.ptr, int(force_interpreter)) if isinstance(ret, str): raise llvm.LLVMException, ret diff --git a/llvm/passes.py b/llvm/passes.py index 5ffa11c..99b487d 100644 --- a/llvm/passes.py +++ b/llvm/passes.py @@ -1,20 +1,20 @@ -# +# # Copyright (c) 2008, Mahadevan R All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: -# +# # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# -# * Neither the name of this software, nor the names of its +# +# * Neither the name of this software, nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -26,7 +26,7 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# +# """Pass managers and passes. @@ -39,7 +39,6 @@ import llvm # top-level, for common stuff import llvm.ee as ee # target data import llvm.core as core # module provider, function etc. import llvm._core as _core # C wrappers -from llvm._util import * # utility functions # passes @@ -127,7 +126,7 @@ _pass_creator = { PASS_DEAD_TYPE_ELIMINATION : _core.LLVMAddDeadTypeEliminationPass, PASS_DEAD_INST_ELIMINATION : _core.LLVMAddDeadInstEliminationPass, PASS_DEAD_STORE_ELIMINATION : _core.LLVMAddDeadStoreEliminationPass, - # PASS_GCSE : _core.LLVMAddGCSEPass,: removed in LLVM 2.4. + # PASS_GCSE : _core.LLVMAddGCSEPass,: removed in LLVM 2.4. PASS_GLOBAL_DCE : _core.LLVMAddGlobalDCEPass, PASS_GLOBAL_OPTIMIZER : _core.LLVMAddGlobalOptimizerPass, PASS_GVN : _core.LLVMAddGVNPass, @@ -202,7 +201,8 @@ class PassManager(object): elif tgt_data_or_pass_id in _pass_creator: self._add_pass(tgt_data_or_pass_id) else: - raise llvm.LLVMException, ("invalid pass_id (%s)" % str(tgt_data_or_pass_id)) + raise llvm.LLVMException, \ + ("invalid pass_id (%s)" % str(tgt_data_or_pass_id)) def _add_target_data(self, tgt): _core.LLVMAddTargetData(tgt.ptr, self.ptr) diff --git a/setup.py b/setup.py index ba128d8..c593235 100644 --- a/setup.py +++ b/setup.py @@ -1,21 +1,21 @@ #!/usr/bin/env python -# +# # Copyright (c) 2008, Mahadevan R All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: -# +# # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. -# -# * Neither the name of this software, nor the names of its +# +# * Neither the name of this software, nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -65,12 +65,12 @@ def get_llvm_config(): lc = arg.split('=')[1] else: i += 1 - + # see if it works version = _run(lc + ' --version') if version == '': return (lc, False) # didn't work - + return (lc, True) @@ -80,7 +80,7 @@ def call_setup(llvm_config): libdir = _run(llvm_config + ' --libdir') ldflags = _run(llvm_config + ' --ldflags') libs_core, objs_core = get_libs_and_objs(llvm_config, - ['core', 'analysis', 'scalaropts', 'executionengine', + ['core', 'analysis', 'scalaropts', 'executionengine', 'jit', 'native', 'interpreter', 'bitreader', 'bitwriter', 'instrumentation', 'ipa', 'ipo', 'transformutils', 'asmparser', 'linker', 'support']) diff --git a/test/example.py b/test/example.py index 03640de..8a08a12 100644 --- a/test/example.py +++ b/test/example.py @@ -1,45 +1,45 @@ -#!/usr/bin/env python - -# Import the llvm-py modules. -from llvm import * -from llvm.core import * - -# Create an (empty) module. -my_module = Module.new('my_module') - -# All the types involved here are "int"s. This type is represented -# by an object of the llvm.core.Type class: -ty_int = Type.int() # by default 32 bits - -# We need to represent the class of functions that accept two integers -# and return an integer. This is represented by an object of the -# function type (llvm.core.FunctionType): -ty_func = Type.function(ty_int, [ty_int, ty_int]) - -# Now we need a function named 'sum' of this type. Functions are not -# free-standing (in llvm-py); it needs to be contained in a module. -f_sum = my_module.add_function(ty_func, "sum") - -# Let's name the function arguments as 'a' and 'b'. -f_sum.args[0].name = "a" -f_sum.args[1].name = "b" - -# Our function needs a "basic block" -- a set of instructions that -# end with a terminator (like return, branch etc.). By convention -# the first block is called "entry". -bb = f_sum.append_basic_block("entry") - -# Let's add instructions into the block. For this, we need an -# instruction builder: -builder = Builder.new(bb) - -# OK, now for the instructions themselves. We'll create an add -# instruction that returns the sum as a value, which we'll use -# a ret instruction to return. -tmp = builder.add(f_sum.args[0], f_sum.args[1], "tmp") -builder.ret(tmp) - -# We've completed the definition now! Let's see the LLVM assembly -# language representation of what we've created: -print my_module - +#!/usr/bin/env python + +# Import the llvm-py modules. +from llvm import * +from llvm.core import * + +# Create an (empty) module. +my_module = Module.new('my_module') + +# All the types involved here are "int"s. This type is represented +# by an object of the llvm.core.Type class: +ty_int = Type.int() # by default 32 bits + +# We need to represent the class of functions that accept two integers +# and return an integer. This is represented by an object of the +# function type (llvm.core.FunctionType): +ty_func = Type.function(ty_int, [ty_int, ty_int]) + +# Now we need a function named 'sum' of this type. Functions are not +# free-standing (in llvm-py); it needs to be contained in a module. +f_sum = my_module.add_function(ty_func, "sum") + +# Let's name the function arguments as 'a' and 'b'. +f_sum.args[0].name = "a" +f_sum.args[1].name = "b" + +# Our function needs a "basic block" -- a set of instructions that +# end with a terminator (like return, branch etc.). By convention +# the first block is called "entry". +bb = f_sum.append_basic_block("entry") + +# Let's add instructions into the block. For this, we need an +# instruction builder: +builder = Builder.new(bb) + +# OK, now for the instructions themselves. We'll create an add +# instruction that returns the sum as a value, which we'll use +# a ret instruction to return. +tmp = builder.add(f_sum.args[0], f_sum.args[1], "tmp") +builder.ret(tmp) + +# We've completed the definition now! Let's see the LLVM assembly +# language representation of what we've created: +print my_module + diff --git a/test/issue10.py b/test/issue10.py index 185b1c8..2969564 100644 --- a/test/issue10.py +++ b/test/issue10.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python from llvm.core import * import llvm._core diff --git a/test/operands.py b/test/operands.py index e120223..d348ecf 100755 --- a/test/operands.py +++ b/test/operands.py @@ -1,48 +1,48 @@ -#!/usr/bin/env python - -# Tests accessing of instruction operands. - -from llvm.core import * - -#===----------------------------------------------------------------------=== - -# implement a test function -def make_function(): - test_module = """ - define i32 @prod(i32, i32) { - entry: - %2 = mul i32 %0, %1 - ret i32 %2 - } - - define i32 @test_func(i32, i32, i32) { - entry: - %tmp1 = call i32 @prod(i32 %0, i32 %1) - %tmp2 = add i32 %tmp1, %2 - %tmp3 = add i32 %tmp2, 1 - ret i32 %tmp3 - } - """ - class strstream(object): - def __init__(self): pass - def read(self): return test_module - m = Module.from_assembly(strstream()) - print "-"*60 - print m - print "-"*60 - print "Examining function `test_func':" - return m.get_function_named("test_func") - -#===----------------------------------------------------------------------=== - -func = make_function() -idx = 1 -for inst in func.basic_blocks[0].instructions: - print "Instruction #%d:" % (idx,) - print " operand_count =", inst.operand_count - print " operands:" - oidx = 1 - for op in inst.operands: - print " %d: %s" % (oidx, repr(op)) - oidx += 1 - idx += 1 +#!/usr/bin/env python + +# Tests accessing of instruction operands. + +from llvm.core import * + +#===----------------------------------------------------------------------=== + +# implement a test function +def make_function(): + test_module = """ + define i32 @prod(i32, i32) { + entry: + %2 = mul i32 %0, %1 + ret i32 %2 + } + + define i32 @test_func(i32, i32, i32) { + entry: + %tmp1 = call i32 @prod(i32 %0, i32 %1) + %tmp2 = add i32 %tmp1, %2 + %tmp3 = add i32 %tmp2, 1 + ret i32 %tmp3 + } + """ + class strstream(object): + def __init__(self): pass + def read(self): return test_module + m = Module.from_assembly(strstream()) + print "-"*60 + print m + print "-"*60 + print "Examining function `test_func':" + return m.get_function_named("test_func") + +#===----------------------------------------------------------------------=== + +func = make_function() +idx = 1 +for inst in func.basic_blocks[0].instructions: + print "Instruction #%d:" % (idx,) + print " operand_count =", inst.operand_count + print " operands:" + oidx = 1 + for op in inst.operands: + print " %d: %s" % (oidx, repr(op)) + oidx += 1 + idx += 1 diff --git a/test/testall.py b/test/testall.py index fd32767..b7d5dbc 100644 --- a/test/testall.py +++ b/test/testall.py @@ -162,9 +162,10 @@ def do_value(): k = Constant.int(ti, 42) k.name = 'a' s = k.name - t = s.type + t = k.type s = str(k) s = k == Constant.int(ti, 43) + i = k.value_id def do_constant(): @@ -473,6 +474,7 @@ def do_llvm_core(): do_module() do_type() do_typehandle() + do_value() do_constant() do_global_value() do_global_variable() @@ -577,3 +579,20 @@ def main(): main() +# to add: +# IntegerType +# FunctionType +# StructType +# ArrayType +# PointerType +# VectorType +# ConstantExpr +# ConstantAggregateZero +# ConstantInt +# ConstantFP +# ConstantArray +# ConstantStruct +# ConstantVector +# ConstantPointerNull +# MemoryBuffer +