From owner-svn-src-user@FreeBSD.ORG Thu Jun 23 00:04:07 2011 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A47341065673; Thu, 23 Jun 2011 00:04:07 +0000 (UTC) (envelope-from gabor@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8FDC98FC14; Thu, 23 Jun 2011 00:04:07 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p5N047Vk074481; Thu, 23 Jun 2011 00:04:07 GMT (envelope-from gabor@svn.freebsd.org) Received: (from gabor@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p5N047QB074463; Thu, 23 Jun 2011 00:04:07 GMT (envelope-from gabor@svn.freebsd.org) Message-Id: <201106230004.p5N047QB074463@svn.freebsd.org> From: Gabor Kovesdan Date: Thu, 23 Jun 2011 00:04:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r223453 - in user/gabor/tre-integration: contrib/compiler-rt/lib contrib/compiler-rt/lib/arm contrib/llvm/include/llvm contrib/llvm/include/llvm/ADT contrib/llvm/include/llvm/Analysis c... X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Jun 2011 00:04:07 -0000 Author: gabor Date: Thu Jun 23 00:04:06 2011 New Revision: 223453 URL: http://svn.freebsd.org/changeset/base/223453 Log: - Manually merge some new files. I don't actually understand how they got lost but mergeinfo is already recorded so the branch should be in a consistent state now. Added: user/gabor/tre-integration/contrib/compiler-rt/lib/abi.h (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/arm/divmodsi4.S (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/arm/divsi3.S (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/arm/softfloat-alias.list user/gabor/tre-integration/contrib/compiler-rt/lib/arm/udivmodsi4.S (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/arm/udivsi3.S (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/arm/umodsi3.S (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/divmoddi4.c (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/divmodsi4.c (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/subdf3.c (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/subsf3.c (contents, props changed) user/gabor/tre-integration/contrib/compiler-rt/lib/udivmodsi4.c (contents, props changed) user/gabor/tre-integration/contrib/llvm/include/llvm/ADT/PackedVector.h (contents, props changed) user/gabor/tre-integration/contrib/llvm/include/llvm/Analysis/BranchProbabilityInfo.h (contents, props changed) user/gabor/tre-integration/contrib/llvm/include/llvm/DefaultPasses.h (contents, props changed) user/gabor/tre-integration/contrib/llvm/include/llvm/MC/MCWin64EH.h (contents, props changed) user/gabor/tre-integration/contrib/llvm/include/llvm/Support/BranchProbability.h (contents, props changed) user/gabor/tre-integration/contrib/llvm/include/llvm/Support/PassManagerBuilder.h (contents, props changed) user/gabor/tre-integration/contrib/llvm/include/llvm/Support/Win64EH.h (contents, props changed) user/gabor/tre-integration/contrib/llvm/lib/Analysis/BranchProbabilityInfo.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/lib/CodeGen/AsmPrinter/Win64Exception.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/lib/CodeGen/RegisterClassInfo.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/lib/CodeGen/RegisterClassInfo.h (contents, props changed) user/gabor/tre-integration/contrib/llvm/lib/ExecutionEngine/TargetSelect.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/lib/MC/MCWin64EH.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/lib/Support/BranchProbability.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/lib/Target/Mips/MipsEmitGPRestore.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/utils/TableGen/CodeGenRegisters.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/utils/TableGen/SetTheory.cpp (contents, props changed) user/gabor/tre-integration/contrib/llvm/utils/TableGen/SetTheory.h (contents, props changed) user/gabor/tre-integration/contrib/sendmail/cf/ostype/solaris11.m4 user/gabor/tre-integration/contrib/tre/lib/tre.h (contents, props changed) user/gabor/tre-integration/crypto/openssh/audit-linux.c (contents, props changed) user/gabor/tre-integration/crypto/openssh/bufec.c (contents, props changed) user/gabor/tre-integration/crypto/openssh/kexecdh.c (contents, props changed) user/gabor/tre-integration/crypto/openssh/kexecdhc.c (contents, props changed) user/gabor/tre-integration/crypto/openssh/kexecdhs.c (contents, props changed) user/gabor/tre-integration/crypto/openssh/openbsd-compat/charclass.h (contents, props changed) user/gabor/tre-integration/crypto/openssh/openbsd-compat/timingsafe_bcmp.c (contents, props changed) user/gabor/tre-integration/crypto/openssh/ssh-ecdsa.c (contents, props changed) user/gabor/tre-integration/etc/periodic/security/460.chkportsum.rej user/gabor/tre-integration/lib/libdwarf/dwarf_func.c (contents, props changed) user/gabor/tre-integration/lib/libsbuf/Symbol.map user/gabor/tre-integration/lib/libsbuf/Version.def user/gabor/tre-integration/lib/libutil/kinfo_getallproc.3 (contents, props changed) user/gabor/tre-integration/lib/libutil/kinfo_getallproc.c (contents, props changed) user/gabor/tre-integration/lib/libutil/kinfo_getproc.3 (contents, props changed) user/gabor/tre-integration/lib/libutil/kinfo_getproc.c (contents, props changed) user/gabor/tre-integration/release/pc98/mkisoimages.sh (contents, props changed) user/gabor/tre-integration/release/powerpc/generate-hfs.sh (contents, props changed) user/gabor/tre-integration/release/powerpc/hfs-boot.bz2.uu user/gabor/tre-integration/sbin/hastd/proto_tcp.c (contents, props changed) user/gabor/tre-integration/share/man/man4/ath_ahb.4 (contents, props changed) user/gabor/tre-integration/share/man/man4/ath_pci.4 (contents, props changed) user/gabor/tre-integration/share/man/man4/geom_map.4 (contents, props changed) user/gabor/tre-integration/share/man/man4/man4.i386/glxiic.4 (contents, props changed) user/gabor/tre-integration/share/man/man4/umcs.4 (contents, props changed) user/gabor/tre-integration/sys/amd64/conf/LINT user/gabor/tre-integration/sys/amd64/conf/LINT-VIMAGE user/gabor/tre-integration/sys/boot/forth/beastie.4th.8 (contents, props changed) user/gabor/tre-integration/sys/boot/forth/brand.4th user/gabor/tre-integration/sys/boot/forth/brand.4th.8 (contents, props changed) user/gabor/tre-integration/sys/boot/forth/check-password.4th user/gabor/tre-integration/sys/boot/forth/check-password.4th.8 (contents, props changed) user/gabor/tre-integration/sys/boot/forth/color.4th user/gabor/tre-integration/sys/boot/forth/color.4th.8 (contents, props changed) user/gabor/tre-integration/sys/boot/forth/delay.4th user/gabor/tre-integration/sys/boot/forth/delay.4th.8 (contents, props changed) user/gabor/tre-integration/sys/boot/forth/menu-commands.4th user/gabor/tre-integration/sys/boot/forth/menu.4th user/gabor/tre-integration/sys/boot/forth/menu.4th.8 (contents, props changed) user/gabor/tre-integration/sys/boot/forth/menu.rc user/gabor/tre-integration/sys/boot/forth/shortcuts.4th user/gabor/tre-integration/sys/boot/forth/version.4th user/gabor/tre-integration/sys/boot/forth/version.4th.8 (contents, props changed) user/gabor/tre-integration/sys/boot/ia64/common/icache.c (contents, props changed) user/gabor/tre-integration/sys/compat/linux/linux_videodev2.h (contents, props changed) user/gabor/tre-integration/sys/compat/linux/linux_videodev2_compat.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ah_eeprom_9287.c (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ah_eeprom_9287.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9285an.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287.c (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287.ini user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287_cal.c (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287_cal.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287_olc.c (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287_olc.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287_reset.c (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287_reset.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287an.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/ath_hal/ar9002/ar9287phy.h (contents, props changed) user/gabor/tre-integration/sys/dev/ath/if_athdfs.h (contents, props changed) user/gabor/tre-integration/sys/dev/cxgbe/common/jhash.h (contents, props changed) user/gabor/tre-integration/sys/dev/cxgbe/t4_l2t.c (contents, props changed) user/gabor/tre-integration/sys/dev/cxgbe/t4_l2t.h (contents, props changed) user/gabor/tre-integration/sys/dev/iicbus/ad7417.c (contents, props changed) user/gabor/tre-integration/sys/dev/usb/serial/umcs.c (contents, props changed) user/gabor/tre-integration/sys/dev/usb/serial/umcs.h (contents, props changed) user/gabor/tre-integration/sys/i386/conf/LINT user/gabor/tre-integration/sys/i386/conf/LINT-VIMAGE user/gabor/tre-integration/sys/ia64/conf/LINT user/gabor/tre-integration/sys/netinet/in_pcbgroup.c (contents, props changed) user/gabor/tre-integration/sys/netinet6/in6_pcbgroup.c (contents, props changed) user/gabor/tre-integration/sys/nfs/nfs_kdtrace.h (contents, props changed) user/gabor/tre-integration/sys/pc98/conf/LINT user/gabor/tre-integration/sys/powerpc/conf/LINT user/gabor/tre-integration/sys/powerpc/include/rtas.h (contents, props changed) user/gabor/tre-integration/sys/powerpc/ofw/ofwcall32.S (contents, props changed) user/gabor/tre-integration/sys/powerpc/ofw/ofwcall64.S (contents, props changed) user/gabor/tre-integration/sys/powerpc/ofw/ofwmagic.S (contents, props changed) user/gabor/tre-integration/sys/powerpc/ofw/rtas.c (contents, props changed) user/gabor/tre-integration/sys/powerpc/powermac/powermac_thermal.c (contents, props changed) user/gabor/tre-integration/sys/powerpc/powermac/powermac_thermal.h (contents, props changed) user/gabor/tre-integration/sys/powerpc/powermac/windtunnel.c (contents, props changed) user/gabor/tre-integration/sys/sparc64/conf/LINT user/gabor/tre-integration/sys/sys/_cpuset.h (contents, props changed) user/gabor/tre-integration/sys/sys/_stdint.h (contents, props changed) user/gabor/tre-integration/tools/build/options/WITHOUT_BINUTILS user/gabor/tre-integration/tools/build/options/WITHOUT_GCC user/gabor/tre-integration/tools/build/options/WITHOUT_GPIO user/gabor/tre-integration/tools/build/options/WITHOUT_KERNEL_SYMBOLS user/gabor/tre-integration/tools/build/options/WITH_CLANG user/gabor/tre-integration/tools/build/options/WITH_FDT user/gabor/tre-integration/tools/build/options/WITH_OFED user/gabor/tre-integration/tools/regression/bin/sh/builtins/case5.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/case6.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/case7.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/cd3.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/cd4.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/cd5.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/cd6.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/cd7.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/dot4.0 user/gabor/tre-integration/tools/regression/bin/sh/builtins/set1.0 user/gabor/tre-integration/tools/regression/bin/sh/errors/bad-parm-exp6.2 (contents, props changed) user/gabor/tre-integration/tools/regression/bin/sh/errors/bad-parm-exp6.2.stderr user/gabor/tre-integration/tools/regression/bin/sh/execution/set-n1.0 user/gabor/tre-integration/tools/regression/bin/sh/execution/set-n2.0 user/gabor/tre-integration/tools/regression/bin/sh/execution/set-n3.0 user/gabor/tre-integration/tools/regression/bin/sh/execution/set-n4.0 user/gabor/tre-integration/tools/regression/bin/sh/execution/set-x1.0 user/gabor/tre-integration/tools/regression/bin/sh/execution/set-x2.0 user/gabor/tre-integration/tools/regression/bin/sh/execution/set-x3.0 user/gabor/tre-integration/tools/regression/bin/sh/expansion/heredoc1.0 user/gabor/tre-integration/tools/regression/bin/sh/expansion/heredoc2.0 user/gabor/tre-integration/tools/regression/bin/sh/expansion/ifs4.0 user/gabor/tre-integration/tools/regression/bin/sh/expansion/length7.0 user/gabor/tre-integration/tools/regression/bin/sh/expansion/length8.0 user/gabor/tre-integration/tools/regression/bin/sh/expansion/set-u3.0 user/gabor/tre-integration/tools/regression/bin/sh/expansion/trim8.0 user/gabor/tre-integration/tools/regression/bin/sh/parameters/env1.0 user/gabor/tre-integration/tools/regression/bin/sh/parameters/positional1.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/alias4.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/alias5.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote1.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote10.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote11.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote2.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote3.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote4.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote5.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote6.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote7.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote8.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/dollar-quote9.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/func2.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/func3.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/heredoc10.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/heredoc11.0 user/gabor/tre-integration/tools/regression/bin/sh/parser/heredoc9.0 user/gabor/tre-integration/tools/regression/usr.bin/printf/regress.l1.out user/gabor/tre-integration/tools/regression/usr.bin/printf/regress.l2.out user/gabor/tre-integration/usr.bin/fstat/functions.h (contents, props changed) user/gabor/tre-integration/usr.bin/fstat/fuser.1 (contents, props changed) user/gabor/tre-integration/usr.bin/fstat/fuser.c (contents, props changed) user/gabor/tre-integration/usr.bin/fstat/main.c (contents, props changed) user/gabor/tre-integration/usr.sbin/bsdinstall/bsdinstall.8 (contents, props changed) user/gabor/tre-integration/usr.sbin/bsdinstall/scripts/netconfig_ipv4 (contents, props changed) user/gabor/tre-integration/usr.sbin/bsdinstall/scripts/netconfig_ipv6 (contents, props changed) Added: user/gabor/tre-integration/contrib/compiler-rt/lib/abi.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/abi.h Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,23 @@ +/* ===------ abi.h - configuration header for compiler-rt -----------------=== + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + * ===----------------------------------------------------------------------=== + * + * This file is a configuration header for compiler-rt. + * This file is not part of the interface of this library. + * + * ===----------------------------------------------------------------------=== + */ + +#if __ARM_EABI__ +# define ARM_EABI_FNALIAS(aeabi_name, name) \ + void __aeabi_##aeabi_name() __attribute__((alias("__" #name))); +# define COMPILER_RT_ABI __attribute__((pcs("aapcs"))) +#else +# define ARM_EABI_FNALIAS(aeabi_name, name) +# define COMPILER_RT_ABI +#endif Added: user/gabor/tre-integration/contrib/compiler-rt/lib/arm/divmodsi4.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/arm/divmodsi4.S Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,47 @@ +/*===-- divmodsi4.S - 32-bit signed integer divide and modulus ------------===// + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + *===----------------------------------------------------------------------===// + * + * This file implements the __divmodsi4 (32-bit signed integer divide and + * modulus) function for the ARM architecture. A naive digit-by-digit + * computation is employed for simplicity. + * + *===----------------------------------------------------------------------===*/ + +#include "../assembly.h" + +#define ESTABLISH_FRAME \ + push {r4-r7, lr} ;\ + add r7, sp, #12 +#define CLEAR_FRAME_AND_RETURN \ + pop {r4-r7, pc} + +.syntax unified +.align 3 +DEFINE_COMPILERRT_FUNCTION(__divmodsi4) + ESTABLISH_FRAME +// Set aside the sign of the quotient and modulus, and the address for the +// modulus. + eor r4, r0, r1 + mov r5, r0 + mov r6, r2 +// Take the absolute value of a and b via abs(x) = (x^(x >> 31)) - (x >> 31). + eor ip, r0, r0, asr #31 + eor lr, r1, r1, asr #31 + sub r0, ip, r0, asr #31 + sub r1, lr, r1, asr #31 +// Unsigned divmod: + bl SYMBOL_NAME(__udivmodsi4) +// Apply the sign of quotient and modulus + ldr r1, [r6] + eor r0, r0, r4, asr #31 + eor r1, r1, r5, asr #31 + sub r0, r0, r4, asr #31 + sub r1, r1, r5, asr #31 + str r1, [r6] + CLEAR_FRAME_AND_RETURN Added: user/gabor/tre-integration/contrib/compiler-rt/lib/arm/divsi3.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/arm/divsi3.S Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,41 @@ +/*===-- divsi3.S - 32-bit signed integer divide ---------------------------===// + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + *===----------------------------------------------------------------------===// + * + * This file implements the __divsi3 (32-bit signed integer divide) function + * for the ARM architecture as a wrapper around the unsigned routine. + * + *===----------------------------------------------------------------------===*/ + +#include "../assembly.h" + +#define ESTABLISH_FRAME \ + push {r4, r7, lr} ;\ + add r7, sp, #4 +#define CLEAR_FRAME_AND_RETURN \ + pop {r4, r7, pc} + +.syntax unified +.align 3 +// Ok, APCS and AAPCS agree on 32 bit args, so it's safe to use the same routine. +DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_idiv, __divsi3) +DEFINE_COMPILERRT_FUNCTION(__divsi3) + ESTABLISH_FRAME +// Set aside the sign of the quotient. + eor r4, r0, r1 +// Take absolute value of a and b via abs(x) = (x^(x >> 31)) - (x >> 31). + eor r2, r0, r0, asr #31 + eor r3, r1, r1, asr #31 + sub r0, r2, r0, asr #31 + sub r1, r3, r1, asr #31 +// abs(a) / abs(b) + bl SYMBOL_NAME(__udivsi3) +// Apply sign of quotient to result and return. + eor r0, r0, r4, asr #31 + sub r0, r0, r4, asr #31 + CLEAR_FRAME_AND_RETURN Added: user/gabor/tre-integration/contrib/compiler-rt/lib/arm/softfloat-alias.list ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/arm/softfloat-alias.list Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,21 @@ +# +# These are soft float functions which can be +# aliased to the *vfp functions on arm processors +# that support floating point instructions. +# +___adddf3vfp ___adddf3 +___addsf3vfp ___addsf3 +___divdf3vfp ___divdf3 +___divsf3vfp ___divsf3 +___extendsfdf2vfp ___extendsfdf2 +___fixdfsivfp ___fixdfsi +___fixsfsivfp ___fixsfsi +___floatsidfvfp ___floatsidf +___floatsisfvfp ___floatsisf +___muldf3vfp ___muldf3 +___mulsf3vfp ___mulsf3 +___subdf3vfp ___subdf3 +___subsf3vfp ___subsf3 +___truncdfsf2vfp ___truncdfsf2 +___floatunssidfvfp ___floatunsidf +___floatunssisfvfp ___floatunsisf Added: user/gabor/tre-integration/contrib/compiler-rt/lib/arm/udivmodsi4.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/arm/udivmodsi4.S Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,80 @@ +/*===-- udivmodsi4.S - 32-bit unsigned integer divide and modulus ---------===// + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + *===----------------------------------------------------------------------===// + * + * This file implements the __udivmodsi4 (32-bit unsigned integer divide and + * modulus) function for the ARM architecture. A naive digit-by-digit + * computation is employed for simplicity. + * + *===----------------------------------------------------------------------===*/ + +#include "../assembly.h" + +#define ESTABLISH_FRAME \ + push {r4, r7, lr} ;\ + add r7, sp, #4 +#define CLEAR_FRAME_AND_RETURN \ + pop {r4, r7, pc} + +#define a r0 +#define b r1 +#define i r3 +#define r r4 +#define q ip +#define one lr + +.syntax unified +.align 3 +DEFINE_COMPILERRT_FUNCTION(__udivmodsi4) +// We use a simple digit by digit algorithm; before we get into the actual +// divide loop, we must calculate the left-shift amount necessary to align +// the MSB of the divisor with that of the dividend (If this shift is +// negative, then the result is zero, and we early out). We also conjure a +// bit mask of 1 to use in constructing the quotient, and initialize the +// quotient to zero. + ESTABLISH_FRAME + clz r4, a + tst b, b // detect divide-by-zero + clz r3, b + mov q, #0 + beq LOCAL_LABEL(return) // return 0 if b is zero. + mov one, #1 + subs i, r3, r4 + blt LOCAL_LABEL(return) // return 0 if MSB(a) < MSB(b) + +LOCAL_LABEL(mainLoop): +// This loop basically implements the following: +// +// do { +// if (a >= b << i) { +// a -= b << i; +// q |= 1 << i; +// if (a == 0) break; +// } +// } while (--i) +// +// Note that this does not perform the final iteration (i == 0); by doing it +// this way, we can merge the two branches which is a substantial win for +// such a tight loop on current ARM architectures. + subs r, a, b, lsl i + orrhs q, q,one, lsl i + movhs a, r + subsne i, i, #1 + bhi LOCAL_LABEL(mainLoop) + +// Do the final test subtraction and update of quotient (i == 0), as it is +// not performed in the main loop. + subs r, a, b + orrhs q, #1 + movhs a, r + +LOCAL_LABEL(return): +// Store the remainder, and move the quotient to r0, then return. + str a, [r2] + mov r0, q + CLEAR_FRAME_AND_RETURN Added: user/gabor/tre-integration/contrib/compiler-rt/lib/arm/udivsi3.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/arm/udivsi3.S Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,80 @@ +/*===-- udivsi3.S - 32-bit unsigned integer divide ------------------------===// + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + *===----------------------------------------------------------------------===// + * + * This file implements the __udivsi3 (32-bit unsigned integer divide) + * function for the ARM architecture. A naive digit-by-digit computation is + * employed for simplicity. + * + *===----------------------------------------------------------------------===*/ + +#include "../assembly.h" + +#define ESTABLISH_FRAME \ + push {r7, lr} ;\ + mov r7, sp +#define CLEAR_FRAME_AND_RETURN \ + pop {r7, pc} + +#define a r0 +#define b r1 +#define r r2 +#define i r3 +#define q ip +#define one lr + +.syntax unified +.align 3 +// Ok, APCS and AAPCS agree on 32 bit args, so it's safe to use the same routine. +DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_uidiv, __udivsi3) +DEFINE_COMPILERRT_FUNCTION(__udivsi3) +// We use a simple digit by digit algorithm; before we get into the actual +// divide loop, we must calculate the left-shift amount necessary to align +// the MSB of the divisor with that of the dividend (If this shift is +// negative, then the result is zero, and we early out). We also conjure a +// bit mask of 1 to use in constructing the quotient, and initialize the +// quotient to zero. + ESTABLISH_FRAME + clz r2, a + tst b, b // detect divide-by-zero + clz r3, b + mov q, #0 + beq LOCAL_LABEL(return) // return 0 if b is zero. + mov one, #1 + subs i, r3, r2 + blt LOCAL_LABEL(return) // return 0 if MSB(a) < MSB(b) + +LOCAL_LABEL(mainLoop): +// This loop basically implements the following: +// +// do { +// if (a >= b << i) { +// a -= b << i; +// q |= 1 << i; +// if (a == 0) break; +// } +// } while (--i) +// +// Note that this does not perform the final iteration (i == 0); by doing it +// this way, we can merge the two branches which is a substantial win for +// such a tight loop on current ARM architectures. + subs r, a, b, lsl i + orrhs q, q,one, lsl i + movhs a, r + subsne i, i, #1 + bhi LOCAL_LABEL(mainLoop) + +// Do the final test subtraction and update of quotient (i == 0), as it is +// not performed in the main loop. + subs r, a, b + orrhs q, #1 + +LOCAL_LABEL(return): +// Move the quotient to r0 and return. + mov r0, q + CLEAR_FRAME_AND_RETURN Added: user/gabor/tre-integration/contrib/compiler-rt/lib/arm/umodsi3.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/arm/umodsi3.S Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,58 @@ +/*===-- umodsi3.S - 32-bit unsigned integer modulus -----------------------===// + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + *===----------------------------------------------------------------------===// + * + * This file implements the __umodsi3 (32-bit unsigned integer modulus) + * function for the ARM architecture. A naive digit-by-digit computation is + * employed for simplicity. + * + *===----------------------------------------------------------------------===*/ + +#include "../assembly.h" + +#define a r0 +#define b r1 +#define r r2 +#define i r3 + +.syntax unified +.align 3 +DEFINE_COMPILERRT_FUNCTION(__umodsi3) +// We use a simple digit by digit algorithm; before we get into the actual +// divide loop, we must calculate the left-shift amount necessary to align +// the MSB of the divisor with that of the dividend. + clz r2, a + tst b, b // detect b == 0 + clz r3, b + bxeq lr // return a if b == 0 + subs i, r3, r2 + bxlt lr // return a if MSB(a) < MSB(b) + +LOCAL_LABEL(mainLoop): +// This loop basically implements the following: +// +// do { +// if (a >= b << i) { +// a -= b << i; +// if (a == 0) break; +// } +// } while (--i) +// +// Note that this does not perform the final iteration (i == 0); by doing it +// this way, we can merge the two branches which is a substantial win for +// such a tight loop on current ARM architectures. + subs r, a, b, lsl i + movhs a, r + subsne i, i, #1 + bhi LOCAL_LABEL(mainLoop) + +// Do the final test subtraction and update of remainder (i == 0), as it is +// not performed in the main loop. + subs r, a, b + movhs a, r + bx lr Added: user/gabor/tre-integration/contrib/compiler-rt/lib/divmoddi4.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/divmoddi4.c Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,30 @@ +/*===-- divmoddi4.c - Implement __divmoddi4 --------------------------------=== + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + * ===----------------------------------------------------------------------=== + * + * This file implements __divmoddi4 for the compiler_rt library. + * + * ===----------------------------------------------------------------------=== + */ +#include "abi.h" + +#include "int_lib.h" + +extern COMPILER_RT_ABI di_int __divdi3(di_int a, di_int b); + +ARM_EABI_FNALIAS(ldivmod, divmoddi4); + +/* Returns: a / b, *rem = a % b */ + +COMPILER_RT_ABI di_int +__divmoddi4(di_int a, di_int b, di_int* rem) +{ + di_int d = __divdi3(a,b); + *rem = a - (d*b); + return d; +} Added: user/gabor/tre-integration/contrib/compiler-rt/lib/divmodsi4.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/divmodsi4.c Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,31 @@ +/*===-- divmodsi4.c - Implement __divmodsi4 --------------------------------=== + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + * ===----------------------------------------------------------------------=== + * + * This file implements __divmodsi4 for the compiler_rt library. + * + * ===----------------------------------------------------------------------=== + */ +#include "abi.h" + +#include "int_lib.h" + +extern COMPILER_RT_ABI si_int __divsi3(si_int a, si_int b); + + +/* Returns: a / b, *rem = a % b */ + +COMPILER_RT_ABI si_int +__divmodsi4(si_int a, si_int b, si_int* rem) +{ + si_int d = __divsi3(a,b); + *rem = a - (d*b); + return d; +} + + Added: user/gabor/tre-integration/contrib/compiler-rt/lib/subdf3.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/subdf3.c Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,30 @@ +//===-- lib/adddf3.c - Double-precision subtraction ---------------*- C -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements double-precision soft-float subtraction with the +// IEEE-754 default rounding (to nearest, ties to even). +// +//===----------------------------------------------------------------------===// +#include "abi.h" + +#define DOUBLE_PRECISION +#include "fp_lib.h" + +fp_t COMPILER_RT_ABI __adddf3(fp_t a, fp_t b); + + +ARM_EABI_FNALIAS(dsub, subdf3); + +// Subtraction; flip the sign bit of b and add. +COMPILER_RT_ABI fp_t +__subdf3(fp_t a, fp_t b) { + return __adddf3(a, fromRep(toRep(b) ^ signBit)); +} + +/* FIXME: rsub for ARM EABI */ Added: user/gabor/tre-integration/contrib/compiler-rt/lib/subsf3.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/subsf3.c Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,29 @@ +//===-- lib/subsf3.c - Single-precision subtraction ---------------*- C -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements single-precision soft-float subtraction with the +// IEEE-754 default rounding (to nearest, ties to even). +// +//===----------------------------------------------------------------------===// +#include "abi.h" + +#define SINGLE_PRECISION +#include "fp_lib.h" + +fp_t COMPILER_RT_ABI __addsf3(fp_t a, fp_t b); + +ARM_EABI_FNALIAS(fsub, subsf3); + +// Subtraction; flip the sign bit of b and add. +COMPILER_RT_ABI fp_t +__subsf3(fp_t a, fp_t b) { + return __addsf3(a, fromRep(toRep(b) ^ signBit)); +} + +/* FIXME: rsub for ARM EABI */ Added: user/gabor/tre-integration/contrib/compiler-rt/lib/udivmodsi4.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/compiler-rt/lib/udivmodsi4.c Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,31 @@ +/*===-- udivmodsi4.c - Implement __udivmodsi4 ------------------------------=== + * + * The LLVM Compiler Infrastructure + * + * This file is dual licensed under the MIT and the University of Illinois Open + * Source Licenses. See LICENSE.TXT for details. + * + * ===----------------------------------------------------------------------=== + * + * This file implements __udivmodsi4 for the compiler_rt library. + * + * ===----------------------------------------------------------------------=== + */ +#include "abi.h" + +#include "int_lib.h" + +extern su_int COMPILER_RT_ABI __udivsi3(su_int n, su_int d); + + +/* Returns: a / b, *rem = a % b */ + +COMPILER_RT_ABI su_int +__udivmodsi4(su_int a, su_int b, su_int* rem) +{ + si_int d = __udivsi3(a,b); + *rem = a - (d*b); + return d; +} + + Added: user/gabor/tre-integration/contrib/llvm/include/llvm/ADT/PackedVector.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/llvm/include/llvm/ADT/PackedVector.h Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,158 @@ +//===- llvm/ADT/PackedVector.h - Packed values vector -----------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the PackedVector class. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ADT_PACKEDVECTOR_H +#define LLVM_ADT_PACKEDVECTOR_H + +#include "llvm/ADT/BitVector.h" +#include + +namespace llvm { + +template +class PackedVectorBase; + +// This won't be necessary if we can specialize members without specializing +// the parent template. +template +class PackedVectorBase { +protected: + static T getValue(const llvm::BitVector &Bits, unsigned Idx) { + T val = T(); + for (unsigned i = 0; i != BitNum; ++i) + val = T(val | ((Bits[(Idx << (BitNum-1)) + i] ? 1UL : 0UL) << i)); + return val; + } + + static void setValue(llvm::BitVector &Bits, unsigned Idx, T val) { + assert((val >> BitNum) == 0 && "value is too big"); + for (unsigned i = 0; i != BitNum; ++i) + Bits[(Idx << (BitNum-1)) + i] = val & (T(1) << i); + } +}; + +template +class PackedVectorBase { +protected: + static T getValue(const llvm::BitVector &Bits, unsigned Idx) { + T val = T(); + for (unsigned i = 0; i != BitNum-1; ++i) + val = T(val | ((Bits[(Idx << (BitNum-1)) + i] ? 1UL : 0UL) << i)); + if (Bits[(Idx << (BitNum-1)) + BitNum-1]) + val = ~val; + return val; + } + + static void setValue(llvm::BitVector &Bits, unsigned Idx, T val) { + if (val < 0) { + val = ~val; + Bits.set((Idx << (BitNum-1)) + BitNum-1); + } + assert((val >> (BitNum-1)) == 0 && "value is too big"); + for (unsigned i = 0; i != BitNum-1; ++i) + Bits[(Idx << (BitNum-1)) + i] = val & (T(1) << i); + } +}; + +/// \brief Store a vector of values using a specific number of bits for each +/// value. Both signed and unsigned types can be used, e.g +/// @code +/// PackedVector vec; +/// @endcode +/// will create a vector accepting values -2, -1, 0, 1. Any other value will hit +/// an assertion. +template +class PackedVector : public PackedVectorBase::is_signed> { + llvm::BitVector Bits; + typedef PackedVectorBase::is_signed> base; + +public: + class reference { + PackedVector &Vec; + const unsigned Idx; + + reference(); // Undefined + public: + reference(PackedVector &vec, unsigned idx) : Vec(vec), Idx(idx) { } + + reference &operator=(T val) { + Vec.setValue(Vec.Bits, Idx, val); + return *this; + } + operator T() { + return Vec.getValue(Vec.Bits, Idx); + } + }; + + PackedVector() { } + explicit PackedVector(unsigned size) : Bits(size << (BitNum-1)) { } + + bool empty() const { return Bits.empty(); } + + unsigned size() const { return Bits.size() >> (BitNum-1); } + + void clear() { Bits.clear(); } + + void resize(unsigned N) { Bits.resize(N << (BitNum-1)); } + + void reserve(unsigned N) { Bits.reserve(N << (BitNum-1)); } + + PackedVector &reset() { + Bits.reset(); + return *this; + } + + void push_back(T val) { + resize(size()+1); + (*this)[size()-1] = val; + } + + reference operator[](unsigned Idx) { + return reference(*this, Idx); + } + + T operator[](unsigned Idx) const { + return base::getValue(Bits, Idx); + } + + bool operator==(const PackedVector &RHS) const { + return Bits == RHS.Bits; + } + + bool operator!=(const PackedVector &RHS) const { + return Bits != RHS.Bits; + } + + const PackedVector &operator=(const PackedVector &RHS) { + Bits = RHS.Bits; + return *this; + } + + PackedVector &operator|=(const PackedVector &RHS) { + Bits |= RHS.Bits; + return *this; + } + + void swap(PackedVector &RHS) { + Bits.swap(RHS.Bits); + } +}; + +// Leave BitNum=0 undefined. +template +class PackedVector; + +} // end llvm namespace + +#endif Added: user/gabor/tre-integration/contrib/llvm/include/llvm/Analysis/BranchProbabilityInfo.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/llvm/include/llvm/Analysis/BranchProbabilityInfo.h Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,78 @@ +//===--- BranchProbabilityInfo.h - Branch Probability Analysis --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This pass is used to evaluate branch probabilties. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ANALYSIS_BRANCHPROBABILITYINFO_H +#define LLVM_ANALYSIS_BRANCHPROBABILITYINFO_H + +#include "llvm/InitializePasses.h" +#include "llvm/Support/BranchProbability.h" +#include "llvm/Analysis/LoopInfo.h" + +namespace llvm { + +class raw_ostream; + +class BranchProbabilityInfo : public FunctionPass { + + // Default weight value. Used when we don't have information about the edge. + static const uint32_t DEFAULT_WEIGHT = 16; + + typedef std::pair Edge; + + DenseMap Weights; + + // Get sum of the block successors' weights. + uint32_t getSumForBlock(BasicBlock *BB) const; + +public: + static char ID; + + BranchProbabilityInfo() : FunctionPass(ID) { + initializeBranchProbabilityInfoPass(*PassRegistry::getPassRegistry()); + } + + void getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequired(); + AU.setPreservesAll(); + } + + bool runOnFunction(Function &F); + + // Returned value is between 1 and UINT32_MAX. Look at + // BranchProbabilityInfo.cpp for details. + uint32_t getEdgeWeight(BasicBlock *Src, BasicBlock *Dst) const; + + // Look at BranchProbabilityInfo.cpp for details. Use it with caution! + void setEdgeWeight(BasicBlock *Src, BasicBlock *Dst, uint32_t Weight); + + // A 'Hot' edge is an edge which probability is >= 80%. + bool isEdgeHot(BasicBlock *Src, BasicBlock *Dst) const; + + // Return a hot successor for the block BB or null if there isn't one. + BasicBlock *getHotSucc(BasicBlock *BB) const; + + // Return a probability as a fraction between 0 (0% probability) and + // 1 (100% probability), however the value is never equal to 0, and can be 1 + // only iff SRC block has only one successor. + BranchProbability getEdgeProbability(BasicBlock *Src, BasicBlock *Dst) const; + + // Print value between 0 (0% probability) and 1 (100% probability), + // however the value is never equal to 0, and can be 1 only iff SRC block + // has only one successor. + raw_ostream &printEdgeProbability(raw_ostream &OS, BasicBlock *Src, + BasicBlock *Dst) const; +}; + +} + +#endif Added: user/gabor/tre-integration/contrib/llvm/include/llvm/DefaultPasses.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/llvm/include/llvm/DefaultPasses.h Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,167 @@ +//===- llvm/DefaultPasses.h - Default Pass Support code --------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// This file defines the infrastructure for registering the standard pass list. +// This defines sets of standard optimizations that plugins can modify and +// front ends can use. +//===----------------------------------------------------------------------===// + +#ifndef LLVM_DEFAULT_PASS_SUPPORT_H +#define LLVM_DEFAULT_PASS_SUPPORT_H + +namespace llvm { + +class PassManagerBase; + +/// Unique identifiers for the default standard passes. The addresses of +/// these symbols are used to uniquely identify passes from the default list. +namespace DefaultStandardPasses { +extern unsigned char AggressiveDCEID; +extern unsigned char ArgumentPromotionID; +extern unsigned char BasicAliasAnalysisID; +extern unsigned char CFGSimplificationID; +extern unsigned char ConstantMergeID; +extern unsigned char CorrelatedValuePropagationID; +extern unsigned char DeadArgEliminationID; +extern unsigned char DeadStoreEliminationID; +extern unsigned char DeadTypeEliminationID; +extern unsigned char EarlyCSEID; +extern unsigned char FunctionAttrsID; +extern unsigned char FunctionInliningID; +extern unsigned char GVNID; +extern unsigned char GlobalDCEID; +extern unsigned char GlobalOptimizerID; +extern unsigned char GlobalsModRefID; +extern unsigned char IPSCCPID; +extern unsigned char IndVarSimplifyID; +extern unsigned char InlinerPlaceholderID; +extern unsigned char InstructionCombiningID; +extern unsigned char JumpThreadingID; +extern unsigned char LICMID; +extern unsigned char LoopDeletionID; +extern unsigned char LoopIdiomID; +extern unsigned char LoopRotateID; +extern unsigned char LoopUnrollID; +extern unsigned char LoopUnswitchID; +extern unsigned char MemCpyOptID; +extern unsigned char PruneEHID; +extern unsigned char ReassociateID; +extern unsigned char SCCPID; +extern unsigned char ScalarReplAggregatesID; +extern unsigned char SimplifyLibCallsID; +extern unsigned char StripDeadPrototypesID; +extern unsigned char TailCallEliminationID; +extern unsigned char TypeBasedAliasAnalysisID; +} + +/// StandardPass - The class responsible for maintaining the lists of standard +class StandardPass { + friend class RegisterStandardPassLists; + public: + /// Predefined standard sets of passes + enum StandardSet { + AliasAnalysis, + Function, + Module, + LTO + }; + /// Flags to specify whether a pass should be enabled. Passes registered + /// with the standard sets may specify a minimum optimization level and one + /// or more flags that must be set when constructing the set for the pass to + /// be used. + enum OptimizationFlags { + /// Optimize for size was requested. + OptimizeSize = 1<<0, + /// Allow passes which may make global module changes. + UnitAtATime = 1<<1, + /// UnrollLoops - Allow loop unrolling. + UnrollLoops = 1<<2, + /// Allow library calls to be simplified. + SimplifyLibCalls = 1<<3, + /// Whether the module may have code using exceptions. + HaveExceptions = 1<<4, + // Run an inliner pass as part of this set. + RunInliner = 1<<5 + }; + enum OptimizationFlagComponents { + /// The low bits are used to store the optimization level. When requesting + /// passes, this should store the requested optimisation level. When + /// setting passes, this should set the minimum optimization level at which + /// the pass will run. + OptimizationLevelMask=0xf, + /// The maximum optimisation level at which the pass is run. + MaxOptimizationLevelMask=0xf0, + // Flags that must be set + RequiredFlagMask=0xff00, + // Flags that may not be set. + DisallowedFlagMask=0xff0000, + MaxOptimizationLevelShift=4, + RequiredFlagShift=8, + DisallowedFlagShift=16 + }; + /// Returns the optimisation level from a set of flags. + static unsigned OptimizationLevel(unsigned flags) { + return flags & OptimizationLevelMask; + } + /// Returns the maximum optimization level for this set of flags + static unsigned MaxOptimizationLevel(unsigned flags) { + return (flags & MaxOptimizationLevelMask) >> 4; + } + /// Constructs a set of flags from the specified minimum and maximum + /// optimisation level + static unsigned OptimzationFlags(unsigned minLevel=0, unsigned maxLevel=0xf, + unsigned requiredFlags=0, unsigned disallowedFlags=0) { + return ((minLevel & OptimizationLevelMask) | + ((maxLevel<> RequiredFlagShift; + } + /// Returns the flags that must not be set for this to match + static unsigned DisallowedFlags(unsigned flags) { + return (flags & DisallowedFlagMask) >> DisallowedFlagShift; + } + /// Register a standard pass in the specified set. If flags is non-zero, + /// then the pass will only be returned when the specified flags are set. + template + class RegisterStandardPass { + public: + RegisterStandardPass(StandardSet set, unsigned char *runBefore=0, + unsigned flags=0, unsigned char *ID=0) { + // Use the pass's ID if one is not specified + RegisterDefaultPass(PassInfo::NormalCtor_t(callDefaultCtor), + ID ? ID : (unsigned char*)&passName::ID, runBefore, set, flags); + } + }; + /// Adds the passes from the specified set to the provided pass manager + static void AddPassesFromSet(PassManagerBase *PM, + StandardSet set, + unsigned flags=0, + bool VerifyEach=false, + Pass *inliner=0); + private: + /// Registers the default passes. This is set by RegisterStandardPassLists + /// and is called lazily. + static void (*RegisterDefaultPasses)(void); + /// Creates the verifier pass that is inserted when a VerifyEach is passed to + /// AddPassesFromSet() + static Pass* (*CreateVerifierPass)(void); + /// Registers the pass + static void RegisterDefaultPass(PassInfo::NormalCtor_t constructor, + unsigned char *newPass, + unsigned char *oldPass, + StandardSet set, + unsigned flags=0); +}; + +} // namespace llvm + +#endif Added: user/gabor/tre-integration/contrib/llvm/include/llvm/MC/MCWin64EH.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/gabor/tre-integration/contrib/llvm/include/llvm/MC/MCWin64EH.h Thu Jun 23 00:04:06 2011 (r223453) @@ -0,0 +1,93 @@ +//===- MCWin64EH.h - Machine Code Win64 EH support --------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file contains declarations to support the Win64 Exception Handling +// scheme in MC. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_MC_MCWIN64EH_H +#define LLVM_MC_MCWIN64EH_H + +#include "llvm/Support/Win64EH.h" +#include +#include + +namespace llvm { + class StringRef; + class MCStreamer; + class MCSymbol; + + class MCWin64EHInstruction { + public: + typedef Win64EH::UnwindOpcodes OpType; + private: + OpType Operation; + MCSymbol *Label; + unsigned Offset; + unsigned Register; + public: + MCWin64EHInstruction(OpType Op, MCSymbol *L, unsigned Reg) + : Operation(Op), Label(L), Offset(0), Register(Reg) { + assert(Op == Win64EH::UOP_PushNonVol); + } + MCWin64EHInstruction(MCSymbol *L, unsigned Size) + : Operation(Size>128 ? Win64EH::UOP_AllocLarge : Win64EH::UOP_AllocSmall), + Label(L), Offset(Size) { } + MCWin64EHInstruction(OpType Op, MCSymbol *L, unsigned Reg, unsigned Off) + : Operation(Op), Label(L), Offset(Off), Register(Reg) { + assert(Op == Win64EH::UOP_SetFPReg || + Op == Win64EH::UOP_SaveNonVol || + Op == Win64EH::UOP_SaveNonVolBig || + Op == Win64EH::UOP_SaveXMM128 || *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***