From isanbard at gmail.com Mon Mar 7 01:37:12 2011 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 07 Mar 2011 07:37:12 -0000 Subject: [llvm-commits] [llvm] r127154 - /llvm/trunk/docs/HowToReleaseLLVM.html Message-ID: <20110307073713.007522A6C12C@llvm.org> Author: void Date: Mon Mar 7 01:37:12 2011 New Revision: 127154 URL: http://llvm.org/viewvc/llvm-project?rev=127154&view=rev Log: Fix tagging name. Modified: llvm/trunk/docs/HowToReleaseLLVM.html Modified: llvm/trunk/docs/HowToReleaseLLVM.html URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/HowToReleaseLLVM.html?rev=127154&r1=127153&r2=127154&view=diff ============================================================================== --- llvm/trunk/docs/HowToReleaseLLVM.html (original) +++ llvm/trunk/docs/HowToReleaseLLVM.html Mon Mar 7 01:37:12 2011 @@ -224,19 +224,19 @@
 $ svn mkdir https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY
 $ svn copy https://llvm.org/svn/llvm-project/llvm/branches/release_XY \
-           https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/RC1
+           https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/rc1
 
 $ svn mkdir https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY
 $ svn copy https://llvm.org/svn/llvm-project/llvm-gcc-4.2/branches/release_XY \
-           https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY/RC1
+           https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY/rc1
 
 $ svn mkdir https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY
 $ svn copy https://llvm.org/svn/llvm-project/test-suite/branches/release_XY \
-           https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/RC1
+           https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/rc1
 
 $ svn mkdir https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY
 $ svn copy https://llvm.org/svn/llvm-project/cfe/branches/release_XY \
-           https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/RC1
+           https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/rc1
 
@@ -251,10 +251,10 @@
-$ svn export https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/RC1 llvm-X.Yrc1
-$ svn export https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY/RC1 llvm-gcc4.2-X.Yrc1
-$ svn export https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/RC1 llvm-test-X.Yrc1
-$ svn export https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/RC1 clang-X.Yrc1
+$ svn export https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_XY/rc1 llvm-X.Yrc1
+$ svn export https://llvm.org/svn/llvm-project/llvm-gcc-4.2/tags/RELEASE_XY/rc1 llvm-gcc4.2-X.Yrc1
+$ svn export https://llvm.org/svn/llvm-project/test-suite/tags/RELEASE_XY/rc1 llvm-test-X.Yrc1
+$ svn export https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_XY/rc1 clang-X.Yrc1
 
 $ tar -czvf - llvm-X.Yrc1        | gzip > llvm-X.Yrc1.src.tar.gz
 $ tar -czvf - llvm-test-X.Yrc1   | gzip > llvm-test-X.Yrc1.src.tar.gz



From isanbard at gmail.com  Mon Mar  7 01:37:37 2011
From: isanbard at gmail.com (Bill Wendling)
Date: Mon, 07 Mar 2011 07:37:37 -0000
Subject: [llvm-commits] [llvm] r127155 -
	/llvm/trunk/utils/release/test-release.sh
Message-ID: <20110307073737.62E252A6C12C@llvm.org>

Author: void
Date: Mon Mar  7 01:37:37 2011
New Revision: 127155

URL: http://llvm.org/viewvc/llvm-project?rev=127155&view=rev
Log:
Don't keep the log files around. Just pipe to a log file instead.

Modified:
    llvm/trunk/utils/release/test-release.sh

Modified: llvm/trunk/utils/release/test-release.sh
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/release/test-release.sh?rev=127155&r1=127154&r2=127155&view=diff
==============================================================================
--- llvm/trunk/utils/release/test-release.sh (original)
+++ llvm/trunk/utils/release/test-release.sh Mon Mar  7 01:37:37 2011
@@ -12,7 +12,8 @@
 #
 #===------------------------------------------------------------------------===#
 
-set -e
+set -e                          # Exit if any command fails
+set -x                          # Show commands as they are executed
 
 Release=""
 Release_no_dot=""
@@ -33,9 +34,9 @@
     echo " -build-dir DIR    Directory to perform testing in. [default: pwd]"
     echo " -no-checkout      Don't checkout the sources from SVN."
     echo " -no-64bit         Don't test the 64-bit version. [default: yes]"
-    echo " -ada              Build Ada. [default: no]"
-    echo " -disable-objc     Disable ObjC build. [default: build]"
-    echo " -disable-fortran  Disable Fortran build. [default: build]"
+    echo " -enable-ada       Build Ada. [default: disable]"
+    echo " -disable-objc     Disable ObjC build. [default: enable]"
+    echo " -disable-fortran  Disable Fortran build. [default: enable]"
 }
 
 while [ $# -gt 0 ]; do
@@ -66,7 +67,7 @@
         -no-64bit | --no-64bit )
             do_64bit="no"
             ;;
-        -ada | --ada )
+        -enable-ada | --enable-ada )
             do_ada="yes"
             ;;
         -disable-objc | --disable-objc )
@@ -118,11 +119,6 @@
 llvmCore_srcdir=$BuildDir/llvmCore-$Release-rc$RC.src
 llvmgcc42_srcdir=$BuildDir/llvmgcc42-$Release-rc$RC.src
 
-# Location of log files.
-LogDirName="$Release-rc$RC.logs"
-LogDir=$BuildDir/$LogDirName
-mkdir -p $LogDir
-
 # SVN URLs for the sources.
 Base_url="http://llvm.org/svn/llvm-project"
 llvmCore_RC_url="$Base_url/llvm/tags/RELEASE_$Release_no_dot/rc$RC"
@@ -201,8 +197,7 @@
     $llvmCore_srcdir/configure --prefix=$InstallDir \
         --enable-optimized=$Optimized \
         --enable-assertions=$Assertions \
-        --with-llvmgccdir=$llvmgccDir \
-        > $LogDir/llvm.configure.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
+        --with-llvmgccdir=$llvmgccDir
     cd -
 }
 
@@ -223,13 +218,11 @@
     cd $ObjDir
     echo "# Compiling llvm $Release-rc$RC $Flavor"
     echo "# make -j $NumJobs VERBOSE=1 $ExtraOpts"
-    make -j $NumJobs VERBOSE=1 $ExtraOpts $CompilerFlags \
-        > $LogDir/llvm.make.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
+    make -j $NumJobs VERBOSE=1 $ExtraOpts $CompilerFlags
 
     echo "# Installing llvm $Release-rc$RC $Flavor"
     echo "# make install"
-    make install \
-        > $LogDir/llvm.install.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
+    make install
     cd -
 }
 
@@ -239,12 +232,9 @@
     ObjDir="$3"
 
     cd $ObjDir
-    make check \
-        > $LogDir/llvm.check.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
-    make -C tools/clang test \
-        > $LogDir/clang.check.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
-    make unittests \
-        > $LogDir/llvm.unittests.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
+    make check
+    make -C tools/clang test
+    make unittests
     cd -
 }
 
@@ -273,8 +263,7 @@
         --enable-languages=$languages"
     $llvmgcc42_srcdir/configure --prefix=$InstallDir \
         --program-prefix=llvm- --enable-llvm=$llvmObjDir \
-        --enable-languages=$languages \
-        > $LogDir/llvm-gcc.configure.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
+        --enable-languages=$languages
     cd -
 }
 
@@ -292,13 +281,11 @@
     cd $ObjDir
     echo "# Compiling llvm-gcc $Release-rc$RC $Flavor"
     echo "# make -j $NumJobs bootstrap LLVM_VERSION_INFO=$Release"
-    make -j $NumJobs bootstrap LLVM_VERSION_INFO=$Release $CompilerFlags \
-        > $LogDir/llvm-gcc.make.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
+    make -j $NumJobs bootstrap LLVM_VERSION_INFO=$Release $CompilerFlags
 
     echo "# Installing llvm-gcc $Release-rc$RC $Flavor"
     echo "# make install"
-    make install \
-        > $LogDir/llvm-gcc.install.$Release-rc$RC-Phase$Phase-$Flavor.log 2>&1
+    make install
     cd -
 }
 
@@ -306,7 +293,6 @@
     export_sources
 fi
 
-(
 Flavors="Debug Release Release+Asserts"
 if [ "$do_64bit" = "yes" ]; then
     Flavors="$Flavors Release-64"
@@ -390,9 +376,7 @@
     echo "# Testing - built with llvmgcc42"
     test_llvmCore 2 $Flavor $llvmCore_phase2_objdir
 done
-) 2>&1 | tee $LogDir/testing.$Release-rc$RC.log
 
 # Woo hoo!
 echo "### Testing Finished ###"
-echo "### Logs: $LogDir"
 exit 0



From baldrick at free.fr  Mon Mar  7 03:04:01 2011
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 07 Mar 2011 10:04:01 +0100
Subject: [llvm-commits] [llvm] r127138
	-	/llvm/trunk/lib/Transforms/IPO/Internalize.cpp
In-Reply-To: <20110306234134.4C3A32A6C12C@llvm.org>
References: <20110306234134.4C3A32A6C12C@llvm.org>
Message-ID: <4D749F81.6020908@free.fr>

Hi Rafael,

> Don't internalize available_externally functions. We already did the right
> thing for variables.

testcase?

Ciao, Duncan.

From baldrick at free.fr  Mon Mar  7 03:12:24 2011
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 07 Mar 2011 09:12:24 -0000
Subject: [llvm-commits] [llvm] r127156 - /llvm/trunk/docs/LangRef.html
Message-ID: <20110307091224.9C0212A6C12D@llvm.org>

Author: baldrick
Date: Mon Mar  7 03:12:24 2011
New Revision: 127156

URL: http://llvm.org/viewvc/llvm-project?rev=127156&view=rev
Log:
Clarify that the result of an srem is only guaranteed to have the same sign as the
left-hand-side if the result is non-zero.

Modified:
    llvm/trunk/docs/LangRef.html

Modified: llvm/trunk/docs/LangRef.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.html?rev=127156&r1=127155&r2=127156&view=diff
==============================================================================
--- llvm/trunk/docs/LangRef.html (original)
+++ llvm/trunk/docs/LangRef.html Mon Mar  7 03:12:24 2011
@@ -3611,9 +3611,10 @@
 
 
Semantics:

This instruction returns the remainder of a division (where the result - has the same sign as the dividend, op1), not the modulo - operator (where the result has the same sign as the divisor, op2) of - a value. For more information about the difference, + is either zero or has the same sign as the dividend, op1), not the + modulo operator (where the result is either zero or has the same sign + as the divisor, op2) of a value. + For more information about the difference, see The Math Forum. For a table of how this is implemented in various languages, please see From baldrick at free.fr Mon Mar 7 03:25:12 2011 From: baldrick at free.fr (Duncan Sands) Date: Mon, 07 Mar 2011 10:25:12 +0100 Subject: [llvm-commits] [llvm] r127063 - in /llvm/trunk: lib/Transforms/InstCombine/InstCombineCompares.cpp test/Transforms/InstCombine/icmp.ll In-Reply-To: <20110305042849.290962A6C12C@llvm.org> References: <20110305042849.290962A6C12C@llvm.org> Message-ID: <4D74A478.2010104@free.fr> Hi Nick, > + BinaryOperator *SRem = NULL; > + // icmp Y, (srem X, Y) > + if (BO0&& BO0->getOpcode() == Instruction::SRem&& > + Op1 == BO0->getOperand(1)) > + SRem = BO0; > + // icmp (srem X, Y), Y > + else if (BO1&& BO1->getOpcode() == Instruction::SRem&& > + Op0 == BO1->getOperand(1)) > + SRem = BO1; the two comments seem to be the wrong way round. Ciao, Duncan. From justin.holewinski at gmail.com Mon Mar 7 08:32:30 2011 From: justin.holewinski at gmail.com (Justin Holewinski) Date: Mon, 07 Mar 2011 14:32:30 -0000 Subject: [llvm-commits] [llvm] r127157 - /llvm/trunk/lib/VMCore/AsmWriter.cpp Message-ID: <20110307143230.DDC552A6C12C@llvm.org> Author: jholewinski Date: Mon Mar 7 08:32:30 2011 New Revision: 127157 URL: http://llvm.org/viewvc/llvm-project?rev=127157&view=rev Log: ptx: Fix calling convention printing in AsmWriter.cpp This allows LLVM IR using ptx_kernel or ptx_device calling conventions to be properly printed when emitted in text form. Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=127157&r1=127156&r2=127157&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/AsmWriter.cpp (original) +++ llvm/trunk/lib/VMCore/AsmWriter.cpp Mon Mar 7 08:32:30 2011 @@ -1584,8 +1584,8 @@ case CallingConv::ARM_AAPCS: Out << "arm_aapcscc "; break; case CallingConv::ARM_AAPCS_VFP:Out << "arm_aapcs_vfpcc "; break; case CallingConv::MSP430_INTR: Out << "msp430_intrcc "; break; - case CallingConv::PTX_Kernel: Out << "ptx_kernel"; break; - case CallingConv::PTX_Device: Out << "ptx_device"; break; + case CallingConv::PTX_Kernel: Out << "ptx_kernel "; break; + case CallingConv::PTX_Device: Out << "ptx_device "; break; default: Out << "cc" << F->getCallingConv() << " "; break; } From baldrick at free.fr Mon Mar 7 08:51:33 2011 From: baldrick at free.fr (Duncan Sands) Date: Mon, 07 Mar 2011 14:51:33 -0000 Subject: [llvm-commits] [dragonegg] r127158 - /dragonegg/trunk/llvm-types.cpp Message-ID: <20110307145133.80E9C2A6C12C@llvm.org> Author: baldrick Date: Mon Mar 7 08:51:33 2011 New Revision: 127158 URL: http://llvm.org/viewvc/llvm-project?rev=127158&view=rev Log: Turn __float128 into fp128 on linux. Giving this a whirl through the buildbots to see if it breaks the self-host. Modified: dragonegg/trunk/llvm-types.cpp Modified: dragonegg/trunk/llvm-types.cpp URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/llvm-types.cpp?rev=127158&r1=127157&r2=127158&view=diff ============================================================================== --- dragonegg/trunk/llvm-types.cpp (original) +++ dragonegg/trunk/llvm-types.cpp Mon Mar 7 08:51:33 2011 @@ -706,14 +706,9 @@ case 128: #ifdef TARGET_POWERPC Ty = SET_TYPE_LLVM(type, Type::getPPC_FP128Ty(Context)); -#elif defined(TARGET_ZARCH) || defined(TARGET_CPU_sparc) // FIXME: Use some generic define. - // This is for IEEE double extended, e.g. Sparc - Ty = SET_TYPE_LLVM(type, Type::getFP128Ty(Context)); #else - // 128-bit long doubles map onto { double, double }. - Ty = SET_TYPE_LLVM(type, - StructType::get(Context, Type::getDoubleTy(Context), - Type::getDoubleTy(Context), NULL)); + // IEEE quad precision. + Ty = SET_TYPE_LLVM(type, Type::getFP128Ty(Context)); #endif break; } From baldrick at free.fr Mon Mar 7 09:56:08 2011 From: baldrick at free.fr (Duncan Sands) Date: Mon, 07 Mar 2011 15:56:08 -0000 Subject: [llvm-commits] [dragonegg] r127161 - in /dragonegg/trunk: llvm-convert.cpp llvm-internal.h Message-ID: <20110307155608.828022A6C12C@llvm.org> Author: baldrick Date: Mon Mar 7 09:56:08 2011 New Revision: 127161 URL: http://llvm.org/viewvc/llvm-project?rev=127161&view=rev Log: Add a separate routine for turning INTEGER_CST into a constant of register type. This results in duplicated code, but I plan to transmogrify the original version into something completely different. Modified: dragonegg/trunk/llvm-convert.cpp dragonegg/trunk/llvm-internal.h Modified: dragonegg/trunk/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/llvm-convert.cpp?rev=127161&r1=127160&r2=127161&view=diff ============================================================================== --- dragonegg/trunk/llvm-convert.cpp (original) +++ dragonegg/trunk/llvm-convert.cpp Mon Mar 7 09:56:08 2011 @@ -5881,8 +5881,7 @@ llvm_unreachable("Unhandled GIMPLE constant!"); case INTEGER_CST: - C = TreeConstantToLLVM::ConvertINTEGER_CST(reg); - break; + return EmitRegisterIntegerConstant(reg); case REAL_CST: C = TreeConstantToLLVM::ConvertREAL_CST(reg); break; @@ -5905,6 +5904,34 @@ return Mem2Reg(C, TREE_TYPE(reg), *TheFolder); } +/// EmitRegisterIntegerConstant - Turn the given INTEGER_CST into an LLVM +/// constant of the corresponding register type. +Constant *TreeToLLVM::EmitRegisterIntegerConstant(tree reg) { + unsigned Precision = TYPE_PRECISION(TREE_TYPE(reg)); + + ConstantInt *CI; + if (HOST_BITS_PER_WIDE_INT < integerPartWidth) { + assert(2 * HOST_BITS_PER_WIDE_INT <= integerPartWidth && + "Unsupported host integer precision!"); + unsigned ShiftAmt = HOST_BITS_PER_WIDE_INT; + integerPart Val = (integerPart)(unsigned HOST_WIDE_INT)TREE_INT_CST_LOW(reg) + + ((integerPart)(unsigned HOST_WIDE_INT)TREE_INT_CST_HIGH(reg) << ShiftAmt); + CI = ConstantInt::get(Context, APInt(Precision, Val)); + } else { + assert(HOST_BITS_PER_WIDE_INT == integerPartWidth && + "The engines cannae' take it captain!"); + integerPart Parts[] = { TREE_INT_CST_LOW(reg), TREE_INT_CST_HIGH(reg) }; + CI = ConstantInt::get(Context, APInt(Precision, 2, Parts)); + } + + // The destination can be a pointer, integer or floating point type so we need + // a generalized cast here + const Type *Ty = GetRegType(TREE_TYPE(reg)); + Instruction::CastOps opcode = CastInst::getCastOpcode(CI, false, Ty, + !TYPE_UNSIGNED(TREE_TYPE(reg))); + return TheFolder->CreateCast(opcode, CI, Ty); +} + /// Mem2Reg - Convert a value of in-memory type (that given by ConvertType) /// to in-register type (that given by GetRegType). Value *TreeToLLVM::Mem2Reg(Value *V, tree_node *type, LLVMBuilder &Builder) { Modified: dragonegg/trunk/llvm-internal.h URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/llvm-internal.h?rev=127161&r1=127160&r2=127161&view=diff ============================================================================== --- dragonegg/trunk/llvm-internal.h (original) +++ dragonegg/trunk/llvm-internal.h Mon Mar 7 09:56:08 2011 @@ -782,6 +782,10 @@ /// to an LLVM constant. Creates no code, only constants. Constant *EmitRegisterConstant(tree_node *reg); + /// EmitRegisterIntegerConstant - Turn the given INTEGER_CST into an LLVM + /// constant of the corresponding register type. + Constant *EmitRegisterIntegerConstant(tree_node *reg); + /// Mem2Reg - Convert a value of in-memory type (that given by ConvertType) /// to in-register type (that given by GetRegType). TODO: Eliminate these /// methods: "memory" values should never be held in registers. Currently From justin.holewinski at gmail.com Mon Mar 7 10:41:34 2011 From: justin.holewinski at gmail.com (Justin Holewinski) Date: Mon, 7 Mar 2011 11:41:34 -0500 Subject: [llvm-commits] [PATCH] PTX: Add preliminary branch support, including integer comparison operations involving unsigned integers. Message-ID: This patch adds preliminary branch support for the PTX backend. Unsigned integer comparison is supported, and predicated branches are emitted for conditional branches. Che-Liang, Is this patch okay to commit? -- Thanks, Justin Holewinski -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20110307/a64b480e/attachment-0001.html -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-PTX-Add-preliminary-branch-support-including-integer.patch Type: text/x-patch Size: 9012 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20110307/a64b480e/attachment-0001.bin From justin.holewinski at gmail.com Mon Mar 7 11:08:33 2011 From: justin.holewinski at gmail.com (Justin Holewinski) Date: Mon, 7 Mar 2011 12:08:33 -0500 Subject: [llvm-commits] [PATCH] PTX: Add intrinsic support for ntid, ctaid, and nctaid registers Message-ID: This patch adds support for the ntid, ctaid, and nctaid special registers in the PTX backend. Che-Liang, Is this patch okay to commit? -- Thanks, Justin Holewinski -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20110307/905e600f/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-PTX-Add-intrinsic-support-for-ntid-ctaid-and-nctaid-.patch Type: text/x-patch Size: 6706 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20110307/905e600f/attachment.bin From echristo at apple.com Mon Mar 7 12:26:08 2011 From: echristo at apple.com (Eric Christopher) Date: Mon, 7 Mar 2011 10:26:08 -0800 Subject: [llvm-commits] [PATCH] Makefile.rules: [PR9321] "make install" may install include files along explicit pattern. In-Reply-To: References: Message-ID: <52707747-2CB1-4E5D-A0A4-6D57A2E50047@apple.com> On Feb 27, 2011, at 8:53 PM, NAKAMURA Takumi wrote: > --- > Makefile.rules | 23 ++++++++++++++++++++--- > 1 files changed, 20 insertions(+), 3 deletions(-) > > I prefer adding explicit patterns rather than adding exclusive > patterns, to suppress installing *.cmake. > > ...Takumi > <0002-Makefile.rules-PR9321-make-install-may-install-i.patch.txt> Can you give me a list of differences in the install before and after this patch please? -eric From echristo at apple.com Mon Mar 7 12:26:33 2011 From: echristo at apple.com (Eric Christopher) Date: Mon, 7 Mar 2011 10:26:33 -0800 Subject: [llvm-commits] [PATCH] Makefile.rules: [PR9321] "make install" may install include files along explicit pattern. In-Reply-To: References: Message-ID: <851BA812-CA38-4370-98D1-3BCF941341E7@apple.com> On Mar 6, 2011, at 8:56 PM, NAKAMURA Takumi wrote: > Ping. Responded to the original :) -eric From resistor at mac.com Mon Mar 7 12:29:47 2011 From: resistor at mac.com (Owen Anderson) Date: Mon, 07 Mar 2011 18:29:47 -0000 Subject: [llvm-commits] [llvm] r127163 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h lib/CodeGen/SelectionDAG/LegalizeDAG.cpp lib/CodeGen/SelectionDAG/SelectionDAG.cpp Message-ID: <20110307182947.E3CF22A6C12C@llvm.org> Author: resistor Date: Mon Mar 7 12:29:47 2011 New Revision: 127163 URL: http://llvm.org/viewvc/llvm-project?rev=127163&view=rev Log: Use the correct LHS type when determining the legalization of a shift's RHS type. Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=127163&r1=127162&r2=127163&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Mon Mar 7 12:29:47 2011 @@ -438,12 +438,12 @@ SDValue getConvertRndSat(EVT VT, DebugLoc dl, SDValue Val, SDValue DTy, SDValue STy, SDValue Rnd, SDValue Sat, ISD::CvtCode Code); - + /// getVectorShuffle - Return an ISD::VECTOR_SHUFFLE node. The number of /// elements in VT, which must be a vector type, must match the number of /// mask elements NumElts. A integer mask element equal to -1 is treated as /// undefined. - SDValue getVectorShuffle(EVT VT, DebugLoc dl, SDValue N1, SDValue N2, + SDValue getVectorShuffle(EVT VT, DebugLoc dl, SDValue N1, SDValue N2, const int *MaskElts); /// getSExtOrTrunc - Convert Op, which must be of integer type, to the @@ -671,10 +671,10 @@ /// getMDNode - Return an MDNodeSDNode which holds an MDNode. SDValue getMDNode(const MDNode *MD); - + /// getShiftAmountOperand - Return the specified value casted to /// the target's desired shift amount type. - SDValue getShiftAmountOperand(SDValue Op); + SDValue getShiftAmountOperand(EVT LHSTy, SDValue Op); /// UpdateNodeOperands - *Mutate* the specified node in-place to have the /// specified operands. If the resultant node already exists in the DAG, @@ -901,7 +901,7 @@ SmallVector &GetDbgValues(const SDNode* SD) { return DbgInfo->getSDDbgValues(SD); } - + /// TransferDbgValues - Transfer SDDbgValues. void TransferDbgValues(SDValue From, SDValue To); @@ -911,11 +911,11 @@ SDDbgInfo::DbgIterator DbgBegin() { return DbgInfo->DbgBegin(); } SDDbgInfo::DbgIterator DbgEnd() { return DbgInfo->DbgEnd(); } - SDDbgInfo::DbgIterator ByvalParmDbgBegin() { - return DbgInfo->ByvalParmDbgBegin(); + SDDbgInfo::DbgIterator ByvalParmDbgBegin() { + return DbgInfo->ByvalParmDbgBegin(); } - SDDbgInfo::DbgIterator ByvalParmDbgEnd() { - return DbgInfo->ByvalParmDbgEnd(); + SDDbgInfo::DbgIterator ByvalParmDbgEnd() { + return DbgInfo->ByvalParmDbgEnd(); } void dump() const; @@ -972,7 +972,7 @@ /// semantics as an ADD. This handles the equivalence: /// X|Cst == X+Cst iff X&Cst = 0. bool isBaseWithConstantOffset(SDValue Op) const; - + /// isKnownNeverNan - Test whether the given SDValue is known to never be NaN. bool isKnownNeverNaN(SDValue Op) const; @@ -997,8 +997,8 @@ /// vector op and fill the end of the resulting vector with UNDEFS. SDValue UnrollVectorOp(SDNode *N, unsigned ResNE = 0); - /// isConsecutiveLoad - Return true if LD is loading 'Bytes' bytes from a - /// location that is 'Dist' units away from the location that the 'Base' load + /// isConsecutiveLoad - Return true if LD is loading 'Bytes' bytes from a + /// location that is 'Dist' units away from the location that the 'Base' load /// is loading from. bool isConsecutiveLoad(LoadSDNode *LD, LoadSDNode *Base, unsigned Bytes, int Dist) const; @@ -1032,7 +1032,7 @@ std::vector ValueTypeNodes; std::map ExtendedValueTypeNodes; StringMap ExternalSymbols; - + std::map,SDNode*> TargetExternalSymbols; }; Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=127163&r1=127162&r2=127163&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Mon Mar 7 12:29:47 2011 @@ -948,7 +948,8 @@ // Legalizing shifts/rotates requires adjusting the shift amount // to the appropriate width. if (!Ops[1].getValueType().isVector()) - Ops[1] = LegalizeOp(DAG.getShiftAmountOperand(Ops[1])); + Ops[1] = LegalizeOp(DAG.getShiftAmountOperand(Ops[0].getValueType(), + Ops[1])); break; case ISD::SRL_PARTS: case ISD::SRA_PARTS: @@ -956,7 +957,8 @@ // Legalizing shifts/rotates requires adjusting the shift amount // to the appropriate width. if (!Ops[2].getValueType().isVector()) - Ops[2] = LegalizeOp(DAG.getShiftAmountOperand(Ops[2])); + Ops[2] = LegalizeOp(DAG.getShiftAmountOperand(Ops[0].getValueType(), + Ops[2])); break; } Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=127163&r1=127162&r2=127163&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Mon Mar 7 12:29:47 2011 @@ -1418,9 +1418,9 @@ /// getShiftAmountOperand - Return the specified value casted to /// the target's desired shift amount type. -SDValue SelectionDAG::getShiftAmountOperand(SDValue Op) { +SDValue SelectionDAG::getShiftAmountOperand(EVT LHSTy, SDValue Op) { EVT OpTy = Op.getValueType(); - MVT ShTy = TLI.getShiftAmountTy(OpTy); + MVT ShTy = TLI.getShiftAmountTy(LHSTy); if (OpTy == ShTy || OpTy.isVector()) return Op; ISD::NodeType Opcode = OpTy.bitsGT(ShTy) ? ISD::TRUNCATE : ISD::ZERO_EXTEND; @@ -6314,7 +6314,8 @@ case ISD::ROTL: case ISD::ROTR: Scalars.push_back(getNode(N->getOpcode(), dl, EltVT, Operands[0], - getShiftAmountOperand(Operands[1]))); + getShiftAmountOperand(Operands[0].getValueType(), + Operands[1]))); break; case ISD::SIGN_EXTEND_INREG: case ISD::FP_ROUND_INREG: { From stoklund at 2pi.dk Mon Mar 7 12:56:16 2011 From: stoklund at 2pi.dk (Jakob Stoklund Olesen) Date: Mon, 07 Mar 2011 18:56:16 -0000 Subject: [llvm-commits] [llvm] r127167 - /llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Message-ID: <20110307185616.C4B0F2A6C12C@llvm.org> Author: stoklund Date: Mon Mar 7 12:56:16 2011 New Revision: 127167 URL: http://llvm.org/viewvc/llvm-project?rev=127167&view=rev Log: Handle the special case of registers begin redefined by early-clobber defs. In this case, the value need to be available at the load index instead of the normal use index. Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=127167&r1=127166&r2=127167&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Mon Mar 7 12:56:16 2011 @@ -779,6 +779,13 @@ if (VNI->isUnused()) continue; NewLI.addRange(LiveRange(VNI->def, VNI->def.getNextSlot(), VNI)); + + // A use tied to an early-clobber def ends at the load slot and isn't caught + // above. Catch it here instead. This probably only ever happens for inline + // assembly. + if (VNI->def.isUse()) + if (VNInfo *UVNI = li->getVNInfoAt(VNI->def.getLoadIndex())) + WorkList.push_back(std::make_pair(VNI->def.getLoadIndex(), UVNI)); } // Keep track of the PHIs that are in use. From kledzik at apple.com Mon Mar 7 13:15:15 2011 From: kledzik at apple.com (Nick Kledzik) Date: Mon, 07 Mar 2011 19:15:15 -0000 Subject: [llvm-commits] [compiler-rt] r127168 - /compiler-rt/tags/Apple/Libcompiler_rt-11/ Message-ID: <20110307191515.BA7D72A6C12C@llvm.org> Author: kledzik Date: Mon Mar 7 13:15:15 2011 New Revision: 127168 URL: http://llvm.org/viewvc/llvm-project?rev=127168&view=rev Log: Libcompiler_rt-11 Added: compiler-rt/tags/Apple/Libcompiler_rt-11/ - copied from r127167, compiler-rt/trunk/ From grosbach at apple.com Mon Mar 7 13:28:43 2011 From: grosbach at apple.com (Jim Grosbach) Date: Mon, 07 Mar 2011 19:28:43 -0000 Subject: [llvm-commits] [llvm] r127169 - /llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h Message-ID: <20110307192844.095E82A6C12C@llvm.org> Author: grosbach Date: Mon Mar 7 13:28:43 2011 New Revision: 127169 URL: http://llvm.org/viewvc/llvm-project?rev=127169&view=rev Log: Tidy up. Modified: llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h Modified: llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h?rev=127169&r1=127168&r2=127169&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h Mon Mar 7 13:28:43 2011 @@ -15,7 +15,6 @@ #define LLVM_CODEGEN_MACHINEFRAMEINFO_H #include "llvm/ADT/SmallVector.h" -//#include "llvm/ADT/IndexedMap.h" #include "llvm/Support/DataTypes.h" #include #include From baldrick at free.fr Mon Mar 7 13:38:39 2011 From: baldrick at free.fr (Duncan Sands) Date: Mon, 07 Mar 2011 19:38:39 -0000 Subject: [llvm-commits] [llvm] r127170 - /llvm/trunk/include/llvm/ADT/DenseMap.h Message-ID: <20110307193839.25BA32A6C12C@llvm.org> Author: baldrick Date: Mon Mar 7 13:38:38 2011 New Revision: 127170 URL: http://llvm.org/viewvc/llvm-project?rev=127170&view=rev Log: Often GCC can see that NumBuckets is zero here, resulting in a warning about possibly swapped memset parameters. Avoid the warning. Modified: llvm/trunk/include/llvm/ADT/DenseMap.h Modified: llvm/trunk/include/llvm/ADT/DenseMap.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/DenseMap.h?rev=127170&r1=127169&r2=127170&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/DenseMap.h (original) +++ llvm/trunk/include/llvm/ADT/DenseMap.h Mon Mar 7 13:38:38 2011 @@ -72,7 +72,8 @@ P->first.~KeyT(); } #ifndef NDEBUG - memset(Buckets, 0x5a, sizeof(BucketT)*NumBuckets); + if (NumBuckets) + memset(Buckets, 0x5a, sizeof(BucketT)*NumBuckets); #endif operator delete(Buckets); } From rafael.espindola at gmail.com Mon Mar 7 15:28:14 2011 From: rafael.espindola at gmail.com (Rafael Espindola) Date: Mon, 07 Mar 2011 21:28:14 -0000 Subject: [llvm-commits] [llvm] r127172 - /llvm/trunk/test/Transforms/Internalize/available_externally.ll Message-ID: <20110307212814.7FC862A6C12C@llvm.org> Author: rafael Date: Mon Mar 7 15:28:14 2011 New Revision: 127172 URL: http://llvm.org/viewvc/llvm-project?rev=127172&view=rev Log: Add test for r127138. Added: llvm/trunk/test/Transforms/Internalize/available_externally.ll Added: llvm/trunk/test/Transforms/Internalize/available_externally.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Internalize/available_externally.ll?rev=127172&view=auto ============================================================================== --- llvm/trunk/test/Transforms/Internalize/available_externally.ll (added) +++ llvm/trunk/test/Transforms/Internalize/available_externally.ll Mon Mar 7 15:28:14 2011 @@ -0,0 +1,16 @@ +; RUN: opt < %s -internalize -internalize-public-api-list foo -S | FileCheck %s + +; CHECK: define void @foo +define void @foo() { + ret void +} + +; CHECK: define internal void @zed +define void @zed() { + ret void +} + +; CHECK: define available_externally void @bar +define available_externally void @bar() { + ret void +} From rafael.espindola at gmail.com Mon Mar 7 15:39:38 2011 From: rafael.espindola at gmail.com (Rafael Avila de Espindola) Date: Mon, 07 Mar 2011 16:39:38 -0500 Subject: [llvm-commits] [llvm] r127138 - /llvm/trunk/lib/Transforms/IPO/Internalize.cpp In-Reply-To: <4D749F81.6020908@free.fr> References: <20110306234134.4C3A32A6C12C@llvm.org> <4D749F81.6020908@free.fr> Message-ID: <4D75509A.5020707@gmail.com> On 11-03-07 04:04 AM, Duncan Sands wrote: > Hi Rafael, > >> Don't internalize available_externally functions. We already did the right >> thing for variables. > > testcase? Added one in 127172. > Ciao, Duncan. Cheers, Rafael From zwarich at apple.com Mon Mar 7 15:56:36 2011 From: zwarich at apple.com (Cameron Zwarich) Date: Mon, 07 Mar 2011 21:56:36 -0000 Subject: [llvm-commits] [llvm] r127175 - in /llvm/trunk: include/llvm/Target/ lib/CodeGen/ lib/CodeGen/SelectionDAG/ lib/Target/ARM/ lib/Target/CellSPU/ lib/Target/X86/ Message-ID: <20110307215636.CC6822A6C12C@llvm.org> Author: zwarich Date: Mon Mar 7 15:56:36 2011 New Revision: 127175 URL: http://llvm.org/viewvc/llvm-project?rev=127175&view=rev Log: Move getRegPressureLimit() from TargetLoweringInfo to TargetRegisterInfo. Modified: llvm/trunk/include/llvm/Target/TargetLowering.h llvm/trunk/include/llvm/Target/TargetRegisterInfo.h llvm/trunk/lib/CodeGen/MachineLICM.cpp llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp llvm/trunk/lib/Target/ARM/ARMISelLowering.h llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.h llvm/trunk/lib/Target/X86/X86ISelLowering.cpp llvm/trunk/lib/Target/X86/X86ISelLowering.h llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp llvm/trunk/lib/Target/X86/X86RegisterInfo.h Modified: llvm/trunk/include/llvm/Target/TargetLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetLowering.h (original) +++ llvm/trunk/include/llvm/Target/TargetLowering.h Mon Mar 7 15:56:36 2011 @@ -190,14 +190,6 @@ return RepRegClassCostForVT[VT.getSimpleVT().SimpleTy]; } - /// getRegPressureLimit - Return the register pressure "high water mark" for - /// the specific register class. The scheduler is in high register pressure - /// mode (for the specific register class) if it goes over the limit. - virtual unsigned getRegPressureLimit(const TargetRegisterClass *RC, - MachineFunction &MF) const { - return 0; - } - /// isTypeLegal - Return true if the target has native support for the /// specified value type. This means that it has a register that directly /// holds it without promotions or expansions. Modified: llvm/trunk/include/llvm/Target/TargetRegisterInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetRegisterInfo.h?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetRegisterInfo.h (original) +++ llvm/trunk/include/llvm/Target/TargetRegisterInfo.h Mon Mar 7 15:56:36 2011 @@ -595,6 +595,14 @@ return NULL; } + /// getRegPressureLimit - Return the register pressure "high water mark" for + /// the specific register class. The scheduler is in high register pressure + /// mode (for the specific register class) if it goes over the limit. + virtual unsigned getRegPressureLimit(const TargetRegisterClass *RC, + MachineFunction &MF) const { + return 0; + } + /// getAllocationOrder - Returns the register allocation order for a specified /// register class in the form of a pair of TargetRegisterClass iterators. virtual std::pair Modified: llvm/trunk/lib/CodeGen/MachineLICM.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineLICM.cpp?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachineLICM.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineLICM.cpp Mon Mar 7 15:56:36 2011 @@ -294,7 +294,7 @@ RegLimit.resize(NumRC); for (TargetRegisterInfo::regclass_iterator I = TRI->regclass_begin(), E = TRI->regclass_end(); I != E; ++I) - RegLimit[(*I)->getID()] = TLI->getRegPressureLimit(*I, MF); + RegLimit[(*I)->getID()] = TRI->getRegPressureLimit(*I, MF); } // Get our Loop information... Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Mon Mar 7 15:56:36 2011 @@ -1458,7 +1458,7 @@ std::fill(RegPressure.begin(), RegPressure.end(), 0); for (TargetRegisterInfo::regclass_iterator I = TRI->regclass_begin(), E = TRI->regclass_end(); I != E; ++I) - RegLimit[(*I)->getID()] = tli->getRegPressureLimit(*I, MF); + RegLimit[(*I)->getID()] = tri->getRegPressureLimit(*I, MF); } } Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp Mon Mar 7 15:56:36 2011 @@ -348,6 +348,26 @@ return ARM::GPRRegisterClass; } +unsigned +ARMBaseRegisterInfo::getRegPressureLimit(const TargetRegisterClass *RC, + MachineFunction &MF) const { + const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering(); + + switch (RC->getID()) { + default: + return 0; + case ARM::tGPRRegClassID: + return TFI->hasFP(MF) ? 4 : 5; + case ARM::GPRRegClassID: { + unsigned FP = TFI->hasFP(MF) ? 1 : 0; + return 10 - FP - (STI.isR9Reserved() ? 1 : 0); + } + case ARM::SPRRegClassID: // Currently not used as 'rep' register class. + case ARM::DPRRegClassID: + return 32 - 10; + } +} + /// getAllocationOrder - Returns the register allocation order for a specified /// register class in the form of a pair of TargetRegisterClass iterators. std::pair Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h (original) +++ llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h Mon Mar 7 15:56:36 2011 @@ -128,6 +128,9 @@ const TargetRegisterClass *getPointerRegClass(unsigned Kind = 0) const; + unsigned getRegPressureLimit(const TargetRegisterClass *RC, + MachineFunction &MF) const; + std::pair getAllocationOrder(const TargetRegisterClass *RC, unsigned HintType, unsigned HintReg, Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Mon Mar 7 15:56:36 2011 @@ -945,27 +945,6 @@ return Sched::RegPressure; } -// FIXME: Move to RegInfo -unsigned -ARMTargetLowering::getRegPressureLimit(const TargetRegisterClass *RC, - MachineFunction &MF) const { - const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering(); - - switch (RC->getID()) { - default: - return 0; - case ARM::tGPRRegClassID: - return TFI->hasFP(MF) ? 4 : 5; - case ARM::GPRRegClassID: { - unsigned FP = TFI->hasFP(MF) ? 1 : 0; - return 10 - FP - (Subtarget->isR9Reserved() ? 1 : 0); - } - case ARM::SPRRegClassID: // Currently not used as 'rep' register class. - case ARM::DPRRegClassID: - return 32 - 10; - } -} - //===----------------------------------------------------------------------===// // Lowering Code //===----------------------------------------------------------------------===// Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.h?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.h (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.h Mon Mar 7 15:56:36 2011 @@ -329,9 +329,6 @@ Sched::Preference getSchedulingPreference(SDNode *N) const; - unsigned getRegPressureLimit(const TargetRegisterClass *RC, - MachineFunction &MF) const; - bool isShuffleMaskLegal(const SmallVectorImpl &M, EVT VT) const; bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const; Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h Mon Mar 7 15:56:36 2011 @@ -183,14 +183,6 @@ virtual bool isLegalAddressingMode(const AddrMode &AM, const Type *Ty) const; - - /// After allocating this many registers, the allocator should feel - /// register pressure. The value is a somewhat random guess, based on the - /// number of non callee saved registers in the C calling convention. - virtual unsigned getRegPressureLimit( const TargetRegisterClass *RC, - MachineFunction &MF) const{ - return 50; - } }; } Modified: llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.h?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.h (original) +++ llvm/trunk/lib/Target/CellSPU/SPURegisterInfo.h Mon Mar 7 15:56:36 2011 @@ -46,6 +46,14 @@ virtual const TargetRegisterClass * getPointerRegClass(unsigned Kind = 0) const; + /// After allocating this many registers, the allocator should feel + /// register pressure. The value is a somewhat random guess, based on the + /// number of non callee saved registers in the C calling convention. + virtual unsigned getRegPressureLimit( const TargetRegisterClass *RC, + MachineFunction &MF) const{ + return 50; + } + //! Return the array of callee-saved registers virtual const unsigned* getCalleeSavedRegs(const MachineFunction *MF) const; Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original) +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon Mar 7 15:56:36 2011 @@ -1271,27 +1271,6 @@ return std::make_pair(RRC, Cost); } -// FIXME: Why this routine is here? Move to RegInfo! -unsigned -X86TargetLowering::getRegPressureLimit(const TargetRegisterClass *RC, - MachineFunction &MF) const { - const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering(); - - unsigned FPDiff = TFI->hasFP(MF) ? 1 : 0; - switch (RC->getID()) { - default: - return 0; - case X86::GR32RegClassID: - return 4 - FPDiff; - case X86::GR64RegClassID: - return 12 - FPDiff; - case X86::VR128RegClassID: - return Subtarget->is64Bit() ? 10 : 4; - case X86::VR64RegClassID: - return 4; - } -} - bool X86TargetLowering::getStackCookieLocation(unsigned &AddressSpace, unsigned &Offset) const { if (!Subtarget->isTargetLinux()) Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.h?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86ISelLowering.h (original) +++ llvm/trunk/lib/Target/X86/X86ISelLowering.h Mon Mar 7 15:56:36 2011 @@ -677,9 +677,6 @@ /// getFunctionAlignment - Return the Log2 alignment of this function. virtual unsigned getFunctionAlignment(const Function *F) const; - unsigned getRegPressureLimit(const TargetRegisterClass *RC, - MachineFunction &MF) const; - /// getStackCookieLocation - Return true if the target stores stack /// protector cookies at a fixed offset in some non-standard address /// space, and populates the address space and offset as Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Mon Mar 7 15:56:36 2011 @@ -340,6 +340,26 @@ return NULL; } +unsigned +X86RegisterInfo::getRegPressureLimit(const TargetRegisterClass *RC, + MachineFunction &MF) const { + const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering(); + + unsigned FPDiff = TFI->hasFP(MF) ? 1 : 0; + switch (RC->getID()) { + default: + return 0; + case X86::GR32RegClassID: + return 4 - FPDiff; + case X86::GR64RegClassID: + return 12 - FPDiff; + case X86::VR128RegClassID: + return TM.getSubtarget().is64Bit() ? 10 : 4; + case X86::VR64RegClassID: + return 4; + } +} + const unsigned * X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { bool callsEHReturn = false; Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.h?rev=127175&r1=127174&r2=127175&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86RegisterInfo.h (original) +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.h Mon Mar 7 15:56:36 2011 @@ -101,6 +101,9 @@ const TargetRegisterClass * getCrossCopyRegClass(const TargetRegisterClass *RC) const; + unsigned getRegPressureLimit(const TargetRegisterClass *RC, + MachineFunction &MF) const; + /// getCalleeSavedRegs - Return a null-terminated list of all of the /// callee-save registers on this target. const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const; From aggarwa4 at illinois.edu Mon Mar 7 16:25:46 2011 From: aggarwa4 at illinois.edu (Arushi Aggarwal) Date: Mon, 07 Mar 2011 22:25:46 -0000 Subject: [llvm-commits] [poolalloc] r127178 - /poolalloc/trunk/test/dsa/types/mrv.ll Message-ID: <20110307222546.CD9072A6C12C@llvm.org> Author: aggarwa4 Date: Mon Mar 7 16:25:46 2011 New Revision: 127178 URL: http://llvm.org/viewvc/llvm-project?rev=127178&view=rev Log: An example of a case where we loose type information, due to calling conventions. Added: poolalloc/trunk/test/dsa/types/mrv.ll Added: poolalloc/trunk/test/dsa/types/mrv.ll URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/test/dsa/types/mrv.ll?rev=127178&view=auto ============================================================================== --- poolalloc/trunk/test/dsa/types/mrv.ll (added) +++ poolalloc/trunk/test/dsa/types/mrv.ll Mon Mar 7 16:25:46 2011 @@ -0,0 +1,60 @@ +; ModuleID = 'mrv.o' +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" +target triple = "x86_64-unknown-linux-gnu" + +;RUN: dsaopt %s -dsa-local -analyze -check-type=main:s:0,0:float|double::4:float::8:float + +; Function foo, actually accepts an object of struct S. But as +; per calling conventions, the value is passed in registers, after +; conversion to a float and a double. +; See http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-January/028986.html + +%0 = type { double, float } +%struct.S = type { float, float, float } + +define void @_Z3foo1S(double %obj.0, float %obj.1) nounwind { +entry: + %obj_addr = alloca %struct.S ; <%struct.S*> [#uses=3] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + %0 = bitcast %struct.S* %obj_addr to %0* ; <%0*> [#uses=1] + %1 = getelementptr inbounds %0* %0, i32 0, i32 0 ; [#uses=1] + store double %obj.0, double* %1 + %2 = bitcast %struct.S* %obj_addr to %0* ; <%0*> [#uses=1] + %3 = getelementptr inbounds %0* %2, i32 0, i32 1 ; [#uses=1] + store float %obj.1, float* %3 + %4 = getelementptr inbounds %struct.S* %obj_addr, i32 0, i32 0 ; [#uses=1] + store float 0x3FF3333340000000, float* %4, align 4 + br label %return + +return: ; preds = %entry + ret void +} + +define i32 @main() nounwind { +entry: + %retval = alloca i32 ; [#uses=2] + %0 = alloca i32 ; [#uses=2] + %s = alloca %struct.S ; <%struct.S*> [#uses=5] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + %1 = getelementptr inbounds %struct.S* %s, i32 0, i32 0 ; [#uses=1] + store float 1.000000e+00, float* %1, align 4 + %2 = getelementptr inbounds %struct.S* %s, i32 0, i32 1 ; [#uses=1] + store float 1.000000e+00, float* %2, align 4 + %3 = getelementptr inbounds %struct.S* %s, i32 0, i32 2 ; [#uses=1] + store float 1.000000e+00, float* %3, align 4 + %4 = bitcast %struct.S* %s to %0* ; <%0*> [#uses=1] + %elt = getelementptr inbounds %0* %4, i32 0, i32 0 ; [#uses=1] + %val = load double* %elt ; [#uses=1] + %5 = bitcast %struct.S* %s to %0* ; <%0*> [#uses=1] + %elt1 = getelementptr inbounds %0* %5, i32 0, i32 1 ; [#uses=1] + %val2 = load float* %elt1 ; [#uses=1] + call void @_Z3foo1S(double %val, float %val2) nounwind + store i32 0, i32* %0, align 4 + %6 = load i32* %0, align 4 ; [#uses=1] + store i32 %6, i32* %retval, align 4 + br label %return + +return: ; preds = %entry + %retval3 = load i32* %retval ; [#uses=1] + ret i32 %retval3 +} From aggarwa4 at illinois.edu Mon Mar 7 16:42:08 2011 From: aggarwa4 at illinois.edu (Arushi Aggarwal) Date: Mon, 07 Mar 2011 22:42:08 -0000 Subject: [llvm-commits] [poolalloc] r127180 - /poolalloc/trunk/test/dsa/types/mrv1.ll Message-ID: <20110307224208.B94892A6C12C@llvm.org> Author: aggarwa4 Date: Mon Mar 7 16:42:08 2011 New Revision: 127180 URL: http://llvm.org/viewvc/llvm-project?rev=127180&view=rev Log: Similiar to mrv, but shows transform for a return value. Added: poolalloc/trunk/test/dsa/types/mrv1.ll Added: poolalloc/trunk/test/dsa/types/mrv1.ll URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/test/dsa/types/mrv1.ll?rev=127180&view=auto ============================================================================== --- poolalloc/trunk/test/dsa/types/mrv1.ll (added) +++ poolalloc/trunk/test/dsa/types/mrv1.ll Mon Mar 7 16:42:08 2011 @@ -0,0 +1,125 @@ +;similiar to mrv.ll. Also shows conversion for return values. + +; ModuleID = 'mrv.o' +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" +target triple = "x86_64-unknown-linux-gnu" + +;RUN: dsaopt %s -dsa-local -analyze -check-type=main:s:0,0:float|double::4:float::8:float +;RUN: dsaopt %s -dsa-local -analyze -check-type=main:s1:0,0:float::4:float::8:float + +%0 = type { double, float } +%struct.S = type { float, float, float } + +define void @_Z3foo1S(double %obj.0, float %obj.1) nounwind { +entry: + %obj_addr = alloca %struct.S ; <%struct.S*> [#uses=3] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + %0 = bitcast %struct.S* %obj_addr to %0* ; <%0*> [#uses=1] + %1 = getelementptr inbounds %0* %0, i32 0, i32 0 ; [#uses=1] + store double %obj.0, double* %1 + %2 = bitcast %struct.S* %obj_addr to %0* ; <%0*> [#uses=1] + %3 = getelementptr inbounds %0* %2, i32 0, i32 1 ; [#uses=1] + store float %obj.1, float* %3 + %4 = getelementptr inbounds %struct.S* %obj_addr, i32 0, i32 0 ; [#uses=1] + store float 0x3FF3333340000000, float* %4, align 4 + br label %return + +return: ; preds = %entry + ret void +} + +define %0 @_Z3barv() nounwind { +entry: + %retval = alloca %struct.S ; <%struct.S*> [#uses=4] + %0 = alloca %struct.S ; <%struct.S*> [#uses=6] + %obj = alloca %struct.S ; <%struct.S*> [#uses=4] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + %1 = getelementptr inbounds %struct.S* %obj, i32 0, i32 0 ; [#uses=1] + store float 0x3FF3333340000000, float* %1, align 4 + %2 = getelementptr inbounds %struct.S* %0, i32 0, i32 0 ; [#uses=1] + %3 = getelementptr inbounds %struct.S* %obj, i32 0, i32 0 ; [#uses=1] + %4 = load float* %3, align 4 ; [#uses=1] + store float %4, float* %2, align 4 + %5 = getelementptr inbounds %struct.S* %0, i32 0, i32 1 ; [#uses=1] + %6 = getelementptr inbounds %struct.S* %obj, i32 0, i32 1 ; [#uses=1] + %7 = load float* %6, align 4 ; [#uses=1] + store float %7, float* %5, align 4 + %8 = getelementptr inbounds %struct.S* %0, i32 0, i32 2 ; [#uses=1] + %9 = getelementptr inbounds %struct.S* %obj, i32 0, i32 2 ; [#uses=1] + %10 = load float* %9, align 4 ; [#uses=1] + store float %10, float* %8, align 4 + %11 = getelementptr inbounds %struct.S* %retval, i32 0, i32 0 ; [#uses=1] + %12 = getelementptr inbounds %struct.S* %0, i32 0, i32 0 ; [#uses=1] + %13 = load float* %12, align 4 ; [#uses=1] + store float %13, float* %11, align 4 + %14 = getelementptr inbounds %struct.S* %retval, i32 0, i32 1 ; [#uses=1] + %15 = getelementptr inbounds %struct.S* %0, i32 0, i32 1 ; [#uses=1] + %16 = load float* %15, align 4 ; [#uses=1] + store float %16, float* %14, align 4 + %17 = getelementptr inbounds %struct.S* %retval, i32 0, i32 2 ; [#uses=1] + %18 = getelementptr inbounds %struct.S* %0, i32 0, i32 2 ; [#uses=1] + %19 = load float* %18, align 4 ; [#uses=1] + store float %19, float* %17, align 4 + br label %return + +return: ; preds = %entry + %retval1 = bitcast %struct.S* %retval to %0* ; <%0*> [#uses=2] + %mrv_gep = getelementptr %0* %retval1, i32 0, i32 0 ; [#uses=1] + %mrv = load double* %mrv_gep ; [#uses=1] + %mrv_gep2 = getelementptr %0* %retval1, i32 0, i32 1 ; [#uses=1] + %mrv3 = load float* %mrv_gep2 ; [#uses=1] + %mrv4 = insertvalue %0 undef, double %mrv, 0 ; <%0> [#uses=1] + %mrv5 = insertvalue %0 %mrv4, float %mrv3, 1 ; <%0> [#uses=1] + ret %0 %mrv5 +} + +define i32 @main() nounwind { +entry: + %retval = alloca i32 ; [#uses=2] + %0 = alloca i32 ; [#uses=2] + %s = alloca %struct.S ; <%struct.S*> [#uses=5] + %s1 = alloca %struct.S ; <%struct.S*> [#uses=3] + %memtmp = alloca %0 ; <%0*> [#uses=3] + %"alloca point" = bitcast i32 0 to i32 ; [#uses=0] + %1 = getelementptr inbounds %struct.S* %s, i32 0, i32 0 ; [#uses=1] + store float 1.000000e+00, float* %1, align 4 + %2 = getelementptr inbounds %struct.S* %s, i32 0, i32 1 ; [#uses=1] + store float 1.000000e+00, float* %2, align 4 + %3 = getelementptr inbounds %struct.S* %s, i32 0, i32 2 ; [#uses=1] + store float 1.000000e+00, float* %3, align 4 + %4 = bitcast %struct.S* %s to %0* ; <%0*> [#uses=1] + %elt = getelementptr inbounds %0* %4, i32 0, i32 0 ; [#uses=1] + %val = load double* %elt ; [#uses=1] + %5 = bitcast %struct.S* %s to %0* ; <%0*> [#uses=1] + %elt1 = getelementptr inbounds %0* %5, i32 0, i32 1 ; [#uses=1] + %val2 = load float* %elt1 ; [#uses=1] + call void @_Z3foo1S(double %val, float %val2) nounwind + %6 = call %0 @_Z3barv() nounwind ; <%0> [#uses=2] + %mrv_gep = getelementptr inbounds %0* %memtmp, i32 0, i32 0 ; [#uses=1] + %mrv_gr = extractvalue %0 %6, 0 ; [#uses=1] + store double %mrv_gr, double* %mrv_gep + %mrv_gep3 = getelementptr inbounds %0* %memtmp, i32 0, i32 1 ; [#uses=1] + %mrv_gr4 = extractvalue %0 %6, 1 ; [#uses=1] + store float %mrv_gr4, float* %mrv_gep3 + %memtmp5 = bitcast %0* %memtmp to %struct.S* ; <%struct.S*> [#uses=3] + %7 = getelementptr inbounds %struct.S* %s1, i32 0, i32 0 ; [#uses=1] + %8 = getelementptr inbounds %struct.S* %memtmp5, i32 0, i32 0 ; [#uses=1] + %9 = load float* %8, align 4 ; [#uses=1] + store float %9, float* %7, align 4 + %10 = getelementptr inbounds %struct.S* %s1, i32 0, i32 1 ; [#uses=1] + %11 = getelementptr inbounds %struct.S* %memtmp5, i32 0, i32 1 ; [#uses=1] + %12 = load float* %11, align 4 ; [#uses=1] + store float %12, float* %10, align 4 + %13 = getelementptr inbounds %struct.S* %s1, i32 0, i32 2 ; [#uses=1] + %14 = getelementptr inbounds %struct.S* %memtmp5, i32 0, i32 2 ; [#uses=1] + %15 = load float* %14, align 4 ; [#uses=1] + store float %15, float* %13, align 4 + store i32 0, i32* %0, align 4 + %16 = load i32* %0, align 4 ; [#uses=1] + store i32 %16, i32* %retval, align 4 + br label %return + +return: ; preds = %entry + %retval6 = load i32* %retval ; [#uses=1] + ret i32 %retval6 +} From stoklund at 2pi.dk Mon Mar 7 16:42:16 2011 From: stoklund at 2pi.dk (Jakob Stoklund Olesen) Date: Mon, 07 Mar 2011 22:42:16 -0000 Subject: [llvm-commits] [llvm] r127181 - in /llvm/trunk/lib/CodeGen: InlineSpiller.cpp LiveRangeEdit.cpp LiveRangeEdit.h RegAllocGreedy.cpp Message-ID: <20110307224216.651802A6C12C@llvm.org> Author: stoklund Date: Mon Mar 7 16:42:16 2011 New Revision: 127181 URL: http://llvm.org/viewvc/llvm-project?rev=127181&view=rev Log: Make the UselessRegs argument optional in the LiveRangeEdit constructor. Modified: llvm/trunk/lib/CodeGen/InlineSpiller.cpp llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp llvm/trunk/lib/CodeGen/LiveRangeEdit.h llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp Modified: llvm/trunk/lib/CodeGen/InlineSpiller.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/InlineSpiller.cpp?rev=127181&r1=127180&r2=127181&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/InlineSpiller.cpp (original) +++ llvm/trunk/lib/CodeGen/InlineSpiller.cpp Mon Mar 7 16:42:16 2011 @@ -333,7 +333,7 @@ void InlineSpiller::spill(LiveInterval *li, SmallVectorImpl &newIntervals, const SmallVectorImpl &spillIs) { - LiveRangeEdit edit(*li, newIntervals, spillIs); + LiveRangeEdit edit(*li, newIntervals, &spillIs); spill(edit); if (VerifySpills) mf_.verify(&pass_, "After inline spill"); Modified: llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp?rev=127181&r1=127180&r2=127181&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp Mon Mar 7 16:42:16 2011 @@ -75,9 +75,10 @@ if (MO.isDef()) return false; // We cannot depend on virtual registers in uselessRegs_. - for (unsigned ui = 0, ue = uselessRegs_.size(); ui != ue; ++ui) - if (uselessRegs_[ui]->reg == MO.getReg()) - return false; + if (uselessRegs_) + for (unsigned ui = 0, ue = uselessRegs_->size(); ui != ue; ++ui) + if ((*uselessRegs_)[ui]->reg == MO.getReg()) + return false; LiveInterval &li = lis.getInterval(MO.getReg()); const VNInfo *OVNI = li.getVNInfoAt(OrigIdx); Modified: llvm/trunk/lib/CodeGen/LiveRangeEdit.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveRangeEdit.h?rev=127181&r1=127180&r2=127181&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveRangeEdit.h (original) +++ llvm/trunk/lib/CodeGen/LiveRangeEdit.h Mon Mar 7 16:42:16 2011 @@ -31,7 +31,7 @@ class LiveRangeEdit { LiveInterval &parent_; SmallVectorImpl &newRegs_; - const SmallVectorImpl &uselessRegs_; + const SmallVectorImpl *uselessRegs_; /// firstNew_ - Index of the first register added to newRegs_. const unsigned firstNew_; @@ -66,7 +66,7 @@ /// rematerializing values because they are about to be removed. LiveRangeEdit(LiveInterval &parent, SmallVectorImpl &newRegs, - const SmallVectorImpl &uselessRegs) + const SmallVectorImpl *uselessRegs = 0) : parent_(parent), newRegs_(newRegs), uselessRegs_(uselessRegs), firstNew_(newRegs.size()), scannedRemattable_(false) {} @@ -87,7 +87,7 @@ /// anyRematerializable - Return true if any parent values may be /// rematerializable. - /// This function must be called before ny rematerialization is attempted. + /// This function must be called before any rematerialization is attempted. bool anyRematerializable(LiveIntervals&, const TargetInstrInfo&, AliasAnalysis*); Modified: llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp?rev=127181&r1=127180&r2=127181&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp Mon Mar 7 16:42:16 2011 @@ -601,8 +601,7 @@ SmallVector InterferenceRanges; mapGlobalInterference(PhysReg, InterferenceRanges); - SmallVector SpillRegs; - LiveRangeEdit LREdit(VirtReg, NewVRegs, SpillRegs); + LiveRangeEdit LREdit(VirtReg, NewVRegs); SE->reset(LREdit); // Create the main cross-block interval. @@ -1130,8 +1129,7 @@ << '-' << Uses[BestAfter] << ", " << BestDiff << ", " << (BestAfter - BestBefore + 1) << " instrs\n"); - SmallVector SpillRegs; - LiveRangeEdit LREdit(VirtReg, NewVRegs, SpillRegs); + LiveRangeEdit LREdit(VirtReg, NewVRegs); SE->reset(LREdit); SE->openIntv(); @@ -1183,8 +1181,7 @@ if (Stage < RS_Block) { SplitAnalysis::BlockPtrSet Blocks; if (SA->getMultiUseBlocks(Blocks)) { - SmallVector SpillRegs; - LiveRangeEdit LREdit(VirtReg, NewVRegs, SpillRegs); + LiveRangeEdit LREdit(VirtReg, NewVRegs); SE->reset(LREdit); SE->splitSingleBlocks(Blocks); setStage(NewVRegs.begin(), NewVRegs.end(), RS_Block); From dpatel at apple.com Mon Mar 7 16:43:45 2011 From: dpatel at apple.com (Devang Patel) Date: Mon, 07 Mar 2011 22:43:45 -0000 Subject: [llvm-commits] [llvm] r127182 - in /llvm/trunk: lib/Transforms/Scalar/LoopIdiomRecognize.cpp test/Transforms/LoopIdiom/debug-line.ll Message-ID: <20110307224345.99C852A6C12C@llvm.org> Author: dpatel Date: Mon Mar 7 16:43:45 2011 New Revision: 127182 URL: http://llvm.org/viewvc/llvm-project?rev=127182&view=rev Log: Preserve line no. info. Radar 9097659 Added: llvm/trunk/test/Transforms/LoopIdiom/debug-line.ll Modified: llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp Modified: llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp?rev=127182&r1=127181&r2=127182&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp Mon Mar 7 16:43:45 2011 @@ -493,7 +493,7 @@ Value *NumBytes = Expander.expandCodeFor(NumBytesS, IntPtr, Preheader->getTerminator()); - Value *NewCall; + CallInst *NewCall; if (SplatValue) NewCall = Builder.CreateMemSet(BasePtr, SplatValue,NumBytes,StoreAlignment); else { @@ -517,7 +517,7 @@ DEBUG(dbgs() << " Formed memset: " << *NewCall << "\n" << " from store to: " << *Ev << " at: " << *TheStore << "\n"); - (void)NewCall; + NewCall->setDebugLoc(TheStore->getDebugLoc()); // Okay, the memset has been formed. Zap the original store and anything that // feeds into it. Added: llvm/trunk/test/Transforms/LoopIdiom/debug-line.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopIdiom/debug-line.ll?rev=127182&view=auto ============================================================================== --- llvm/trunk/test/Transforms/LoopIdiom/debug-line.ll (added) +++ llvm/trunk/test/Transforms/LoopIdiom/debug-line.ll Mon Mar 7 16:43:45 2011 @@ -0,0 +1,49 @@ +; RUN: opt -loop-idiom < %s -S | FileCheck %s +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" +target triple = "x86_64-apple-darwin10.0.0" + + +define void @foo(double* nocapture %a) nounwind ssp { +entry: + tail call void @llvm.dbg.value(metadata !{double* %a}, i64 0, metadata !5), !dbg !8 + tail call void @llvm.dbg.value(metadata !9, i64 0, metadata !10), !dbg !14 + br label %for.body + +for.body: ; preds = %entry, %for.body + %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %for.body ] + %arrayidx = getelementptr double* %a, i64 %indvar +; CHECK: call void @llvm.memset{{.+}} !dbg + store double 0.000000e+00, double* %arrayidx, align 8, !dbg !15 + %indvar.next = add i64 %indvar, 1 + %exitcond = icmp ne i64 %indvar.next, 1000 + br i1 %exitcond, label %for.body, label %for.end, !dbg !14 + +for.end: ; preds = %for.body + tail call void @llvm.dbg.value(metadata !{null}, i64 0, metadata !10), !dbg !16 + ret void, !dbg !17 +} + +declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone + +declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone + +!llvm.dbg.sp = !{!0} + +!0 = metadata !{i32 589870, i32 0, metadata !1, metadata !"foo", metadata !"foo", metadata !"", metadata !1, i32 2, metadata !3, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, void (double*)* @foo} ; [ DW_TAG_subprogram ] +!1 = metadata !{i32 589865, metadata !"li.c", metadata !"/private/tmp", metadata !2} ; [ DW_TAG_file_type ] +!2 = metadata !{i32 589841, i32 0, i32 12, metadata !"li.c", metadata !"/private/tmp", metadata !"clang version 2.9 (trunk 127165:127174)", i1 true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ] +!3 = metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i32 0, i32 0, i32 0, metadata !4, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] +!4 = metadata !{null} +!5 = metadata !{i32 590081, metadata !0, metadata !"a", metadata !1, i32 16777218, metadata !6, i32 0} ; [ DW_TAG_arg_variable ] +!6 = metadata !{i32 589839, metadata !2, metadata !"", null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !7} ; [ DW_TAG_pointer_type ] +!7 = metadata !{i32 589860, metadata !2, metadata !"double", null, i32 0, i64 64, i64 64, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ] +!8 = metadata !{i32 2, i32 18, metadata !0, null} +!9 = metadata !{i32 0} +!10 = metadata !{i32 590080, metadata !11, metadata !"i", metadata !1, i32 3, metadata !13, i32 0} ; [ DW_TAG_auto_variable ] +!11 = metadata !{i32 589835, metadata !12, i32 3, i32 3, metadata !1, i32 1} ; [ DW_TAG_lexical_block ] +!12 = metadata !{i32 589835, metadata !0, i32 2, i32 21, metadata !1, i32 0} ; [ DW_TAG_lexical_block ] +!13 = metadata !{i32 589860, metadata !2, metadata !"int", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] +!14 = metadata !{i32 3, i32 3, metadata !12, null} +!15 = metadata !{i32 4, i32 5, metadata !11, null} +!16 = metadata !{i32 3, i32 29, metadata !11, null} +!17 = metadata !{i32 5, i32 1, metadata !12, null} From echristo at apple.com Mon Mar 7 16:48:16 2011 From: echristo at apple.com (Eric Christopher) Date: Mon, 07 Mar 2011 22:48:16 -0000 Subject: [llvm-commits] [llvm] r127186 - /llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h Message-ID: <20110307224816.D9B322A6C12C@llvm.org> Author: echristo Date: Mon Mar 7 16:48:16 2011 New Revision: 127186 URL: http://llvm.org/viewvc/llvm-project?rev=127186&view=rev Log: Typos. Modified: llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h Modified: llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h?rev=127186&r1=127185&r2=127186&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h (original) +++ llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h Mon Mar 7 16:48:16 2011 @@ -356,7 +356,7 @@ void removePred(const SDep &D); /// getDepth - Return the depth of this node, which is the length of the - /// maximum path up to any node with has no predecessors. + /// maximum path up to any node which has no predecessors. unsigned getDepth() const { if (!isDepthCurrent) const_cast(this)->ComputeDepth(); @@ -364,7 +364,7 @@ } /// getHeight - Return the height of this node, which is the length of the - /// maximum path down to any node with has no successors. + /// maximum path down to any node which has no successors. unsigned getHeight() const { if (!isHeightCurrent) const_cast(this)->ComputeHeight(); From isanbard at gmail.com Mon Mar 7 16:49:03 2011 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 07 Mar 2011 22:49:03 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r127187 - /llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Message-ID: <20110307224903.8C2872A6C12C@llvm.org> Author: void Date: Mon Mar 7 16:49:03 2011 New Revision: 127187 URL: http://llvm.org/viewvc/llvm-project?rev=127187&view=rev Log: When we adjust the inline ASM type, we need to take into account an early clobber with the 'y' constraint. Otherwise, we get the wrong return type and an assert, because it created a '<1 x i64>' vector type instead of the x86_mmx type. Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h?rev=127187&r1=127186&r2=127187&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Mon Mar 7 16:49:03 2011 @@ -45,10 +45,11 @@ /* For parameters to an asm, check the constraint and use X86_mmx if an MMX register is called for. "y" means an MMX register. */ -#define LLVM_ADJUST_MMX_INLINE_PARAMETER_TYPE(Constraint, LLVMTy) \ - ((TARGET_MMX && \ - StringRef(Constraint).equals(StringRef(std::string("y")))) ? \ - Type::getX86_MMXTy(Context) : LLVMTy) +#define LLVM_ADJUST_MMX_INLINE_PARAMETER_TYPE(Constraint, LLVMTy) \ + ((TARGET_MMX && \ + (StringRef(Constraint).equals(StringRef(std::string("y"))) || \ + StringRef(Constraint).equals(StringRef(std::string("&y"))))) ? \ + Type::getX86_MMXTy(Context) : LLVMTy) /* LLVM specific stuff for supporting calling convention output */ #define TARGET_ADJUST_LLVM_CC(CC, type) \ From fvbommel at gmail.com Mon Mar 7 17:04:12 2011 From: fvbommel at gmail.com (Frits van Bommel) Date: Tue, 8 Mar 2011 00:04:12 +0100 Subject: [llvm-commits] [llvm-gcc-4.2] r127187 - /llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h In-Reply-To: <20110307224903.8C2872A6C12C@llvm.org> References: <20110307224903.8C2872A6C12C@llvm.org> Message-ID: On Mon, Mar 7, 2011 at 11:49 PM, Bill Wendling wrote: > ?/* For parameters to an asm, check the constraint and use X86_mmx if an MMX > ? ?register is called for. ?"y" means an MMX register. */ > -#define LLVM_ADJUST_MMX_INLINE_PARAMETER_TYPE(Constraint, LLVMTy) \ > - ?((TARGET_MMX && ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \ > - ? ?StringRef(Constraint).equals(StringRef(std::string("y")))) ? ?\ > - ? ?Type::getX86_MMXTy(Context) : LLVMTy) > +#define LLVM_ADJUST_MMX_INLINE_PARAMETER_TYPE(Constraint, LLVMTy) ? ? ? \ > + ?((TARGET_MMX && ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \ > + ? ?(StringRef(Constraint).equals(StringRef(std::string("y"))) || ? ? ? \ > + ? ? StringRef(Constraint).equals(StringRef(std::string("&y"))))) ? ? ? \ > + ? Type::getX86_MMXTy(Context) : LLVMTy) What's the point of using horrible expressions like '(StringRef(Constraint).equals(StringRef(std::string("y")))' instead of, say, '(StringRef(Constraint) == "y")'? From isanbard at gmail.com Mon Mar 7 17:06:24 2011 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 7 Mar 2011 15:06:24 -0800 Subject: [llvm-commits] [llvm-gcc-4.2] r127187 - /llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h In-Reply-To: References: <20110307224903.8C2872A6C12C@llvm.org> Message-ID: On Mar 7, 2011, at 3:04 PM, Frits van Bommel wrote: > On Mon, Mar 7, 2011 at 11:49 PM, Bill Wendling wrote: >> /* For parameters to an asm, check the constraint and use X86_mmx if an MMX >> register is called for. "y" means an MMX register. */ >> -#define LLVM_ADJUST_MMX_INLINE_PARAMETER_TYPE(Constraint, LLVMTy) \ >> - ((TARGET_MMX && \ >> - StringRef(Constraint).equals(StringRef(std::string("y")))) ? \ >> - Type::getX86_MMXTy(Context) : LLVMTy) >> +#define LLVM_ADJUST_MMX_INLINE_PARAMETER_TYPE(Constraint, LLVMTy) \ >> + ((TARGET_MMX && \ >> + (StringRef(Constraint).equals(StringRef(std::string("y"))) || \ >> + StringRef(Constraint).equals(StringRef(std::string("&y"))))) ? \ >> + Type::getX86_MMXTy(Context) : LLVMTy) > > What's the point of using horrible expressions like > '(StringRef(Constraint).equals(StringRef(std::string("y")))' instead > of, say, '(StringRef(Constraint) == "y")'? Obfuscation? :-) I'll change it. -bw From david_dean at apple.com Mon Mar 7 17:12:59 2011 From: david_dean at apple.com (David Dean) Date: Mon, 07 Mar 2011 23:12:59 -0000 Subject: [llvm-commits] [zorg] r127189 - /zorg/trunk/zorg/buildbot/builders/LLVMGCCBuilder.py Message-ID: <20110307231259.437182A6C12C@llvm.org> Author: ddean Date: Mon Mar 7 17:12:59 2011 New Revision: 127189 URL: http://llvm.org/viewvc/llvm-project?rev=127189&view=rev Log: Final tweak/fix for uploading artifacts in LLVMGCCBuilder.py Modified: zorg/trunk/zorg/buildbot/builders/LLVMGCCBuilder.py Modified: zorg/trunk/zorg/buildbot/builders/LLVMGCCBuilder.py URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/zorg/buildbot/builders/LLVMGCCBuilder.py?rev=127189&r1=127188&r2=127189&view=diff ============================================================================== --- zorg/trunk/zorg/buildbot/builders/LLVMGCCBuilder.py (original) +++ zorg/trunk/zorg/buildbot/builders/LLVMGCCBuilder.py Mon Mar 7 17:12:59 2011 @@ -277,8 +277,7 @@ f.addStep(ShellCommand(name='pkg.tar', description="tar root", command=["tar", "zcvf", name, "./"], - workdir=WithProperties(os.path.join(obj_path, "%s.roots" % project, - "%s~dst" % project)), + workdir=obj_path, warnOnFailure=True, flunkOnFailure=False, haltOnFailure=False)) From isanbard at gmail.com Mon Mar 7 17:20:37 2011 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 07 Mar 2011 23:20:37 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r127190 - /llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Message-ID: <20110307232038.025A02A6C12C@llvm.org> Author: void Date: Mon Mar 7 17:20:37 2011 New Revision: 127190 URL: http://llvm.org/viewvc/llvm-project?rev=127190&view=rev Log: Simplification that Fritz pointed out. Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Modified: llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h?rev=127190&r1=127189&r2=127190&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/i386/llvm-i386-target.h Mon Mar 7 17:20:37 2011 @@ -45,10 +45,9 @@ /* For parameters to an asm, check the constraint and use X86_mmx if an MMX register is called for. "y" means an MMX register. */ -#define LLVM_ADJUST_MMX_INLINE_PARAMETER_TYPE(Constraint, LLVMTy) \ - ((TARGET_MMX && \ - (StringRef(Constraint).equals(StringRef(std::string("y"))) || \ - StringRef(Constraint).equals(StringRef(std::string("&y"))))) ? \ +#define LLVM_ADJUST_MMX_INLINE_PARAMETER_TYPE(Constraint, LLVMTy) \ + ((TARGET_MMX && \ + (StringRef(Constraint) == "y" || StringRef(Constraint) == "&y")) ? \ Type::getX86_MMXTy(Context) : LLVMTy) /* LLVM specific stuff for supporting calling convention output */ From stoklund at 2pi.dk Mon Mar 7 17:29:10 2011 From: stoklund at 2pi.dk (Jakob Stoklund Olesen) Date: Mon, 07 Mar 2011 23:29:10 -0000 Subject: [llvm-commits] [llvm] r127192 - in /llvm/trunk: include/llvm/CodeGen/LiveIntervalAnalysis.h lib/CodeGen/LiveIntervalAnalysis.cpp Message-ID: <20110307232910.4376C2A6C12C@llvm.org> Author: stoklund Date: Mon Mar 7 17:29:10 2011 New Revision: 127192 URL: http://llvm.org/viewvc/llvm-project?rev=127192&view=rev Log: Let shrinkToUses optionally return a list of now dead machine instructions. Modified: llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Modified: llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h?rev=127192&r1=127191&r2=127192&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h (original) +++ llvm/trunk/include/llvm/CodeGen/LiveIntervalAnalysis.h Mon Mar 7 17:29:10 2011 @@ -159,7 +159,9 @@ /// range to just the remaining uses. This method does not compute reaching /// defs for new uses, and it doesn't remove dead defs. /// Dead PHIDef values are marked as unused. - void shrinkToUses(LiveInterval *li); + /// New dead machine instructions are added to the dead vector. + void shrinkToUses(LiveInterval *li, + SmallVectorImpl *dead = 0); // Interval removal Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=127192&r1=127191&r2=127192&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Mon Mar 7 17:29:10 2011 @@ -746,7 +746,8 @@ /// shrinkToUses - After removing some uses of a register, shrink its live /// range to just the remaining uses. This method does not compute reaching /// defs for new uses, and it doesn't remove dead defs. -void LiveIntervals::shrinkToUses(LiveInterval *li) { +void LiveIntervals::shrinkToUses(LiveInterval *li, + SmallVectorImpl *dead) { DEBUG(dbgs() << "Shrink: " << *li << '\n'); assert(TargetRegisterInfo::isVirtualRegister(li->reg) && "Can't only shrink physical registers"); @@ -852,6 +853,10 @@ MachineInstr *MI = getInstructionFromIndex(VNI->def); assert(MI && "No instruction defining live value"); MI->addRegisterDead(li->reg, tri_); + if (dead && MI->allDefsAreDead()) { + DEBUG(dbgs() << "All defs dead: " << *MI); + dead->push_back(MI); + } } } From isanbard at gmail.com Mon Mar 7 17:38:41 2011 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 07 Mar 2011 23:38:41 -0000 Subject: [llvm-commits] [llvm] r127193 - in /llvm/trunk: lib/Target/ARM/ARMCodeEmitter.cpp lib/Target/ARM/ARMInstrFormats.td lib/Target/ARM/ARMInstrNEON.td lib/Target/ARM/ARMMCCodeEmitter.cpp test/MC/ARM/neon-shift-encoding.s utils/TableGen/EDEmitter.cpp Message-ID: <20110307233841.8C6BE2A6C12C@llvm.org> Author: void Date: Mon Mar 7 17:38:41 2011 New Revision: 127193 URL: http://llvm.org/viewvc/llvm-project?rev=127193&view=rev Log: Rename the narrow shift right immediate operands to "shr_imm*" operands. Also expand the testing of the narrowing shift right instructions. No functionality change. Modified: llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp llvm/trunk/lib/Target/ARM/ARMInstrFormats.td llvm/trunk/lib/Target/ARM/ARMInstrNEON.td llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp llvm/trunk/test/MC/ARM/neon-shift-encoding.s llvm/trunk/utils/TableGen/EDEmitter.cpp Modified: llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp?rev=127193&r1=127192&r2=127193&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMCodeEmitter.cpp Mon Mar 7 17:38:41 2011 @@ -312,11 +312,13 @@ unsigned getRegisterListOpValue(const MachineInstr &MI, unsigned Op) const { return 0; } - unsigned getNarrowShiftRight16Imm(const MachineInstr &MI, unsigned Op) + unsigned getShiftRight8Imm(const MachineInstr &MI, unsigned Op) const { return 0; } - unsigned getNarrowShiftRight32Imm(const MachineInstr &MI, unsigned Op) + unsigned getShiftRight16Imm(const MachineInstr &MI, unsigned Op) const { return 0; } - unsigned getNarrowShiftRight64Imm(const MachineInstr &MI, unsigned Op) + unsigned getShiftRight32Imm(const MachineInstr &MI, unsigned Op) + const { return 0; } + unsigned getShiftRight64Imm(const MachineInstr &MI, unsigned Op) const { return 0; } /// getMovi32Value - Return binary encoding of operand for movw/movt. If the Modified: llvm/trunk/lib/Target/ARM/ARMInstrFormats.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrFormats.td?rev=127193&r1=127192&r2=127193&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrFormats.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrFormats.td Mon Mar 7 17:38:41 2011 @@ -221,20 +221,25 @@ let PrintMethod = "printNegZeroOperand"; } -// Narrow Shift Right Immediate - A narrow shift right immediate is encoded -// differently from other shift immediates. The imm6 field is encoded like so: +// Shift Right Immediate - A shift right immediate is encoded differently from +// other shift immediates. The imm6 field is encoded like so: // -// 16-bit: imm6<5:3> = '001', 8 - is encded in imm6<2:0> -// 32-bit: imm6<5:4> = '01',16 - is encded in imm6<3:0> -// 64-bit: imm6<5> = '1', 32 - is encded in imm6<4:0> -def nsr16_imm : Operand { - let EncoderMethod = "getNarrowShiftRight16Imm"; +// Offset Encoding +// 8 imm6<5:3> = '001', 8 - is encoded in imm6<2:0> +// 16 imm6<5:4> = '01', 16 - is encoded in imm6<3:0> +// 32 imm6<5> = '1', 32 - is encoded in imm6<4:0> +// 64 64 - is encoded in imm6<5:0> +def shr_imm8 : Operand { + let EncoderMethod = "getShiftRight8Imm"; } -def nsr32_imm : Operand { - let EncoderMethod = "getNarrowShiftRight32Imm"; +def shr_imm16 : Operand { + let EncoderMethod = "getShiftRight16Imm"; } -def nsr64_imm : Operand { - let EncoderMethod = "getNarrowShiftRight64Imm"; +def shr_imm32 : Operand { + let EncoderMethod = "getShiftRight32Imm"; +} +def shr_imm64 : Operand { + let EncoderMethod = "getShiftRight64Imm"; } //===----------------------------------------------------------------------===// Modified: llvm/trunk/lib/Target/ARM/ARMInstrNEON.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrNEON.td?rev=127193&r1=127192&r2=127193&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMInstrNEON.td (original) +++ llvm/trunk/lib/Target/ARM/ARMInstrNEON.td Mon Mar 7 17:38:41 2011 @@ -3154,17 +3154,17 @@ SDNode OpNode> { def v8i8 : N2VNSh { + v8i8, v8i16, shr_imm8, OpNode> { let Inst{21-19} = 0b001; // imm6 = 001xxx } def v4i16 : N2VNSh { + v4i16, v4i32, shr_imm16, OpNode> { let Inst{21-20} = 0b01; // imm6 = 01xxxx } def v2i32 : N2VNSh { + v2i32, v2i64, shr_imm32, OpNode> { let Inst{21} = 0b1; // imm6 = 1xxxxx } } Modified: llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp?rev=127193&r1=127192&r2=127193&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMMCCodeEmitter.cpp Mon Mar 7 17:38:41 2011 @@ -278,12 +278,14 @@ unsigned getAddrMode6OffsetOpValue(const MCInst &MI, unsigned Op, SmallVectorImpl &Fixups) const; - unsigned getNarrowShiftRight16Imm(const MCInst &MI, unsigned Op, - SmallVectorImpl &Fixups) const; - unsigned getNarrowShiftRight32Imm(const MCInst &MI, unsigned Op, - SmallVectorImpl &Fixups) const; - unsigned getNarrowShiftRight64Imm(const MCInst &MI, unsigned Op, - SmallVectorImpl &Fixups) const; + unsigned getShiftRight8Imm(const MCInst &MI, unsigned Op, + SmallVectorImpl &Fixups) const; + unsigned getShiftRight16Imm(const MCInst &MI, unsigned Op, + SmallVectorImpl &Fixups) const; + unsigned getShiftRight32Imm(const MCInst &MI, unsigned Op, + SmallVectorImpl &Fixups) const; + unsigned getShiftRight64Imm(const MCInst &MI, unsigned Op, + SmallVectorImpl &Fixups) const; unsigned NEONThumb2DataIPostEncoder(const MCInst &MI, unsigned EncodedValue) const; @@ -1209,23 +1211,29 @@ } unsigned ARMMCCodeEmitter:: -getNarrowShiftRight16Imm(const MCInst &MI, unsigned Op, - SmallVectorImpl &Fixups) const { +getShiftRight8Imm(const MCInst &MI, unsigned Op, + SmallVectorImpl &Fixups) const { return 8 - MI.getOperand(Op).getImm(); } unsigned ARMMCCodeEmitter:: -getNarrowShiftRight32Imm(const MCInst &MI, unsigned Op, - SmallVectorImpl &Fixups) const { +getShiftRight16Imm(const MCInst &MI, unsigned Op, + SmallVectorImpl &Fixups) const { return 16 - MI.getOperand(Op).getImm(); } unsigned ARMMCCodeEmitter:: -getNarrowShiftRight64Imm(const MCInst &MI, unsigned Op, - SmallVectorImpl &Fixups) const { +getShiftRight32Imm(const MCInst &MI, unsigned Op, + SmallVectorImpl &Fixups) const { return 32 - MI.getOperand(Op).getImm(); } +unsigned ARMMCCodeEmitter:: +getShiftRight64Imm(const MCInst &MI, unsigned Op, + SmallVectorImpl &Fixups) const { + return 64 - MI.getOperand(Op).getImm(); +} + void ARMMCCodeEmitter:: EncodeInstruction(const MCInst &MI, raw_ostream &OS, SmallVectorImpl &Fixups) const { Modified: llvm/trunk/test/MC/ARM/neon-shift-encoding.s URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/neon-shift-encoding.s?rev=127193&r1=127192&r2=127193&view=diff ============================================================================== --- llvm/trunk/test/MC/ARM/neon-shift-encoding.s (original) +++ llvm/trunk/test/MC/ARM/neon-shift-encoding.s Mon Mar 7 17:38:41 2011 @@ -158,5 +158,10 @@ vrshrn.i32 d16, q8, #16 @ CHECK: vrshrn.i64 d16, q8, #32 @ encoding: [0x70,0x08,0xe0,0xf2] vrshrn.i64 d16, q8, #32 + +@ CHECK: vqrshrn.s16 d16, q8, #4 @ encoding: [0x70,0x09,0xcc,0xf2] + vqrshrn.s16 d16, q8, #4 @ CHECK: vqrshrn.s32 d16, q8, #13 @ encoding: [0x70,0x09,0xd3,0xf2] vqrshrn.s32 d16, q8, #13 +@ CHECK: vqrshrn.s64 d16, q8, #13 @ encoding: [0x70,0x09,0xf3,0xf2] + vqrshrn.s64 d16, q8, #13 Modified: llvm/trunk/utils/TableGen/EDEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/EDEmitter.cpp?rev=127193&r1=127192&r2=127193&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/EDEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/EDEmitter.cpp Mon Mar 7 17:38:41 2011 @@ -598,9 +598,10 @@ IMM("t2adrlabel"); IMM("shift_imm"); IMM("neon_vcvt_imm32"); - IMM("nsr16_imm"); - IMM("nsr32_imm"); - IMM("nsr64_imm"); + IMM("shr_imm8"); + IMM("shr_imm16"); + IMM("shr_imm32"); + IMM("shr_imm64"); MISC("brtarget", "kOperandTypeARMBranchTarget"); // ? MISC("uncondbrtarget", "kOperandTypeARMBranchTarget"); // ? From geek4civic at gmail.com Mon Mar 7 18:16:49 2011 From: geek4civic at gmail.com (NAKAMURA Takumi) Date: Tue, 8 Mar 2011 09:16:49 +0900 Subject: [llvm-commits] [PATCH] Makefile.rules: [PR9321] "make install" may install include files along explicit pattern. In-Reply-To: <52707747-2CB1-4E5D-A0A4-6D57A2E50047@apple.com> References: <52707747-2CB1-4E5D-A0A4-6D57A2E50047@apple.com> Message-ID: Eric, > Can you give me a list of differences in the install before and after this patch please? It suppresses installing 4 files below; include/llvm/CMakeLists.txt include/llvm/Config/config.h.cmake include/llvm/Config/llvm-config.h.cmake include/llvm/Support/DataTypes.h.cmake It is rather an issue PR2928 than PR9321. Bug 2928 - make install shall ignore *.cmake files. (edit) ...Takumi From echristo at apple.com Mon Mar 7 18:42:51 2011 From: echristo at apple.com (Eric Christopher) Date: Mon, 7 Mar 2011 16:42:51 -0800 Subject: [llvm-commits] [PATCH] Makefile.rules: [PR9321] "make install" may install include files along explicit pattern. In-Reply-To: References: <52707747-2CB1-4E5D-A0A4-6D57A2E50047@apple.com> Message-ID: <1F5D2477-118D-406A-A70D-BB78E8CE0DC6@apple.com> On Mar 7, 2011, at 4:16 PM, NAKAMURA Takumi wrote: > Eric, > >> Can you give me a list of differences in the install before and after this patch please? > > It suppresses installing 4 files below; > include/llvm/CMakeLists.txt > include/llvm/Config/config.h.cmake > include/llvm/Config/llvm-config.h.cmake > include/llvm/Support/DataTypes.h.cmake > > It is rather an issue PR2928 than PR9321. > Bug 2928 - make install shall ignore *.cmake files. (edit) OK then. Just wanted to make sure you did a find -print and diffed the results between the two runs. -eric From joerg at britannica.bec.de Mon Mar 7 18:56:18 2011 From: joerg at britannica.bec.de (Joerg Sonnenberger) Date: Tue, 8 Mar 2011 01:56:18 +0100 Subject: [llvm-commits] [PATCH] Makefile.rules: [PR9321] "make install" may install include files along explicit pattern. In-Reply-To: References: Message-ID: <20110308005618.GA30857@britannica.bec.de> On Mon, Feb 28, 2011 at 01:53:07PM +0900, NAKAMURA Takumi wrote: > diff --git a/Makefile.rules b/Makefile.rules > index c0a9112..94d2e2c 100644 > --- a/Makefile.rules > +++ b/Makefile.rules > @@ -2139,8 +2139,13 @@ install-local:: > $(Verb) $(MKDIR) $(DESTDIR)$(PROJ_includedir) > $(Verb) if test -d "$(PROJ_SRC_ROOT)/include" ; then \ > cd $(PROJ_SRC_ROOT)/include && \ > - for hdr in `find . -type f '!' '(' -name '*~' \ > - -o -name '.#*' -o -name '*.in' ')' -print | grep -v CVS | \ > + for hdr in `find . -type f '(' \ > + -name LICENSE.TXT \ > + -or -name '*.def' \ > + -or -name '*.h' \ > + -or -name '*.inc' \ > + -or -name '*.td' \ > + ')' -print | grep -v CVS | \ > grep -v .svn` ; do \ > instdir=`dirname "$(DESTDIR)$(PROJ_includedir)/$$hdr"` ; \ > if test \! -d "$$instdir" ; then \ > @@ -2153,7 +2158,19 @@ install-local:: > ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT)) > $(Verb) if test -d "$(PROJ_OBJ_ROOT)/include" ; then \ > cd $(PROJ_OBJ_ROOT)/include && \ > - for hdr in `find . -type f -print | grep -v CVS` ; do \ > + for hdr in `find . -type f '(' \ > + -name LICENSE.TXT \ > + -or -name '*.def' \ > + -or -name '*.h' \ > + -or -name '*.inc' \ > + -or -name '*.td' \ > + ')' -print | grep -v CVS | \ > + grep -v .svn` ; do \ > + instdir=`dirname "$(DESTDIR)$(PROJ_includedir)/$$hdr"` ; \ > + if test \! -d "$$instdir" ; then \ > + $(EchoCmd) Making install directory $$instdir ; \ > + $(MKDIR) $$instdir ;\ > + fi ; \ > $(DataInstall) $$hdr $(DESTDIR)$(PROJ_includedir)/$$hdr ; \ > done ; \ > fi Same here too -- SUS says the syntax is "-o", not "-or". Please also merge the grep calls using ! '(' -path '*/CVS/*' -o -path '*/.svn/*' ')'. The find ... | while read hdr ideom is IMO more readable too and doesn't force the shell to read all names at once. Joerg From aggarwa4 at illinois.edu Mon Mar 7 19:10:47 2011 From: aggarwa4 at illinois.edu (Arushi Aggarwal) Date: Tue, 08 Mar 2011 01:10:47 -0000 Subject: [llvm-commits] [poolalloc] r127196 - /poolalloc/trunk/lib/DSA/DataStructureStats.cpp Message-ID: <20110308011047.A9DB52A6C12C@llvm.org> Author: aggarwa4 Date: Mon Mar 7 19:10:47 2011 New Revision: 127196 URL: http://llvm.org/viewvc/llvm-project?rev=127196&view=rev Log: We must also count InsesrtValue and ExtractValue Instructions in evaluation of DS Statistics. Modified: poolalloc/trunk/lib/DSA/DataStructureStats.cpp Modified: poolalloc/trunk/lib/DSA/DataStructureStats.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DataStructureStats.cpp?rev=127196&r1=127195&r2=127196&view=diff ============================================================================== --- poolalloc/trunk/lib/DSA/DataStructureStats.cpp (original) +++ poolalloc/trunk/lib/DSA/DataStructureStats.cpp Mon Mar 7 19:10:47 2011 @@ -74,6 +74,8 @@ void visitLoad(LoadInst &LI); void visitStore(StoreInst &SI); + void visitInsertValue(InsertValueInst &I); + void visitExtractValue(ExtractValueInst &I); /// Debugging support methods void print(llvm::raw_ostream &O, const Module* = 0) const { } @@ -215,6 +217,21 @@ } } +void DSGraphStats::visitInsertValue(InsertValueInst &I) { + if (isNodeForValueUntyped(I.getAggregateOperand(), I.getParent()->getParent())) { + NumUntypedMemAccesses++; + } else { + NumTypedMemAccesses++; + } +} + +void DSGraphStats::visitExtractValue(ExtractValueInst &I) { + if (isNodeForValueUntyped(I.getAggregateOperand(), I.getParent()->getParent())) { + NumUntypedMemAccesses++; + } else { + NumTypedMemAccesses++; + } +} bool DSGraphStats::runOnFunction(Function& F) { From geek4civic at gmail.com Mon Mar 7 19:17:32 2011 From: geek4civic at gmail.com (NAKAMURA Takumi) Date: Tue, 8 Mar 2011 10:17:32 +0900 Subject: [llvm-commits] [PATCH] Makefile.rules: [PR9321] "make install" may install include files along explicit pattern. In-Reply-To: <20110308005618.GA30857@britannica.bec.de> References: <20110308005618.GA30857@britannica.bec.de> Message-ID: Good morning, Joerg. On Tue, Mar 8, 2011 at 9:56 AM, Joerg Sonnenberger wrote: > Same here too -- SUS says the syntax is "-o", not "-or". I know, I will commit the stuff to modify "-or" to "-o", thank you. :) > Please also > merge the grep calls using ! '(' -path '*/CVS/*' -o -path '*/.svn/*' > ')'. The find ... | while read hdr ideom is IMO more readable too and > doesn't force the shell to read all names at once. I prefer your suggestion, though, I would not be confident to modify these scheme. ...Takumi From bob.wilson at apple.com Mon Mar 7 19:17:16 2011 From: bob.wilson at apple.com (Bob Wilson) Date: Tue, 08 Mar 2011 01:17:16 -0000 Subject: [llvm-commits] [llvm] r127197 - /llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Message-ID: <20110308011716.95FB12A6C12C@llvm.org> Author: bwilson Date: Mon Mar 7 19:17:16 2011 New Revision: 127197 URL: http://llvm.org/viewvc/llvm-project?rev=127197&view=rev Log: Fix comment typos. Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=127197&r1=127196&r2=127197&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Mon Mar 7 19:17:16 2011 @@ -2691,8 +2691,8 @@ // If one of the operand is zero, it's safe to ignore the NaN case since // we only care about equality comparisons. (SeenZero || (DAG.isKnownNeverNaN(LHS) && DAG.isKnownNeverNaN(RHS)))) { - // If unsafe fp math optimization is enabled and there are no othter uses of - // the CMP operands, and the condition code is EQ oe NE, we can optimize it + // If unsafe fp math optimization is enabled and there are no other uses of + // the CMP operands, and the condition code is EQ or NE, we can optimize it // to an integer comparison. if (CC == ISD::SETOEQ) CC = ISD::SETEQ; From bob.wilson at apple.com Mon Mar 7 19:17:20 2011 From: bob.wilson at apple.com (Bob Wilson) Date: Tue, 08 Mar 2011 01:17:20 -0000 Subject: [llvm-commits] [llvm] r127198 - in /llvm/trunk: lib/Target/ARM/ARMISelLowering.cpp lib/Target/ARM/ARMISelLowering.h test/CodeGen/ARM/select.ll Message-ID: <20110308011720.97FD02A6C12D@llvm.org> Author: bwilson Date: Mon Mar 7 19:17:20 2011 New Revision: 127198 URL: http://llvm.org/viewvc/llvm-project?rev=127198&view=rev Log: Fix a compiler crash where a Glue value had multiple uses. Radar 9049552. Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp llvm/trunk/lib/Target/ARM/ARMISelLowering.h llvm/trunk/test/CodeGen/ARM/select.ll Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=127198&r1=127197&r2=127198&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Mon Mar 7 19:17:20 2011 @@ -2527,6 +2527,27 @@ return DAG.getNode(ARMISD::FMSTAT, dl, MVT::Glue, Cmp); } +/// duplicateCmp - Glue values can have only one use, so this function +/// duplicates a comparison node. +SDValue +ARMTargetLowering::duplicateCmp(SDValue Cmp, SelectionDAG &DAG) const { + unsigned Opc = Cmp.getOpcode(); + DebugLoc DL = Cmp.getDebugLoc(); + if (Opc == ARMISD::CMP || Opc == ARMISD::CMPZ) + return DAG.getNode(Opc, DL, MVT::Glue, Cmp.getOperand(0),Cmp.getOperand(1)); + + assert(Opc == ARMISD::FMSTAT && "unexpected comparison operation"); + Cmp = Cmp.getOperand(0); + Opc = Cmp.getOpcode(); + if (Opc == ARMISD::CMPFP) + Cmp = DAG.getNode(Opc, DL, MVT::Glue, Cmp.getOperand(0),Cmp.getOperand(1)); + else { + assert(Opc == ARMISD::CMPFPw0 && "unexpected operand of FMSTAT"); + Cmp = DAG.getNode(Opc, DL, MVT::Glue, Cmp.getOperand(0)); + } + return DAG.getNode(ARMISD::FMSTAT, DL, MVT::Glue, Cmp); +} + SDValue ARMTargetLowering::LowerSELECT(SDValue Op, SelectionDAG &DAG) const { SDValue Cond = Op.getOperand(0); SDValue SelectTrue = Op.getOperand(1); @@ -2562,7 +2583,7 @@ EVT VT = Cond.getValueType(); SDValue ARMcc = Cond.getOperand(2); SDValue CCR = Cond.getOperand(3); - SDValue Cmp = Cond.getOperand(4); + SDValue Cmp = duplicateCmp(Cond.getOperand(4), DAG); return DAG.getNode(ARMISD::CMOV, dl, VT, True, False, ARMcc, CCR, Cmp); } } Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.h?rev=127198&r1=127197&r2=127198&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.h (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.h Mon Mar 7 19:17:20 2011 @@ -459,6 +459,7 @@ SDValue &ARMcc, SelectionDAG &DAG, DebugLoc dl) const; SDValue getVFPCmp(SDValue LHS, SDValue RHS, SelectionDAG &DAG, DebugLoc dl) const; + SDValue duplicateCmp(SDValue Cmp, SelectionDAG &DAG) const; SDValue OptimizeVFPBrcond(SDValue Op, SelectionDAG &DAG) const; Modified: llvm/trunk/test/CodeGen/ARM/select.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/select.ll?rev=127198&r1=127197&r2=127198&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/ARM/select.ll (original) +++ llvm/trunk/test/CodeGen/ARM/select.ll Mon Mar 7 19:17:20 2011 @@ -90,3 +90,26 @@ %tmp1 = select i1 %tmp, float 0x3FF3BE76C0000000, float 0x40030E9A20000000 ret float %tmp1 } + +; +; Glue values can only have a single use, but the following test exposed a +; case where a SELECT was lowered with 2 uses of a comparison, causing the +; scheduler to assert. +; CHECK-VFP: f9: + +declare i8* @objc_msgSend(i8*, i8*, ...) +define void @f9() optsize { +entry: + %cmp = icmp eq i8* undef, inttoptr (i32 4 to i8*) + %conv191 = select i1 %cmp, float -3.000000e+00, float 0.000000e+00 + %conv195 = select i1 %cmp, double -1.000000e+00, double 0.000000e+00 + %add = fadd double %conv195, 1.100000e+01 + %conv196 = fptrunc double %add to float + %add201 = fadd float undef, %conv191 + %tmp484 = bitcast float %conv196 to i32 + %tmp478 = bitcast float %add201 to i32 + %tmp490 = insertvalue [2 x i32] undef, i32 %tmp484, 0 + %tmp493 = insertvalue [2 x i32] %tmp490, i32 %tmp478, 1 + call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, [2 x i32], i32, float)*)(i8* undef, i8* undef, [2 x i32] %tmp493, i32 0, float 1.000000e+00) optsize + ret void +} From aggarwa4 at illinois.edu Mon Mar 7 19:27:06 2011 From: aggarwa4 at illinois.edu (Arushi Aggarwal) Date: Tue, 08 Mar 2011 01:27:06 -0000 Subject: [llvm-commits] [poolalloc] r127199 - in /poolalloc/trunk: include/dsa/DSNode.h lib/DSA/DataStructure.cpp Message-ID: <20110308012706.4B07E2A6C12C@llvm.org> Author: aggarwa4 Date: Mon Mar 7 19:27:06 2011 New Revision: 127199 URL: http://llvm.org/viewvc/llvm-project?rev=127199&view=rev Log: Added a utility function to get all the values associated with a DSNode. Removed dead code. Modified: poolalloc/trunk/include/dsa/DSNode.h poolalloc/trunk/lib/DSA/DataStructure.cpp Modified: poolalloc/trunk/include/dsa/DSNode.h URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/include/dsa/DSNode.h?rev=127199&r1=127198&r2=127199&view=diff ============================================================================== --- poolalloc/trunk/include/dsa/DSNode.h (original) +++ poolalloc/trunk/include/dsa/DSNode.h Mon Mar 7 19:27:06 2011 @@ -241,7 +241,6 @@ void mergeTypeInfo(const Type *Ty, unsigned Offset); void mergeTypeInfo(const TyMapTy::mapped_type TyIt, unsigned Offset); void mergeTypeInfo(const DSNode* D, unsigned Offset); - void mergeArrayTypeInfo(const DSNode* D); // Types records might exist without types in them bool hasNoType() { @@ -328,6 +327,9 @@ globals_iterator globals_begin() const { return Globals.begin(); } globals_iterator globals_end() const { return Globals.end(); } + /// addValueList - Compute a full set of values that are represented by + /// this node. High overhead method. + void addValueList(std::vector &List) const; /// maskNodeTypes - Apply a mask to the node types bitfield. /// Modified: poolalloc/trunk/lib/DSA/DataStructure.cpp URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/lib/DSA/DataStructure.cpp?rev=127199&r1=127198&r2=127199&view=diff ============================================================================== --- poolalloc/trunk/lib/DSA/DataStructure.cpp (original) +++ poolalloc/trunk/lib/DSA/DataStructure.cpp Mon Mar 7 19:27:06 2011 @@ -272,6 +272,15 @@ return isCollapsedNode(); } +void DSNode::addValueList(std::vector &List) const { + DSScalarMap &SN = getParentGraph()->getScalarMap(); + for(DSScalarMap::const_iterator I = SN.begin(), E = SN.end(); I!= E; I++) { + if(SN[I->first].getNode() == this){ + //I->first->dump(); + } + + } +} /// addFullGlobalsList - Compute the full set of global values that are /// represented by this node. Unlike getGlobalsList(), this requires fair /// amount of work to compute, so don't treat this method call as free. @@ -446,13 +455,6 @@ mergeTypeInfo(ii->second, ii->first + Offset); } -void DSNode::mergeArrayTypeInfo(const DSNode* DN) { - unsigned Offset = 0; - while(Offset < getSize()) { - mergeTypeInfo(DN, Offset); - Offset += DN->getSize(); - } -} /// addEdgeTo - Add an edge from the current node to the specified node. This /// can cause merging of nodes in the graph. /// From aggarwa4 at illinois.edu Mon Mar 7 19:33:09 2011 From: aggarwa4 at illinois.edu (Arushi Aggarwal) Date: Tue, 08 Mar 2011 01:33:09 -0000 Subject: [llvm-commits] [poolalloc] r127200 - in /poolalloc/trunk/test: TEST.types.Makefile TEST.types.report Message-ID: <20110308013309.B16A32A6C12C@llvm.org> Author: aggarwa4 Date: Mon Mar 7 19:33:09 2011 New Revision: 127200 URL: http://llvm.org/viewvc/llvm-project?rev=127200&view=rev Log: Remove scalarrepl from set of safe optimization passes. Modified: poolalloc/trunk/test/TEST.types.Makefile poolalloc/trunk/test/TEST.types.report Modified: poolalloc/trunk/test/TEST.types.Makefile URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/test/TEST.types.Makefile?rev=127200&r1=127199&r2=127200&view=diff ============================================================================== --- poolalloc/trunk/test/TEST.types.Makefile (original) +++ poolalloc/trunk/test/TEST.types.Makefile Mon Mar 7 19:33:09 2011 @@ -31,7 +31,8 @@ ANALYZE_OPTS += -instcount -disable-verify MEM := -track-memory -time-passes -disable-output -SAFE_OPTS := -internalize -scalarrepl -deadargelim -globaldce -basiccg -inline +#SAFE_OPTS := -internalize -scalarrepl -deadargelim -globaldce -basiccg -inline +SAFE_OPTS := -internalize -deadargelim -globaldce -basiccg -inline $(PROGRAMS_TO_TEST:%=Output/%.linked1.bc): \ Output/%.linked1.bc: Output/%.linked.rbc $(LOPT) @@ -44,14 +45,13 @@ $(PROGRAMS_TO_TEST:%=Output/%.temp1.bc): \ Output/%.temp1.bc: Output/%.llvm1.bc -$(RUNTOOLSAFELY) $(LLVMLD) -disable-opt $(SAFE_OPTS) -link-as-library $< $(PA_PRE_RT) -o $@ - $(PROGRAMS_TO_TEST:%=Output/%.opt1.bc): \ Output/%.opt1.bc: Output/%.llvm1.bc $(LOPT) $(ASSIST_SO) - -$(RUNOPT) -load $(ASSIST_SO) -disable-opt -info-output-file=$(CURDIR)/$@.info -instnamer -internalize -varargsfunc -indclone -funcspec -ipsccp -deadargelim -simplifygep -die -mergegep -mergearrgep -die -globaldce -simplifycfg -deadargelim -arg-simplify -varargsfunc -indclone -funcspec -deadargelim -globaldce -die -simplifycfg -gep-args -deadargelim -die -mergegep -die -globaldce -stats -time-passes $< -f -o $@ + -$(RUNOPT) -load $(ASSIST_SO) -disable-opt -info-output-file=$(CURDIR)/$@.info -instnamer -internalize -varargsfunc -indclone -funcspec -ipsccp -deadargelim -simplifygep -die -mergegep -mergearrgep -die -globaldce -simplifycfg -deadargelim -arg-simplify -varargsfunc -indclone -funcspec -deadargelim -globaldce -die -simplifycfg -gep-args -deadargelim -die -mergegep -die -dce -globaldce -stats -time-passes $< -f -o $@ $(PROGRAMS_TO_TEST:%=Output/%.opt.bc): \ Output/%.opt.bc: Output/%.llvm1.bc $(LOPT) $(ASSIST_SO) - -$(RUNOPT) -load $(ASSIST_SO) -disable-opt -info-output-file=$(CURDIR)/$@.info -instnamer -internalize -varargsfunc -indclone -funcspec -ipsccp -deadargelim -simplifygep -die -mergegep -die -mergearrgep -die -globaldce -simplifycfg -deadargelim -arg-simplify -die -varargsfunc -die -simplifycfg -globaldce -indclone -funcspec -deadargelim -globaldce -die -simplifycfg -gep-args -deadargelim -die -mergegep -die -mergearrgep -die -globaldce -stats -time-passes $< -f -o $@ + -$(RUNOPT) -load $(ASSIST_SO) -disable-opt -info-output-file=$(CURDIR)/$@.info -instnamer -internalize -varargsfunc -indclone -funcspec -ipsccp -deadargelim -simplifygep -die -mergegep -die -mergearrgep -die -globaldce -simplifycfg -deadargelim -arg-simplify -die -varargsfunc -die -simplifycfg -globaldce -indclone -funcspec -deadargelim -globaldce -die -simplifycfg -gep-args -deadargelim -die -mergefunc -die -mergegep -die -mergearrgep -die -globaldce -int2ptrcmp -die -dce -stats -time-passes $< -f -o $@ $(PROGRAMS_TO_TEST:%=Output/%.temp2.bc): \ Output/%.temp2.bc: Output/%.temp1.bc $(LOPT) $(ASSIST_SO) @@ -201,15 +201,15 @@ @/bin/echo -n "VARARGS_CALLS: " >> $@ - at grep 'Number of Calls Simplified' $<.info >> $@ @echo >> $@ + @/bin/echo -n "GEP_CALLS: " >> $@ + - at grep 'Number of Calls Modified' $<.info >> $@ + @echo >> $@ @/bin/echo -n "ARG_SMPL: " >> $@ - at grep 'Number of Args changeable' $<.info >> $@ @echo >> $@ - @/bin/echo -n "CALLS1: " >> $@ - - at grep 'Number of calls that could not be resolved' $@.time.1 >> $@ + @/bin/echo -n "INDCALLS: " >> $@ + - at grep 'Number of unresolved IndCalls' $@.time.1 >> $@ @echo >> $@ - @-if test -f Output/$*.opt.diff-nat; then \ - printf "RUN: 1" >> $@;\ - fi $(PROGRAMS_TO_TEST:%=test.$(TEST).%): \ Modified: poolalloc/trunk/test/TEST.types.report URL: http://llvm.org/viewvc/llvm-project/poolalloc/trunk/test/TEST.types.report?rev=127200&r1=127199&r2=127200&view=diff ============================================================================== --- poolalloc/trunk/test/TEST.types.report (original) +++ poolalloc/trunk/test/TEST.types.report Mon Mar 7 19:33:09 2011 @@ -159,11 +159,12 @@ # Nodes Folded [], ["VAFUNC", "VARARGS_CALLS: *([0-9]+)"], + ["GEPFUNC", "GEP_CALLS: *([0-9]+)"], ["ARGSMPL", "ARG_SMPL: *([0-9]+)"], ["FUNCSPEC", "CLONED_FUNCSPEC: *([0-9]+)"], ["INDCLONE", "CLONED_INDCLONE: *([0-9]+)"], ["StdLibFold", "STD_LIB_FOLD: *([0-9]+)"], ["I2PB", "I2PB: *([0-9]+)"], ["I2PS", "I2PS: *([0-9]+)"], - ["Calls", "CALLS1: *([0-9]+)"], + ["Calls", "INDCALLS: *([0-9]+)"], ); From atrick at apple.com Mon Mar 7 19:51:56 2011 From: atrick at apple.com (Andrew Trick) Date: Tue, 08 Mar 2011 01:51:56 -0000 Subject: [llvm-commits] [llvm] r127203 - /llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Message-ID: <20110308015156.6453F2A6C12C@llvm.org> Author: atrick Date: Mon Mar 7 19:51:56 2011 New Revision: 127203 URL: http://llvm.org/viewvc/llvm-project?rev=127203&view=rev Log: Further improvements to pre-RA-sched=list-ilp. This change uses the MaxReorderWindow for both height and depth, which tends to limit the negative effects of high register pressure. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=127203&r1=127202&r2=127203&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Mon Mar 7 19:51:56 2011 @@ -99,11 +99,11 @@ #ifndef NDEBUG namespace { // For sched=list-ilp, Count the number of times each factor comes into play. - enum { FactPressureDiff, FactRegUses, FactHeight, FactDepth, FactUllman, - NumFactors }; + enum { FactPressureDiff, FactRegUses, FactHeight, FactDepth, FactStatic, + FactOther, NumFactors }; } static const char *FactorName[NumFactors] = -{"PressureDiff", "RegUses", "Height", "Depth","Ullman"}; +{"PressureDiff", "RegUses", "Height", "Depth","Static", "Other"}; static int FactorCount[NumFactors]; #endif //!NDEBUG @@ -2103,9 +2103,11 @@ unsigned LPriority = SPQ->getNodePriority(left); unsigned RPriority = SPQ->getNodePriority(right); if (LPriority != RPriority) { - DEBUG(++FactorCount[FactUllman]); + DEBUG(++FactorCount[FactStatic]); return LPriority > RPriority; } + DEBUG(++FactorCount[FactOther]); + // Try schedule def + use closer when Sethi-Ullman numbers are the same. // e.g. // t1 = op t2, c1 @@ -2228,6 +2230,28 @@ return true; } +bool canEnableCoaelscing(SUnit *SU) { + unsigned Opc = SU->getNode() ? SU->getNode()->getOpcode() : 0; + if (Opc == ISD::TokenFactor || Opc == ISD::CopyToReg) + // CopyToReg should be close to its uses to facilitate coalescing and + // avoid spilling. + return true; + + if (Opc == TargetOpcode::EXTRACT_SUBREG || + Opc == TargetOpcode::SUBREG_TO_REG || + Opc == TargetOpcode::INSERT_SUBREG) + // EXTRACT_SUBREG, INSERT_SUBREG, and SUBREG_TO_REG nodes should be + // close to their uses to facilitate coalescing. + return true; + + if (SU->NumPreds == 0 && SU->NumSuccs != 0) + // If SU does not have a register def, schedule it close to its uses + // because it does not lengthen any live ranges. + return true; + + return false; +} + // list-ilp is currently an experimental scheduler that allows various // heuristics to be enabled prior to the normal register reduction logic. bool ilp_ls_rr_sort::operator()(SUnit *left, SUnit *right) const { @@ -2235,39 +2259,60 @@ // No way to compute latency of calls. return BURRSort(left, right, SPQ); - unsigned LLiveUses, RLiveUses; - int LPDiff = SPQ->RegPressureDiff(left, LLiveUses); - int RPDiff = SPQ->RegPressureDiff(right, RLiveUses); + unsigned LLiveUses = 0, RLiveUses = 0; + int LPDiff = 0, RPDiff = 0; + if (!DisableSchedRegPressure || !DisableSchedLiveUses) { + LPDiff = SPQ->RegPressureDiff(left, LLiveUses); + RPDiff = SPQ->RegPressureDiff(right, RLiveUses); + } if (!DisableSchedRegPressure && LPDiff != RPDiff) { DEBUG(++FactorCount[FactPressureDiff]); + DEBUG(dbgs() << "RegPressureDiff SU(" << left->NodeNum << "): " << LPDiff + << " != SU(" << right->NodeNum << "): " << RPDiff << "\n"); return LPDiff > RPDiff; } - if (!DisableSchedLiveUses && LLiveUses != RLiveUses) { - DEBUG(dbgs() << "Live uses " << left->NodeNum << " = " << LLiveUses - << " != " << right->NodeNum << " = " << RLiveUses << "\n"); + if (!DisableSchedRegPressure && (LPDiff > 0 || RPDiff > 0)) { + bool LReduce = canEnableCoaelscing(left); + bool RReduce = canEnableCoaelscing(right); + DEBUG(if (LReduce != RReduce) ++FactorCount[FactPressureDiff]); + if (LReduce && !RReduce) return false; + if (RReduce && !LReduce) return true; + } + + if (!DisableSchedLiveUses && (LLiveUses != RLiveUses)) { + DEBUG(dbgs() << "Live uses SU(" << left->NodeNum << "): " << LLiveUses + << " != SU(" << right->NodeNum << "): " << RLiveUses << "\n"); DEBUG(++FactorCount[FactRegUses]); return LLiveUses < RLiveUses; } - bool LStall = BUHasStall(left, left->getHeight(), SPQ); - bool RStall = BUHasStall(right, right->getHeight(), SPQ); - if (!DisableSchedStalls && LStall != RStall) { - DEBUG(++FactorCount[FactHeight]); - return left->getHeight() > right->getHeight(); + if (!DisableSchedStalls) { + bool LStall = BUHasStall(left, left->getHeight(), SPQ); + bool RStall = BUHasStall(right, right->getHeight(), SPQ); + if (LStall != RStall) { + DEBUG(++FactorCount[FactHeight]); + return left->getHeight() > right->getHeight(); + } } if (!DisableSchedCriticalPath) { int spread = (int)left->getDepth() - (int)right->getDepth(); if (std::abs(spread) > MaxReorderWindow) { + DEBUG(dbgs() << "Depth of SU(" << left->NodeNum << "): " + << left->getDepth() << " != SU(" << right->NodeNum << "): " + << right->getDepth() << "\n"); DEBUG(++FactorCount[FactDepth]); return left->getDepth() < right->getDepth(); } } if (!DisableSchedHeight && left->getHeight() != right->getHeight()) { - DEBUG(++FactorCount[FactHeight]); - return left->getHeight() > right->getHeight(); + int spread = (int)left->getHeight() - (int)right->getHeight(); + if (std::abs(spread) > MaxReorderWindow) { + DEBUG(++FactorCount[FactHeight]); + return left->getHeight() > right->getHeight(); + } } return BURRSort(left, right, SPQ); From ajclinto at gmail.com Mon Mar 7 20:28:37 2011 From: ajclinto at gmail.com (Andrew Clinton) Date: Mon, 7 Mar 2011 21:28:37 -0500 Subject: [llvm-commits] Patch to improve loop-simplify In-Reply-To: <51245ABE-9F40-445A-BA2F-EE40A61D2454@apple.com> References: <51245ABE-9F40-445A-BA2F-EE40A61D2454@apple.com> Message-ID: I've run a few more tests based on the IR listed below. It appears that regardless of whether my patch is present, llc will generate code without the extra "jmp" for the old .ll and with the extra "jmp" with the new .ll. So it appears that the patch is not responsible for this difference in the generated x86 assembly code. I'm guessing that the blocks happen to fall in a nicer pattern for codegen in this particular case, when an outer loop is split out. Could you commit the patch? Andrew On Thu, Mar 3, 2011 at 5:59 PM, Cameron Zwarich wrote: > That is a bit strange. There is another run of LoopSimplify in the backend for LoopStrengthReduce. Perhaps a problem is reintroduced there that is not cleaned up. > > Cameron > > On Mar 3, 2011, at 8:10 AM, Andrew Clinton wrote: > >> I'm not sure why the code generator is synthesizing an additional >> unconditional branch. ?The IR is certainly simpler with this patch. >> >> -------------------------------- >> With patch: >>> opt -O3 not-nested-loop.ll -S >> >> ; ModuleID = 'not-nested-loop.ll' >> >> define i32 @_Z4testv() { >> ;

-

LLVM 2.9 Tentative Release Schedule

+

LLVM 2.9 Release Schedule

From dpatel at apple.com Tue Mar 8 10:29:40 2011 From: dpatel at apple.com (Devang Patel) Date: Tue, 08 Mar 2011 16:29:40 -0000 Subject: [llvm-commits] [llvm] r127250 - /llvm/trunk/docs/SourceLevelDebugging.html Message-ID: <20110308162940.5906E2A6C12C@llvm.org> Author: dpatel Date: Tue Mar 8 10:29:40 2011 New Revision: 127250 URL: http://llvm.org/viewvc/llvm-project?rev=127250&view=rev Log: Since last couple of days, argument number is encoded using 8 bits from line number field in argument's debug info. Modified: llvm/trunk/docs/SourceLevelDebugging.html Modified: llvm/trunk/docs/SourceLevelDebugging.html URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/SourceLevelDebugging.html?rev=127250&r1=127249&r2=127250&view=diff ============================================================================== --- llvm/trunk/docs/SourceLevelDebugging.html (original) +++ llvm/trunk/docs/SourceLevelDebugging.html Tue Mar 8 10:29:40 2011 @@ -744,7 +744,8 @@ metadata, ;; Context metadata, ;; Name metadata, ;; Reference to file where defined - i32, ;; Line number where defined + i32, ;; 24 bit - Line number where defined + ;; 8 bit - Argument number. 1 indicates 1st argument. metadata ;; Type descriptor } From fvbommel at gmail.com Tue Mar 8 10:35:29 2011 From: fvbommel at gmail.com (Frits van Bommel) Date: Tue, 8 Mar 2011 17:35:29 +0100 Subject: [llvm-commits] [llvm] r127250 - /llvm/trunk/docs/SourceLevelDebugging.html In-Reply-To: <20110308162940.5906E2A6C12C@llvm.org> References: <20110308162940.5906E2A6C12C@llvm.org> Message-ID: On Tue, Mar 8, 2011 at 5:29 PM, Devang Patel wrote: > - ?i32, ? ? ?;; Line number where defined > + ?i32, ? ? ?;; 24 bit - Line number where defined > + ? ? ? ? ? ?;; 8 bit - Argument number. 1 indicates 1st argument. You may want to specify which are the high bits and which the low ones... From jan_sjodin at yahoo.com Tue Mar 8 10:44:21 2011 From: jan_sjodin at yahoo.com (Jan Sjodin) Date: Tue, 8 Mar 2011 08:44:21 -0800 (PST) Subject: [llvm-commits] setAssembler method in MCOobjectStreamer In-Reply-To: <4D7003FB.6080806@gmail.com> References: <302897.66592.qm@web55603.mail.re4.yahoo.com> <4D7003FB.6080806@gmail.com> Message-ID: <863021.91543.qm@web55603.mail.re4.yahoo.com> ----- Original Message ---- > From: Rafael Avila de Espindola > To: Jan Sjodin > Cc: llvm-commits at cs.uiuc.edu > Sent: Thu, March 3, 2011 4:11:23 PM > Subject: Re: setAssembler method in MCOobjectStreamer > > On 11-03-03 03:52 PM, Jan Sjodin wrote: > > This patch adds a function to set the assembler in the MCObjectStreamer, we >may > > not want to use the default Writer, which means the Assembler has to be >removed > > or modified. > > There are two alternatives to this patch: > > > > 1. Create another constructor (both for MCObjectStreamer and MCELFStreamer) > > which takes the Writer as an argument. > > 2. Add a method to the MCAssembler to replace the Writer. > > > > If one of the alternatives is preferred to this patch, I can do it that way > > instead. > > It is hard to be sure without seeing the use, but option 1 looks better. > A setter could in general be called at any point and changing the > assembler at an arbitrary point looks strange. > > > - Jan > > Cheers, > Rafael Here is the updated patch. OK to commit? - Jan -------------- next part -------------- A non-text attachment was scrubbed... Name: 0045_streamerinit.patch Type: application/octet-stream Size: 1866 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20110308/10033105/attachment.obj From jan_sjodin at yahoo.com Tue Mar 8 10:46:08 2011 From: jan_sjodin at yahoo.com (Jan Sjodin) Date: Tue, 8 Mar 2011 08:46:08 -0800 (PST) Subject: [llvm-commits] InitializeNativeAsmParser function. Message-ID: <706455.84879.qm@web55606.mail.re4.yahoo.com> Ping! ----- Original Message ---- > From: Jan Sjodin > To: llvm-commits at cs.uiuc.edu > Sent: Tue, March 1, 2011 4:31:26 PM > Subject: InitializeNativeAsmParser function. > > Here is a patch for a new function to initialize the native asm parser. This is > > needed in the future for MCJIT in case the code contains inline asm. > > - Jan > From jan_sjodin at yahoo.com Tue Mar 8 10:46:52 2011 From: jan_sjodin at yahoo.com (Jan Sjodin) Date: Tue, 8 Mar 2011 08:46:52 -0800 (PST) Subject: [llvm-commits] Change DwarfUsesAbsoluteLabelForStmtList to false for X86ELFMCAsmInfo. Message-ID: <504570.72198.qm@web55608.mail.re4.yahoo.com> Ping! - Jan ----- Original Message ---- > From: Jan Sjodin > To: Anton Korobeynikov > Cc: llvm-commits at cs.uiuc.edu > Sent: Sat, February 26, 2011 9:40:31 AM > Subject: Re: [llvm-commits] Change DwarfUsesAbsoluteLabelForStmtList to false >for X86ELFMCAsmInfo. > > > > > ----- Original Message ---- > > From: Anton Korobeynikov > > To: Jan Sjodin > > Cc: llvm-commits at cs.uiuc.edu > > Sent: Sat, February 26, 2011 7:36:00 AM > > Subject: Re: [llvm-commits] Change DwarfUsesAbsoluteLabelForStmtList to >false > > >for X86ELFMCAsmInfo. > > > > Hello Jan, > > > > > Dwarfdump gives an error and gdb fails when generating code in memory >(but > > > happens to accept it in a .o file) in Linux when > > > DwarfUsesAbsoluteLabelForStmtList = true, this patch sets it to false to > fix > > > this issue. I don't know if this is true for other targets, but the >change > > >is > > > limited to X86ELFMCAsmInfo. > > How the patch was tested? How we might be sure this won't break non JIT >case? > > > > -- > > With best regards, Anton Korobeynikov > > Faculty of Mathematics and Mechanics, Saint Petersburg State University > > > > The question you are really asking is if there is a bug in dwarfdump or a bug >in > > llvm, because dwarfdump always complains. I tried this on Linux 64-bit with > clang and llvm trunk: > > file empty.c: > --------------------------------------------------------------- > > int main() > { > return 42; > } > --------------------------------------------------------------- > > Compile and run dwarfdump: > --------------------------------------------------------------- > > clang -c -g -emit-llvm -o empty.bc empty.c > > llc -filetype=obj empty.bc > > dwarfdump empty.o > > .debug_info > > COMPILE_UNIT
: > <0>< 11> DW_TAG_compile_unit > DW_AT_producer clang version 2.9 (trunk 126545) > DW_AT_language DW_LANG_C99 > DW_AT_name empty.c > DW_AT_entry_pc 0x0 > DW_AT_stmt_list 0x0 > DW_AT_comp_dir >/home/jsjodin/Work/LLVM/Sandboxes/TOT/test > > LOCAL_SYMBOLS: > <1>< 114> DW_TAG_base_type > DW_AT_encoding DW_ATE_signed > DW_AT_name int > DW_AT_byte_size 4 > <1>< 121> DW_TAG_subprogram > DW_AT_name main > DW_AT_decl_file 1 > DW_AT_decl_line 2 > DW_AT_type <114> > DW_AT_external yes(1) > DW_AT_low_pc 0x0 > DW_AT_high_pc 0xe > DW_AT_frame_base DW_OP_reg7 > AT of 16359 (0x3fe7) is unknown to dwarfdump. Continuing. > yes(1) > > .debug_line: line number info for a single cu > dwarfdump ERROR: dwarf_srclines: DW_DLE_ATTR_FORM_BAD (114) > --------------------------------------------------------------- > > dwarfdump cleary doesn't like what llc has produced. With the patch applied we > > try again: > > --------------------------------------------------------------- > .debug_info > > COMPILE_UNIT
: > <0>< 11> DW_TAG_compile_unit > DW_AT_producer clang version 2.9 (trunk 126545) > DW_AT_language DW_LANG_C99 > DW_AT_name empty.c > DW_AT_entry_pc 0x0 > DW_AT_stmt_list 0 > DW_AT_comp_dir >/home/jsjodin/Work/LLVM/Sandboxes/TOT/test > > LOCAL_SYMBOLS: > <1>< 110> DW_TAG_base_type > DW_AT_encoding DW_ATE_signed > DW_AT_name int > DW_AT_byte_size 4 > <1>< 117> DW_TAG_subprogram > DW_AT_name main > DW_AT_decl_file 1 > /home/jsjodin/Work/LLVM/Sandboxes/TOT/test/empty.c > DW_AT_decl_line 2 > DW_AT_type <110> > DW_AT_external yes(1) > DW_AT_low_pc 0x0 > DW_AT_high_pc 0xe > DW_AT_frame_base DW_OP_reg7 > AT of 16359 (0x3fe7) is unknown to dwarfdump. Continuing. > yes(1) > > .debug_line: line number info for a single cu > Source lines (from CU-DIE at .debug_info offset 11): > [row,column] // /home/jsjodin/Work/LLVM/Sandboxes/TOT/test/empty.c: [ 2,-1] 0x0 // >new > > statement > /home/jsjodin/Work/LLVM/Sandboxes/TOT/test/empty.c: [ 3, 3] 0xd // >new > > statement > /home/jsjodin/Work/LLVM/Sandboxes/TOT/test/empty.c: [ 3, 3] 0xe // >new > > statement // end of text sequence > > .debug_pubnames > global main die-in-sect 117, cu-in-sect 11, die-in-cu 117, > cu-header-in-sect 0 > > .debug_macinfo > > .debug_loc format means index section-offset begin-addr end-addr > length-of-block-entry > > .debug_abbrev > < 1>< 0> DW_TAG_compile_unit DW_children_yes > < 3> DW_AT_producer DW_FORM_string > < 5> DW_AT_language DW_FORM_data2 > < 7> DW_AT_name DW_FORM_string > < 9> DW_AT_entry_pc DW_FORM_addr > < 11> DW_AT_stmt_list DW_FORM_data4 > < 13> DW_AT_comp_dir DW_FORM_string > < 2>< 17> DW_TAG_base_type DW_children_no > < 20> DW_AT_encoding DW_FORM_data1 > < 22> DW_AT_name DW_FORM_string > < 24> DW_AT_byte_size DW_FORM_data1 > < 3>< 28> DW_TAG_subprogram DW_children_no > < 31> DW_AT_name DW_FORM_string > < 33> DW_AT_decl_file DW_FORM_data1 > < 35> DW_AT_decl_line DW_FORM_data1 > < 37> DW_AT_type DW_FORM_ref4 > < 39> DW_AT_external DW_FORM_flag > < 41> DW_AT_low_pc DW_FORM_addr > < 43> DW_AT_high_pc DW_FORM_addr > < 45> DW_AT_frame_base DW_FORM_block1 > < 47> AT of 16359 (0x3fe7) is unknown to dwarfdump. Continuing. > DW_FORM_flag > < 4>< 52> null .debug_abbrev entry > > .debug_string > > .debug_aranges > > .debug_frame > > fde: > < 0><0x0:0xe>
> 0x00000000: > > .debug_static_func > > .debug_static_vars > > .debug_pubtypes > > .debug_weaknames > --------------------------------------------------------------- > From sabre at nondot.org Tue Mar 8 10:59:03 2011 From: sabre at nondot.org (Chris Lattner) Date: Tue, 08 Mar 2011 16:59:03 -0000 Subject: [llvm-commits] [llvm] r127252 - /llvm/trunk/include/llvm/Value.h Message-ID: <20110308165903.45B162A6C12C@llvm.org> Author: lattner Date: Tue Mar 8 10:59:03 2011 New Revision: 127252 URL: http://llvm.org/viewvc/llvm-project?rev=127252&view=rev Log: fix incorrect comment. Modified: llvm/trunk/include/llvm/Value.h Modified: llvm/trunk/include/llvm/Value.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Value.h?rev=127252&r1=127251&r2=127252&view=diff ============================================================================== --- llvm/trunk/include/llvm/Value.h (original) +++ llvm/trunk/include/llvm/Value.h Tue Mar 8 10:59:03 2011 @@ -51,8 +51,8 @@ /// This is a very important LLVM class. It is the base class of all values /// computed by a program that may be used as operands to other values. Value is /// the super class of other important classes such as Instruction and Function. -/// All Values have a Type. Type is not a subclass of Value. All types can have -/// a name and they should belong to some Module. Setting the name on the Value +/// All Values have a Type. Type is not a subclass of Value. Some values can +/// have a name and they belong to some Module. Setting the name on the Value /// automatically updates the module's symbol table. /// /// Every value has a "use list" that keeps track of which other Values are From benny.kra at googlemail.com Tue Mar 8 11:28:36 2011 From: benny.kra at googlemail.com (Benjamin Kramer) Date: Tue, 08 Mar 2011 17:28:36 -0000 Subject: [llvm-commits] [llvm] r127254 - /llvm/trunk/lib/CodeGen/LiveVariables.cpp Message-ID: <20110308172836.DF7FA2A6C12C@llvm.org> Author: d0k Date: Tue Mar 8 11:28:36 2011 New Revision: 127254 URL: http://llvm.org/viewvc/llvm-project?rev=127254&view=rev Log: Reduce vector reallocations. Modified: llvm/trunk/lib/CodeGen/LiveVariables.cpp Modified: llvm/trunk/lib/CodeGen/LiveVariables.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveVariables.cpp?rev=127254&r1=127253&r2=127254&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveVariables.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveVariables.cpp Tue Mar 8 11:28:36 2011 @@ -107,9 +107,7 @@ // Mark the variable known alive in this bb VRInfo.AliveBlocks.set(BBNum); - for (MachineBasicBlock::const_pred_reverse_iterator PI = MBB->pred_rbegin(), - E = MBB->pred_rend(); PI != E; ++PI) - WorkList.push_back(*PI); + WorkList.insert(WorkList.end(), MBB->pred_rbegin(), MBB->pred_rend()); } void LiveVariables::MarkVirtRegAliveInBlock(VarInfo &VRInfo, @@ -707,7 +705,7 @@ // Loop over all of the successors of the basic block, checking to see if // the value is either live in the block, or if it is killed in the block. - std::vector OpSuccBlocks; + SmallVector OpSuccBlocks; for (MachineBasicBlock::const_succ_iterator SI = MBB.succ_begin(), E = MBB.succ_end(); SI != E; ++SI) { MachineBasicBlock *SuccMBB = *SI; From rjmccall at apple.com Tue Mar 8 12:01:22 2011 From: rjmccall at apple.com (John McCall) Date: Tue, 08 Mar 2011 18:01:22 -0000 Subject: [llvm-commits] [llvm] r127256 - /llvm/trunk/include/llvm/MC/MCDisassembler.h Message-ID: <20110308180122.CEBE52A6C12C@llvm.org> Author: rjmccall Date: Tue Mar 8 12:01:22 2011 New Revision: 127256 URL: http://llvm.org/viewvc/llvm-project?rev=127256&view=rev Log: Typo. Patch by arrowdodger. Modified: llvm/trunk/include/llvm/MC/MCDisassembler.h Modified: llvm/trunk/include/llvm/MC/MCDisassembler.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCDisassembler.h?rev=127256&r1=127255&r2=127256&view=diff ============================================================================== --- llvm/trunk/include/llvm/MC/MCDisassembler.h (original) +++ llvm/trunk/include/llvm/MC/MCDisassembler.h Tue Mar 8 12:01:22 2011 @@ -46,7 +46,7 @@ uint64_t address, raw_ostream &vStream) const = 0; - /// getEDInfo - Returns the enhanced insturction information corresponding to + /// getEDInfo - Returns the enhanced instruction information corresponding to /// the disassembler. /// /// @return - An array of instruction information, with one entry for From stoklund at 2pi.dk Tue Mar 8 13:07:02 2011 From: stoklund at 2pi.dk (Jakob Stoklund Olesen) Date: Tue, 8 Mar 2011 11:07:02 -0800 Subject: [llvm-commits] [llvm] r127245 - /llvm/trunk/lib/CodeGen/LiveInterval.cpp In-Reply-To: <20110308135207.55E7D2A6C12C@llvm.org> References: <20110308135207.55E7D2A6C12C@llvm.org> Message-ID: On Mar 8, 2011, at 5:52 AM, Oscar Fuentes wrote: > Author: ofv > Date: Tue Mar 8 07:52:07 2011 > New Revision: 127245 > > URL: http://llvm.org/viewvc/llvm-project?rev=127245&view=rev > Log: > Make a comparator's argument `const'. This fixes the build for MSVC 9. > > Modified: > llvm/trunk/lib/CodeGen/LiveInterval.cpp > > Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=127245&r1=127244&r2=127245&view=diff > ============================================================================== > --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) > +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Tue Mar 8 07:52:07 2011 > @@ -36,7 +36,7 @@ > bool operator()(SlotIndex A, const LiveRange &B) const { > return A < B.end; > } > - bool operator()(const LiveRange &A, SlotIndex B) const { > + bool operator()(const LiveRange &A, const SlotIndex B) const { > return A.end < B; > } > }; Huh? A const by-value argument looks like a bug to me. What was the error? /jakob From grosbach at apple.com Tue Mar 8 13:17:19 2011 From: grosbach at apple.com (Jim Grosbach) Date: Tue, 08 Mar 2011 19:17:19 -0000 Subject: [llvm-commits] [llvm] r127258 - /llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp Message-ID: <20110308191719.C174B2A6C12C@llvm.org> Author: grosbach Date: Tue Mar 8 13:17:19 2011 New Revision: 127258 URL: http://llvm.org/viewvc/llvm-project?rev=127258&view=rev Log: Darwin 'as' silently ignores the '.ident' directive. Modified: llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp Modified: llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp?rev=127258&r1=127257&r2=127258&view=diff ============================================================================== --- llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp (original) +++ llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp Tue Mar 8 13:17:19 2011 @@ -100,6 +100,8 @@ AddDirectiveHandler<&DarwinAsmParser::ParseSectionDirectiveText>(".text"); AddDirectiveHandler<&DarwinAsmParser::ParseSectionDirectiveThreadInitFunc>(".thread_init_func"); AddDirectiveHandler<&DarwinAsmParser::ParseSectionDirectiveTLV>(".tlv"); + + AddDirectiveHandler<&DarwinAsmParser::ParseSectionDirectiveIdent>(".ident"); } bool ParseDirectiveDesc(StringRef, SMLoc); @@ -277,6 +279,11 @@ return ParseSectionSwitch("__DATA", "__thread_vars", MCSectionMachO::S_THREAD_LOCAL_VARIABLES); } + bool ParseSectionDirectiveIdent(StringRef, SMLoc) { + // Darwin silently ignores the .ident directive. + getParser().EatToEndOfStatement(); + return false; + } bool ParseSectionDirectiveThreadInitFunc(StringRef, SMLoc) { return ParseSectionSwitch("__DATA", "__thread_init", MCSectionMachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS); From ofv at wanadoo.es Tue Mar 8 13:25:00 2011 From: ofv at wanadoo.es (=?utf-8?Q?=C3=93scar_Fuentes?=) Date: Tue, 08 Mar 2011 20:25:00 +0100 Subject: [llvm-commits] [llvm] r127245 - /llvm/trunk/lib/CodeGen/LiveInterval.cpp In-Reply-To: (Jakob Stoklund Olesen's message of "Tue, 8 Mar 2011 11:07:02 -0800") References: <20110308135207.55E7D2A6C12C@llvm.org> Message-ID: <87d3m1v2ib.fsf@wanadoo.es> Jakob Stoklund Olesen writes: >> Author: ofv >> Date: Tue Mar 8 07:52:07 2011 >> New Revision: 127245 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=127245&view=rev >> Log: >> Make a comparator's argument `const'. This fixes the build for MSVC 9. >> >> Modified: >> llvm/trunk/lib/CodeGen/LiveInterval.cpp >> >> Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=127245&r1=127244&r2=127245&view=diff >> ============================================================================== >> --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) >> +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Tue Mar 8 07:52:07 2011 >> @@ -36,7 +36,7 @@ >> bool operator()(SlotIndex A, const LiveRange &B) const { >> return A < B.end; >> } >> - bool operator()(const LiveRange &A, SlotIndex B) const { >> + bool operator()(const LiveRange &A, const SlotIndex B) const { >> return A.end < B; >> } >> }; > > Huh? A const by-value argument looks like a bug to me. What was the error? Ugh! You are right, of course. Mistakes like this happen when you work with an attention-demanding 2 year old jumping around. I'll revert the change ASAP. Do you think that the patch posted by the bug reporter is correct? From ofv at wanadoo.es Tue Mar 8 13:26:21 2011 From: ofv at wanadoo.es (Oscar Fuentes) Date: Tue, 08 Mar 2011 19:26:21 -0000 Subject: [llvm-commits] [llvm] r127260 - /llvm/trunk/lib/CodeGen/LiveInterval.cpp Message-ID: <20110308192621.816A92A6C12C@llvm.org> Author: ofv Date: Tue Mar 8 13:26:21 2011 New Revision: 127260 URL: http://llvm.org/viewvc/llvm-project?rev=127260&view=rev Log: Revert "Make a comparator's argument `const'. This fixes the build for MSVC 9." The "fix" was meaningless. This reverts commit r127245. Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=127260&r1=127259&r2=127260&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Tue Mar 8 13:26:21 2011 @@ -36,7 +36,7 @@ bool operator()(SlotIndex A, const LiveRange &B) const { return A < B.end; } - bool operator()(const LiveRange &A, const SlotIndex B) const { + bool operator()(const LiveRange &A, SlotIndex B) const { return A.end < B; } }; From stoklund at 2pi.dk Tue Mar 8 13:30:34 2011 From: stoklund at 2pi.dk (Jakob Stoklund Olesen) Date: Tue, 8 Mar 2011 11:30:34 -0800 Subject: [llvm-commits] [llvm] r127245 - /llvm/trunk/lib/CodeGen/LiveInterval.cpp In-Reply-To: <87d3m1v2ib.fsf@wanadoo.es> References: <20110308135207.55E7D2A6C12C@llvm.org> <87d3m1v2ib.fsf@wanadoo.es> Message-ID: <9699A7D5-C766-4EF3-BE01-B09C5AE99515@2pi.dk> On Mar 8, 2011, at 11:25 AM, ?scar Fuentes wrote: > Jakob Stoklund Olesen writes: > >>> Author: ofv >>> Date: Tue Mar 8 07:52:07 2011 >>> New Revision: 127245 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=127245&view=rev >>> Log: >>> Make a comparator's argument `const'. This fixes the build for MSVC 9. >>> >>> Modified: >>> llvm/trunk/lib/CodeGen/LiveInterval.cpp >>> >>> Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp >>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=127245&r1=127244&r2=127245&view=diff >>> ============================================================================== >>> --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) >>> +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Tue Mar 8 07:52:07 2011 >>> @@ -36,7 +36,7 @@ >>> bool operator()(SlotIndex A, const LiveRange &B) const { >>> return A < B.end; >>> } >>> - bool operator()(const LiveRange &A, SlotIndex B) const { >>> + bool operator()(const LiveRange &A, const SlotIndex B) const { >>> return A.end < B; >>> } >>> }; >> >> Huh? A const by-value argument looks like a bug to me. What was the error? > > Ugh! You are right, of course. Mistakes like this happen when you work > with an attention-demanding 2 year old jumping around. I'll revert the > change ASAP. > > Do you think that the patch posted by the bug reporter is correct? I've had trouble with using different types to upper_bound and MSVC before. I thought it would be enough to provide the two natural permutations, but if it is actually comparing elements in the array (which is guaranteed to be sorted!), the extra method is needed. I'll apply the patch once you've reverted yours. Thanks, /jakob From stuart at apple.com Tue Mar 8 13:28:23 2011 From: stuart at apple.com (Stuart Hastings) Date: Tue, 08 Mar 2011 19:28:23 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r127261 - in /llvm-gcc-4.2/trunk: build_gcc gcc/Makefile.in Message-ID: <20110308192823.5155D2A6C12C@llvm.org> Author: stuart Date: Tue Mar 8 13:28:23 2011 New Revision: 127261 URL: http://llvm.org/viewvc/llvm-project?rev=127261&view=rev Log: Stop building PPC parts on OSX. Radar 8637926. Modified: llvm-gcc-4.2/trunk/build_gcc llvm-gcc-4.2/trunk/gcc/Makefile.in Modified: llvm-gcc-4.2/trunk/build_gcc URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/build_gcc?rev=127261&r1=127260&r2=127261&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/build_gcc (original) +++ llvm-gcc-4.2/trunk/build_gcc Tue Mar 8 13:28:23 2011 @@ -778,7 +778,8 @@ fi # Remove lto.h from the install directory; clang will supply. -find $DEST_DIR -name lto.h -print | xargs rm || exit 1 +# Also remove ppc_intrinsics.h. Note that this breaks PPC support. +find $DEST_DIR \( -name lto.h -o -name ppc_intrinsics.h \) -delete -print || exit 1 # LLVM LOCAL end Modified: llvm-gcc-4.2/trunk/gcc/Makefile.in URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/Makefile.in?rev=127261&r1=127260&r2=127261&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/Makefile.in (original) +++ llvm-gcc-4.2/trunk/gcc/Makefile.in Tue Mar 8 13:28:23 2011 @@ -1181,14 +1181,13 @@ # If in BUILD_LLVM_INTO_A_DYLIB mode, always link in the x86/ppc backends. # See below for more details. ifdef BUILD_LLVM_INTO_A_DYLIB -LLVMTARGETOBJ := $(sort $(LLVMTARGETOBJ) x86 powerpc arm) +LLVMTARGETOBJ := $(sort $(LLVMTARGETOBJ) x86 arm) ## Target symbols to force linking. This is to ensure that the code generators ## and asm printers actually get linked into libllvmgcc.dylib. LLVMTARGETSYMBOLS := \ _LLVMInitializeARMTarget _LLVMInitializeARMAsmPrinter \ - _LLVMInitializePowerPCTarget _LLVMInitializePowerPCAsmPrinter\ _LLVMInitializeX86Target _LLVMInitializeX86AsmPrinter \ endif From stuart at apple.com Tue Mar 8 13:28:28 2011 From: stuart at apple.com (Stuart Hastings) Date: Tue, 08 Mar 2011 19:28:28 -0000 Subject: [llvm-commits] [llvm] r127262 - /llvm/trunk/utils/buildit/build_llvm Message-ID: <20110308192828.472EF2A6C12D@llvm.org> Author: stuart Date: Tue Mar 8 13:28:28 2011 New Revision: 127262 URL: http://llvm.org/viewvc/llvm-project?rev=127262&view=rev Log: Stop building PPC parts on OSX. Radar 8637926. Modified: llvm/trunk/utils/buildit/build_llvm Modified: llvm/trunk/utils/buildit/build_llvm URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/buildit/build_llvm?rev=127262&r1=127261&r2=127262&view=diff ============================================================================== --- llvm/trunk/utils/buildit/build_llvm (original) +++ llvm/trunk/utils/buildit/build_llvm Tue Mar 8 13:28:28 2011 @@ -132,7 +132,7 @@ configure_opts="--enable-targets=x86 --host=i686-apple-darwin_sim \ --build=i686-apple-darwin10" else - configure_opts="--enable-targets=arm,x86,powerpc,cbe" + configure_opts="--enable-targets=arm,x86,cbe" fi if [ \! -f Makefile.config ]; then @@ -261,7 +261,7 @@ -exec lipo -extract ppc7400 -extract i386 {} -output {} \; else find . -perm 755 -type f \! \( -name '*gccas' -o -name '*gccld' -o -name llvm-config \) \ - -exec lipo -extract ppc7400 -extract i386 -extract x86_64 {} -output {} \; + -exec lipo -extract i386 -extract x86_64 {} -output {} \; fi # The Hello dylib is an example of how to build a pass. From ofv at wanadoo.es Tue Mar 8 13:33:43 2011 From: ofv at wanadoo.es (=?utf-8?Q?=C3=93scar_Fuentes?=) Date: Tue, 08 Mar 2011 20:33:43 +0100 Subject: [llvm-commits] [llvm] r127245 - /llvm/trunk/lib/CodeGen/LiveInterval.cpp In-Reply-To: <9699A7D5-C766-4EF3-BE01-B09C5AE99515@2pi.dk> (Jakob Stoklund Olesen's message of "Tue, 8 Mar 2011 11:30:34 -0800") References: <20110308135207.55E7D2A6C12C@llvm.org> <87d3m1v2ib.fsf@wanadoo.es> <9699A7D5-C766-4EF3-BE01-B09C5AE99515@2pi.dk> Message-ID: <878vwpv23s.fsf@wanadoo.es> Jakob Stoklund Olesen writes: [snip] > I'll apply the patch once you've reverted yours. Reverted. Thanks. From echristo at apple.com Tue Mar 8 13:35:47 2011 From: echristo at apple.com (Eric Christopher) Date: Tue, 08 Mar 2011 19:35:47 -0000 Subject: [llvm-commits] [llvm] r127263 - in /llvm/trunk/lib/CodeGen/SelectionDAG: ScheduleDAGRRList.cpp ScheduleDAGSDNodes.cpp Message-ID: <20110308193547.5B8CD2A6C12C@llvm.org> Author: echristo Date: Tue Mar 8 13:35:47 2011 New Revision: 127263 URL: http://llvm.org/viewvc/llvm-project?rev=127263&view=rev Log: Fix some latent bugs if the nodes are unschedulable. We'd gotten away with this before since none of the register tracking or nightly tests had unschedulable nodes. This should probably be refixed with a special default Node that just returns some "don't touch me" values. Fixes PR9427 Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=127263&r1=127262&r2=127263&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Tue Mar 8 13:35:47 2011 @@ -1785,7 +1785,7 @@ } const SDNode *N = SU->getNode(); - if (!N->isMachineOpcode() || !SU->NumSuccs) + if (!N || !N->isMachineOpcode() || !SU->NumSuccs) return PDiff; unsigned NumDefs = TII->get(N->getMachineOpcode()).getNumDefs(); @@ -1804,6 +1804,9 @@ if (!TracksRegPressure) return; + if (!SU->getNode()) + return; + for (SUnit::pred_iterator I = SU->Preds.begin(), E = SU->Preds.end(); I != E; ++I) { if (I->isCtrl()) @@ -1870,6 +1873,8 @@ return; const SDNode *N = SU->getNode(); + if (!N) return; + if (!N->isMachineOpcode()) { if (N->getOpcode() != ISD::CopyToReg) return; Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp?rev=127263&r1=127262&r2=127263&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp Tue Mar 8 13:35:47 2011 @@ -446,6 +446,10 @@ // Initialize NumNodeDefs for the current Node's opcode. void ScheduleDAGSDNodes::RegDefIter::InitNodeNumDefs() { + // Check for phys reg copy. + if (!Node) + return; + if (!Node->isMachineOpcode()) { if (Node->getOpcode() == ISD::CopyFromReg) NodeNumDefs = 1; From stoklund at 2pi.dk Tue Mar 8 13:37:54 2011 From: stoklund at 2pi.dk (Jakob Stoklund Olesen) Date: Tue, 08 Mar 2011 19:37:54 -0000 Subject: [llvm-commits] [llvm] r127264 - /llvm/trunk/lib/CodeGen/LiveInterval.cpp Message-ID: <20110308193754.971022A6C12C@llvm.org> Author: stoklund Date: Tue Mar 8 13:37:54 2011 New Revision: 127264 URL: http://llvm.org/viewvc/llvm-project?rev=127264&view=rev Log: Fix the build for MSVC 9 whose upper_bound() wants to compare elements in the sorted array. Patch by Olaf Krzikalla! Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=127264&r1=127263&r2=127264&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Tue Mar 8 13:37:54 2011 @@ -39,6 +39,9 @@ bool operator()(const LiveRange &A, SlotIndex B) const { return A.end < B; } + bool operator()(const LiveRange &A, const LiveRange &B) const { + return A.end < B.end; + } }; } From isanbard at gmail.com Tue Mar 8 13:39:35 2011 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 08 Mar 2011 19:39:35 -0000 Subject: [llvm-commits] [llvm] r127265 - /llvm/trunk/test/FrontendC/mmx-inline-asm.c Message-ID: <20110308193935.D75A32A6C12C@llvm.org> Author: void Date: Tue Mar 8 13:39:35 2011 New Revision: 127265 URL: http://llvm.org/viewvc/llvm-project?rev=127265&view=rev Log: Try to fix the compilation error due to type incombatibility. Modified: llvm/trunk/test/FrontendC/mmx-inline-asm.c Modified: llvm/trunk/test/FrontendC/mmx-inline-asm.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC/mmx-inline-asm.c?rev=127265&r1=127264&r2=127265&view=diff ============================================================================== --- llvm/trunk/test/FrontendC/mmx-inline-asm.c (original) +++ llvm/trunk/test/FrontendC/mmx-inline-asm.c Tue Mar 8 13:39:35 2011 @@ -3,10 +3,11 @@ // XTARGET: x86,i386,i686 // #include +#include // CHECK: type { x86_mmx, x86_mmx, x86_mmx, x86_mmx, x86_mmx, x86_mmx, x86_mmx } -void foo(long long fill) { +void foo(int64_t fill) { __m64 vfill = _mm_cvtsi64_m64(fill); __m64 v1, v2, v3, v4, v5, v6, v7; From echristo at apple.com Tue Mar 8 13:49:15 2011 From: echristo at apple.com (Eric Christopher) Date: Tue, 08 Mar 2011 19:49:15 -0000 Subject: [llvm-commits] [llvm] r127266 - /llvm/trunk/test/CodeGen/X86/2011-03-08-Sched-crash.ll Message-ID: <20110308194915.411D42A6C12C@llvm.org> Author: echristo Date: Tue Mar 8 13:49:15 2011 New Revision: 127266 URL: http://llvm.org/viewvc/llvm-project?rev=127266&view=rev Log: Add a testcase for r127263. Added: llvm/trunk/test/CodeGen/X86/2011-03-08-Sched-crash.ll Added: llvm/trunk/test/CodeGen/X86/2011-03-08-Sched-crash.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2011-03-08-Sched-crash.ll?rev=127266&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2011-03-08-Sched-crash.ll (added) +++ llvm/trunk/test/CodeGen/X86/2011-03-08-Sched-crash.ll Tue Mar 8 13:49:15 2011 @@ -0,0 +1,1955 @@ +; RUN: llc < %s +; ModuleID = 'bugpoint-reduced-simplified.bc' +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32" +target triple = "i386-apple-darwin9.0.0" + +%0 = type { %"class.JSC::ExecutablePool"**, i32, i32, %2 } +%1 = type { %"class.js::HashMap, js::SystemAllocPolicy>::Entry"*, i32, i32, %2 } +%2 = type { %"union.js::AlignedStorage<16>::U" } +%3 = type { i16* } +%4 = type { %5 } +%5 = type { %6, %6 } +%6 = type { %struct.JSString* } +%7 = type { %"struct.js::gc::ArenaHeader" } +%8 = type { double } +%9 = type { %7, %10 } +%10 = type { [4072 x %"union.js::gc::ThingOrCell"] } +%11 = type { %"struct.js::Shape"* } +%12 = type { i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*)* } +%13 = type { i32 (%struct.JSContext*, %struct.JSObject*, i32, i32, %"class.js::Value"*)* } +%14 = type { %"class.js::KidsPointer" } +%15 = type { %struct.JSObject* } +%16 = type { %"class.JSC::ExecutablePool"**, i32, i32, %"class.js::Value" } +%17 = type { %"struct.js::VMSideExit"**, i32, i32, %"class.nanojit::Allocator"* } +%18 = type { %"class.js::Value"*, i32, i32, %"class.nanojit::Allocator"* } +%19 = type { %"struct.js::Shape"**, i32, i32, %"class.nanojit::Allocator"* } +%20 = type { %"class.nanojit::CodeList"* } +%21 = type { %"class.nanojit::Allocator"*, i32, %22** } +%22 = type opaque +%23 = type { %"class.nanojit::Allocator"*, i32, %24** } +%24 = type opaque +%25 = type { %"class.nanojit::Allocator"*, i32, %26** } +%26 = type opaque +%27 = type { %"class.nanojit::Allocator"*, i32, %28** } +%28 = type opaque +%29 = type { %30 } +%30 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable::SetOps, js::SystemAllocPolicy>::Entry"* } +%31 = type { i8**, i32, i32, %"class.nanojit::Allocator"* } +%32 = type { %33 } +%33 = type { [4 x i8], i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::ContextAllocPolicy>::Entry, js::HashMap, js::ContextAllocPolicy>::MapHashPolicy, js::ContextAllocPolicy>::Entry"* } +%34 = type { [4 x i8], i32*, i32, i32, %"class.js::Value" } +%35 = type { [4 x i8], i8*, i32, i32, %36 } +%36 = type { %"union.js::AlignedStorage<256>::U" } +%37 = type { %struct.JSScript* } +%38 = type { i16*, i32, i32, %"class.nanojit::Allocator"* } +%39 = type { %40 } +%40 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%41 = type { %42 } +%42 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%43 = type { %44 } +%44 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Entry"* } +%45 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable::Entry, js::HashMap::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%46 = type { i8*, i8*, i8* } +%47 = type { %48 } +%48 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Entry"* } +%49 = type { %50 } +%50 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%51 = type { %struct.JSCompartment**, i32, i32, %"class.js::Value" } +%52 = type { %53 } +%53 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable::SetOps, js::SystemAllocPolicy>::Entry"* } +%54 = type { %55 } +%55 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%56 = type { %57 } +%57 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable::Entry, js::HashMap::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%58 = type { i32 (%struct.JSContext*, i32, %"class.js::Value"*)*, %"struct.js::Class"*, %struct.JSNativeTraceInfo* } +%59 = type { [18 x i32] } +%60 = type { i8***, i32, i32, %61 } +%61 = type { %"union.js::AlignedStorage<64>::U" } +%62 = type { %63 } +%63 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%64 = type { %65 } +%65 = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable::SetOps, js::SystemAllocPolicy>::Entry"* } +%66 = type { %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom* } +%67 = type { %"struct.js::SlotMap::SlotInfo"*, i32, i32, %"class.nanojit::Allocator"* } +%68 = type { %struct.JSXMLElemVar } +%69 = type { [36 x i8], [38 x i8], [72 x i8] } +%70 = type { [41 x i8] } +%71 = type { [38 x i8] } +%72 = type { [7 x i8], [15 x i8] } +%73 = type { [8 x i8], [12 x i8], [16 x i8], [21 x i8], [26 x i8], [31 x i8], [36 x i8], [41 x i8], [46 x i8] } +%74 = type { [7 x i8], [7 x i8], [7 x i8], [7 x i8], [7 x i8], [7 x i8], [7 x i8], [7 x i8], [7 x i8] } +%75 = type { [4 x i8] } +%76 = type { [5 x i8] } +%77 = type { i32, void ()* } +%78 = type { i8*, i32, i32, %"class.nanojit::Allocator"* } +%79 = type { i32*, i32, i32, %"class.nanojit::Allocator"* } +%80 = type { i32, i1 } +%class.DSTOffsetCache = type { i64, i64, i64, i64, i64, i64 } +%"class.JSC::ExecutableAllocator" = type { %0 } +%"class.JSC::ExecutablePool" = type { i32, i8, i32, i8*, i8*, %1 } +%"class.JSC::MacroAssemblerCodePtr" = type { i8* } +%"class.JSC::MacroAssemblerCodeRef" = type { %"class.JSC::MacroAssemblerCodePtr", %"class.JSC::ExecutablePool"*, i32 } +%"class.avmplus::AvmConsole" = type { i8 } +%"class.avmplus::AvmCore" = type { %"class.avmplus::AvmInterpreter", %"class.avmplus::AvmConsole" } +%"class.avmplus::AvmInterpreter" = type { %"class.avmplus::AvmConsole", %"class.avmplus::AvmConsole"* } +%"class.avmplus::BitSet" = type { i32, i32* } +%"class.js::AutoGCRooter" = type { %"class.js::AutoGCRooter"*, i32, %struct.JSContext* } +%"class.js::AutoIdRooter" = type { [12 x i8], i32 } +%"class.js::AutoIdVector" = type { [60 x i8] } +%"class.js::AutoValueRooter" = type { [12 x i8], [4 x i8], %"class.js::Value" } +%"class.js::Bindings" = type { %"struct.js::Shape"*, i16, i16, i16 } +%"class.js::BoxArg" = type { %"class.js::TraceRecorder"*, %"struct.js::tjit::Address" } +%"class.js::CaptureTypesVisitor" = type { %struct.JSContext*, i8*, i8*, %"class.js::Oracle"* } +%"class.js::ClearSlotsVisitor" = type { %"class.js::Tracker"* } +%"class.js::ContextAllocPolicy" = type { %struct.JSContext* } +%"class.js::DefaultSlotMap" = type { [28 x i8] } +%"class.js::DetermineTypesVisitor" = type { %"class.js::TraceRecorder"*, i8* } +%"class.js::DtoaCache" = type { double, i32, %struct.JSString* } +%"class.js::FlushNativeStackFrameVisitor" = type { %struct.JSContext*, i8*, i8*, double* } +%"class.js::FrameInfoCache" = type { %29, %"class.js::VMAllocator"* } +%"class.js::GCChunkAllocator" = type { i32 (...)** } +%"class.js::GCHelperThread" = type { %struct.PRThread*, %struct.PRCondVar*, %struct.PRCondVar*, i8, i8, %60, i8**, i8** } +%"class.js::HashMap" = type { %45 } +%"class.js::HashMap, js::ContextAllocPolicy>::Entry" = type { %"class.nanojit::LIns"*, %struct.JSObject* } +%"class.js::HashMap, js::SystemAllocPolicy>::Entry" = type { i8*, %"class.js::LoopProfile"* } +%"class.js::HashMap, js::SystemAllocPolicy>::Entry" = type { i8*, i32 } +%"class.js::HashMap, js::SystemAllocPolicy>::Entry" = type { i8*, %struct.JSThread* } +%"class.js::HashSet" = type { %"class.js::detail::HashTable" } +%"class.js::ImportBoxedStackSlotVisitor" = type { %"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, i32, i8*, %struct.JSStackFrame* } +%"class.js::KidsPointer" = type { i32 } +%"class.js::LoopProfile" = type { %"struct.js::TraceMonitor"*, %struct.JSScript*, %struct.JSStackFrame*, i8*, i8*, i32, i8, i8, i8, i8, i8, [11 x i32], i32, [11 x i32], i32, double, double, i8, i8, [8 x %"struct.js::LoopProfile::InnerLoop"], i32, [8 x %"struct.js::LoopProfile::InnerLoop"], i32, [6 x %"struct.js::LoopProfile::StackValue"], i32 } +%"class.js::MathCache" = type { [4096 x %"struct.js::MathCache::Entry"] } +%"class.js::NativeIterCache" = type { [256 x %struct.JSObject*], %struct.JSObject* } +%"class.js::Oracle" = type { %"class.avmplus::BitSet", %"class.avmplus::BitSet", %"class.avmplus::BitSet", %"class.avmplus::BitSet" } +%"class.js::PropertyCache" = type { [4096 x %"struct.js::PropertyCacheEntry"], i32 } +%"class.js::PropertyTree" = type { %struct.JSCompartment*, %struct.JSArenaPool, %"struct.js::Shape"* } +%"class.js::Queue" = type { %"struct.js::TreeFragment"**, i32, i32, %"class.nanojit::Allocator"* } +%"class.js::SlotMap" = type { i32 (...)**, %"class.js::TraceRecorder"*, %struct.JSContext*, %67 } +%"class.js::StackSegment" = type { %struct.JSContext*, %"class.js::StackSegment"*, %"class.js::StackSegment"*, %struct.JSStackFrame*, %struct.JSFrameRegs*, %struct.JSObject*, i8, i8* } +%"class.js::StackSpace" = type { %"class.js::Value"*, %"class.js::Value"*, %"class.js::StackSegment"*, %"class.js::Value"* } +%"class.js::TraceRecorder" = type { %struct.JSContext*, %"struct.js::TraceMonitor"*, %"class.js::Oracle"*, %"class.js::VMFragment"*, %"struct.js::TreeFragment"*, %struct.JSObject*, %struct.JSScript*, i8*, i32, %"struct.js::VMSideExit"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, i32, i32, %"class.js::TypeMap", %"class.nanojit::LirBuffer"*, %"struct.js::VMAllocator::Mark", i32, %"class.js::Tracker", %"class.js::Tracker", %"class.js::Value"*, i32, %struct.JSAtom**, %"class.js::Value"*, %"class.nanojit::LIns"*, %31, i8, %"class.js::Queue", %32, i32, i8, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %struct.JSSpecializedNative*, %"class.js::Value"*, %"class.nanojit::LIns"*, %34, i8, %struct.JSSpecializedNative, %35, %"class.js::tjit::Writer" } +%"class.js::Tracker" = type { %"struct.js::Tracker::TrackerPage"* } +%"class.js::TypeMap" = type { [16 x i8], %"class.js::Oracle"* } +%"class.js::VMAllocator" = type { [12 x i8], i8, i32, i8*, i32, i32 } +%"class.js::VMFragment" = type { [28 x i8], %"struct.js::TreeFragment"* } +%"class.js::Value" = type { %"union.js::AlignedStorage<1>::U" } +%"class.js::Vector" = type { %struct.JSGenerator**, i32, i32, %"class.js::Value" } +%"class.js::detail::HashTable" = type { i32, i32, i32, i32, i32, %"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Entry"* } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Entry" = type opaque +%"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::AddPtr" = type { [4 x i8], i32 } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Entry" = type { i32, %struct.JSScript* } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Ptr" = type { %"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Entry"* } +%"class.js::detail::HashTable::SetOps, js::SystemAllocPolicy>::Entry" = type opaque +%"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Entry" = type opaque +%"class.js::detail::HashTable::SetOps, js::SystemAllocPolicy>::Entry" = type { i32, %"struct.js::FrameInfo"* } +%"class.js::detail::HashTable::SetOps, js::SystemAllocPolicy>::Ptr" = type { %"class.js::detail::HashTable::SetOps, js::SystemAllocPolicy>::Entry"* } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry" = type opaque +%"class.js::detail::HashTable::Entry, js::HashMap::MapHashPolicy, js::SystemAllocPolicy>::Entry" = type opaque +%"class.js::detail::HashTable, js::ContextAllocPolicy>::Entry, js::HashMap, js::ContextAllocPolicy>::MapHashPolicy, js::ContextAllocPolicy>::Entry" = type { i32, %"class.js::HashMap, js::ContextAllocPolicy>::Entry" } +%"class.js::detail::HashTable, js::ContextAllocPolicy>::Entry, js::HashMap, js::ContextAllocPolicy>::MapHashPolicy, js::ContextAllocPolicy>::Ptr" = type { %"class.js::detail::HashTable, js::ContextAllocPolicy>::Entry, js::HashMap, js::ContextAllocPolicy>::MapHashPolicy, js::ContextAllocPolicy>::Entry"* } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry" = type { i32, %"class.js::HashMap, js::SystemAllocPolicy>::Entry" } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Ptr" = type { %"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry" = type { i32, %"class.js::HashMap, js::SystemAllocPolicy>::Entry" } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Ptr" = type { %"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry"* } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry" = type { i32, %"class.js::HashMap, js::SystemAllocPolicy>::Entry" } +%"class.js::detail::HashTable, js::SystemAllocPolicy>::Entry, js::HashMap, js::SystemAllocPolicy>::MapHashPolicy, js::SystemAllocPolicy>::Entry" = type opaque +%"class.js::detail::HashTable::Entry, js::HashMap::MapHashPolicy, js::SystemAllocPolicy>::Entry" = type opaque +%"class.js::detail::HashTable::SetOps, js::SystemAllocPolicy>::Entry" = type opaque +%"class.js::mjit::JaegerCompartment" = type { %"class.JSC::ExecutableAllocator"*, %"struct.js::mjit::Trampolines", %"struct.js::VMFrame"* } +%"class.js::tjit::Writer" = type { %"class.nanojit::Allocator"*, %"class.nanojit::LirBuffer"*, %"class.nanojit::LirFilter"*, %"class.nanojit::CseFilter"*, %"class.nanojit::LogControl"* } +%"class.nanojit::AR" = type { i32, [4096 x %"class.nanojit::LIns"*] } +%"class.nanojit::Allocator" = type { %"class.nanojit::Allocator::Chunk"*, i8*, i8* } +%"class.nanojit::Allocator::Chunk" = type { %"class.nanojit::Allocator::Chunk"*, [1 x i64] } +%"class.nanojit::Assembler" = type { %"class.nanojit::Allocator"*, %"class.nanojit::CodeAlloc"*, %"class.nanojit::Allocator"*, %"class.nanojit::Fragment"*, %21, %23, %"class.nanojit::LabelStateMap", %"class.js::GCChunkAllocator"*, %27, %"class.nanojit::CodeList"*, i8, [3 x i8], i8*, i8*, i8*, i8*, i8*, i8*, i8*, i32, %"class.nanojit::LIns"*, %"class.nanojit::AR", %"class.nanojit::RegAlloc", i32, %"struct.nanojit::Config"* } +%"class.nanojit::BitSet" = type { %"class.nanojit::Allocator"*, i32, i64* } +%"class.nanojit::CodeAlloc" = type { %"class.nanojit::CodeList"*, %"class.nanojit::CodeList"*, i32, i32, i32 } +%"class.nanojit::CodeList" = type { %"class.nanojit::CodeList"*, %"class.nanojit::CodeList"*, %"class.nanojit::CodeList"*, i8, i8, %20, [1 x i8] } +%"class.nanojit::CseFilter" = type { [8 x i8], [8 x %"class.nanojit::LIns"**], [8 x i32], [8 x i32], [8 x %struct.JSObjectMap], i8, i8, i8, i8, [34 x %"class.nanojit::LIns"**], [34 x i32], [34 x i32], i32, %"class.nanojit::Allocator"*, %"class.nanojit::HashMap", i8, i8 } +%"class.nanojit::Fragment" = type { %"class.nanojit::LirBuffer"*, %"class.nanojit::LIns"*, i8*, i32, i8*, i8*, i32 } +%"class.nanojit::HashMap" = type { %"class.nanojit::Allocator"*, i32, %"class.nanojit::Seq"** } +%"class.nanojit::LIns" = type { %"class.JSC::MacroAssemblerCodePtr" } +%"class.nanojit::LInsC" = type { %"class.nanojit::LIns"**, %"struct.nanojit::CallInfo"*, %"class.nanojit::LIns" } +%"class.nanojit::LInsI" = type { i32, %"class.nanojit::LIns" } +%"class.nanojit::LInsOp2" = type { %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns" } +%"class.nanojit::LInsOp3" = type { %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns" } +%"class.nanojit::LInsQorD" = type { i32, i32, %"class.nanojit::LIns" } +%"class.nanojit::LInsSt" = type { i16, i8, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns" } +%"class.nanojit::LabelStateMap" = type { %"class.nanojit::Allocator"*, %25 } +%"class.nanojit::LirBuffer" = type { %"class.js::KidsPointer", i32, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, [4 x %"class.nanojit::LIns"*], %"class.nanojit::Allocator"*, i32, i32 } +%"class.nanojit::LirFilter" = type { i32 (...)**, %"class.nanojit::LirFilter"* } +%"class.nanojit::LogControl" = type { i32 (...)**, i32 } +%"class.nanojit::RegAlloc" = type { [17 x %"class.nanojit::LIns"*], [17 x i32], i32, i32, i32 } +%"class.nanojit::Seq" = type opaque +%"class.nanojit::StackFilter" = type { [8 x i8], %"class.nanojit::LIns"*, %"class.nanojit::BitSet", i32 } +%struct.DtoaState = type opaque +%struct.JSArena = type { %struct.JSArena*, i32, i32, i32 } +%struct.JSArenaPool = type { %struct.JSArena, %struct.JSArena*, i32, i32, i32* } +%struct.JSArgumentFormatMap = type { i8*, i32, i32 (%struct.JSContext*, i8*, i32, i64**, i8**)*, %struct.JSArgumentFormatMap* } +%struct.JSAtom = type { [16 x i8] } +%struct.JSAtomMap = type { %struct.JSAtom**, i32 } +%struct.JSAtomState = type { %64, %struct.JSThinLock, %struct.JSAtom*, [2 x %struct.JSAtom*], [8 x %struct.JSAtom*], %struct.JSAtom*, [39 x %struct.JSAtom*], %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom* , %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %struct.JSAtom*, %66 } +%struct.JSCListStr = type { %struct.JSCListStr*, %struct.JSCListStr* } +%struct.JSCodeSpec = type { i8, i8, i8, i8, i32 } +%struct.JSCompartment = type { %struct.JSRuntime*, %struct.JSPrincipals*, %"struct.js::gc::Chunk"*, [11 x %"struct.js::gc::ArenaList"], %"struct.js::gc::FreeLists", i32, i32, i32, %"struct.js::TraceMonitor", [64 x %struct.JSScript*], i8*, i8, %"class.js::HashMap", %"class.js::mjit::JaegerCompartment"*, %"class.js::PropertyTree", %"struct.js::EmptyShape"*, %"struct.js::EmptyShape"*, %"struct.js::EmptyShape"*, %"struct.js::EmptyShape"*, %"struct.js::EmptyShape"*, %"struct.js::EmptyShape"*, %47, i8, %struct.JSCListStr, %"class.JSC::ExecutableAllocator"*, %"class.js::NativeIterCache", %49, %"class.js::DtoaCache", %"class.js::MathCache"*, i8, %39 } +%struct.JSContext = type { %struct.JSCListStr, i32, i32, i8, i32, %"class.js::Value", i32, %struct.JSLocaleCallbacks*, %struct.JSDHashTable*, i8, i32, i32, %struct.JSRuntime*, %struct.JSCompartment*, %struct.JSFrameRegs*, %struct.JSArenaPool, %struct.JSArenaPool, %struct.JSObject*, %struct.JSSharpObjectMap, %"class.js::HashSet", %struct.JSArgumentFormatMap*, i8*, void (%struct.JSContext*, i8*, %struct.JSErrorReport*)*, i32 (%struct.JSContext*)*, i32, i8*, i8*, %"class.js::StackSegment"*, %struct.JSThread*, i32, %struct.JSCListStr, %"class.js::AutoGCRooter"*, %struct.JSDebugHooks*, %struct.JSSecurityCallbacks*, i32, i64, [4 x i8], %"class.js::Value", i8, i8, i8, %class.DSTOffsetCache, %struct.JSObject*, %"class.js::Vector", %"class.js::GCHelperThread"* } +%struct.JSDHashTable = type { %struct.JSDHashTableOps*, i8*, i16, i8, i8, i32, i32, i32, i32, i8* } +%struct.JSDHashTableOps = type { i8* (%struct.JSDHashTable*, i32)*, void (%struct.JSDHashTable*, i8*)*, i32 (%struct.JSDHashTable*, i8*)*, i32 (%struct.JSDHashTable*, %"class.js::KidsPointer"*, i8*)*, void (%struct.JSDHashTable*, %"class.js::KidsPointer"*, %"class.js::KidsPointer"*)*, void (%struct.JSDHashTable*, %"class.js::KidsPointer"*)*, void (%struct.JSDHashTable*)*, i32 (%struct.JSDHashTable*, %"class.js::KidsPointer"*, i8*)* } +%struct.JSDebugHooks = type { i32 (%struct.JSContext*, %struct.JSScript*, i8*, i64*, i8*)*, i8*, void (%struct.JSContext*, i8*, i32, %struct.JSScript*, %struct.JSFunction*, i8*)*, i8*, void (%struct.JSContext*, %struct.JSScript*, i8*)*, i8*, i32 (%struct.JSContext*, %struct.JSScript*, i8*, i64*, i8*)*, i8*, void (i8*, i32, i16*, i32, i8**, i8*)*, i8*, i8* (%struct.JSContext*, %struct.JSStackFrame*, i32, i32*, i8*)*, i8*, i8* (%struct.JSContext*, %struct.JSStackFrame*, i32, i32*, i8*)*, i8*, i32 (%struct.JSContext*, %struct.JSScript*, i8*, i64*, i8*)*, i8*, i32 (%struct.JSContext*, i8*, %struct.JSErrorReport*, i8*)*, i8* } +%struct.JSErrorFormatString = type { i8*, i16, i16 } +%struct.JSErrorReport = type { i8*, i32, i8*, i8*, i16*, i16*, i32, i32, i16*, i16** } +%struct.JSFatLock = type opaque +%struct.JSFrameRegs = type { %"class.js::Value"*, i8*, %struct.JSStackFrame* } +%struct.JSFunction = type { [56 x i8], i16, i16, %"union.JSFunction::U", %struct.JSAtom*, [4 x i8] } +%struct.JSGSNCache = type { i8*, %struct.JSDHashTable } +%struct.JSGenerator = type { %struct.JSObject*, i32, %struct.JSFrameRegs, %struct.JSObject*, %struct.JSStackFrame*, [4 x i8], [1 x %"class.js::Value"] } +%struct.JSHashAllocOps = type { i8* (i8*, i32)*, void (i8*, i8*, i32)*, %struct.JSHashEntry* (i8*, i8*)*, void (i8*, %struct.JSHashEntry*, i32)* } +%struct.JSHashEntry = type { %struct.JSHashEntry*, i32, i8*, i8* } +%struct.JSHashTable = type { %struct.JSHashEntry**, i32, i32, i32 (i8*)*, i32 (i8*, i8*)*, i32 (i8*, i8*)*, %struct.JSHashAllocOps*, i8* } +%struct.JSLocaleCallbacks = type { i32 (%struct.JSContext*, %struct.JSString*, i64*)*, i32 (%struct.JSContext*, %struct.JSString*, i64*)*, i32 (%struct.JSContext*, %struct.JSString*, %struct.JSString*, i64*)*, i32 (%struct.JSContext*, i8*, i64*)*, %struct.JSErrorFormatString* (i8*, i8*, i32)* } +%struct.JSNativeTraceInfo = type { i32 (%struct.JSContext*, i32, %"class.js::Value"*)*, %struct.JSSpecializedNative* } +%struct.JSObject = type { %11, %"struct.js::Class"*, i32, i32, %"struct.js::EmptyShape"**, %struct.JSObject*, %struct.JSObject*, i8*, i32, %"class.js::Value"* } +%struct.JSObjectMap = type { i32, i32 } +%struct.JSPendingProxyOperation = type { %struct.JSPendingProxyOperation*, %struct.JSObject* } +%struct.JSPrincipals = type { i8*, i8* (%struct.JSContext*, %struct.JSPrincipals*)*, i32 (%struct.JSContext*, %struct.JSPrincipals*)*, i32, void (%struct.JSContext*, %struct.JSPrincipals*)*, i32 (%struct.JSPrincipals*, %struct.JSPrincipals*)* } +%struct.JSProperty = type opaque +%struct.JSRuntime = type { %struct.JSCompartment*, i8, %51, i32, i32 (%struct.JSContext*, i32)*, i32 (%struct.JSContext*, %struct.JSCompartment*, i32)*, void (i8*, i32)*, i8*, i32, %52, %54, %56, i32, i32, i32, i32, i32, i32, i32, i32, i32, %"struct.js::GCMarker"*, i32, i64, i32, i8, %struct.JSCompartment*, %struct.JSCompartment*, i8, i8, i8, i8, i32 (%struct.JSContext*, i32)*, i32, %"class.js::GCChunkAllocator"*, void (%struct.JSTracer*, i8*)*, i8*, %"class.js::Value", %"class.js::Value", %"class.js::Value", %struct.JSAtom*, %struct.JSCListStr, %struct.JSDebugHooks, i32, %struct.JSCListStr, %struct.JSCListStr, i8*, %struct.PRLock*, %struct.PRCondVar*, %struct.PRCondVar*, i32, %struct.JSThread*, %"class.js::GCHelperThread", %struct.PRLock*, %struct.PRCondVar*, %struct.PRLock*, %62, i32, %struct.JSSecurityCallbacks*, %struct.JSStructuredCloneCallbacks*, i32, %struct.JSHashTable*, %struct.JSCListStr, %struct.PRLock*, i8*, i8*, i8*, %struct.JSObject*, %struct.JSObject*, i32, i3 2, %struct.JSAtomState, %struct.JSObject* (%struct.JSContext*, %struct.JSObject*, %struct.JSObject*, %struct.JSObject*, i32)*, %struct.JSObject* (%struct.JSContext*, %struct.JSObject*, %struct.JSObject*, i32)*, i32, i32, [4 x i8] } +%struct.JSScript = type { %struct.JSCListStr, i8*, i32, i16, i32, i16, i8, i8, i8, i8, i8, i8, i8, i8, i8*, %struct.JSAtomMap, %struct.JSCompartment*, i8*, i32, i16, i16, i16, i16, %"class.js::Bindings", %struct.JSPrincipals*, %15, i32*, i8*, i8*, %"struct.js::mjit::JITScript"*, %"struct.js::mjit::JITScript"* } +%struct.JSSecurityCallbacks = type { i32 (%struct.JSContext*, %struct.JSObject*, i32, i32, i64*)*, i32 (%struct.JSXDRState*, %struct.JSPrincipals**)*, %struct.JSPrincipals* (%struct.JSContext*, %struct.JSObject*)*, i32 (%struct.JSContext*)* } +%struct.JSSharpObjectMap = type { i32, i32, %struct.JSHashTable* } +%struct.JSSpecializedNative = type { %"struct.nanojit::CallInfo"*, i8*, i8*, i32 } +%struct.JSStackFrame = type { i32, %37, %"class.js::KidsPointer", %struct.JSObject*, %struct.JSStackFrame*, i8*, %"class.js::Value", i8*, i8*, i8*, i8* } +%struct.JSString = type { i32, %3, %4 } +%struct.JSStructuredCloneCallbacks = type { %struct.JSObject* (%struct.JSContext*, %struct.JSStructuredCloneReader*, i32, i32, i8*)*, i32 (%struct.JSContext*, %struct.JSStructuredCloneWriter*, %struct.JSObject*, i8*)*, void (%struct.JSContext*, i32)* } +%struct.JSStructuredCloneReader = type opaque +%struct.JSStructuredCloneWriter = type opaque +%struct.JSThinLock = type { i32, %struct.JSFatLock* } +%struct.JSThread = type { %struct.JSCListStr, i8*, i32, %struct.JSThreadData } +%struct.JSThreadData = type { i32, %struct.JSCompartment*, %struct.JSCompartment*, %struct.JSCompartment*, i32, %"class.js::StackSpace", i8, %struct.JSGSNCache, %"class.js::PropertyCache", i32, %struct.DtoaState*, i32*, %struct.JSPendingProxyOperation*, %"struct.js::ConservativeGCThreadData" } +%struct.JSTracer = type { %struct.JSContext*, void (%struct.JSTracer*, i8*, i32)*, void (%struct.JSTracer*, i8*, i32)*, i8*, i32 } +%struct.JSUpvarArray = type { %"class.js::KidsPointer"*, i32 } +%struct.JSXDRState = type opaque +%struct.JSXML = type { %struct.JSObject*, i8*, %struct.JSXML*, %struct.JSObject*, i32, i32, %68 } +%struct.JSXMLArray = type { i32, i32, i8**, %struct.JSXMLArrayCursor* } +%struct.JSXMLArrayCursor = type { %struct.JSXMLArray*, i32, %struct.JSXMLArrayCursor*, %struct.JSXMLArrayCursor**, i8* } +%struct.JSXMLElemVar = type { %struct.JSXMLArray, %struct.JSXMLArray, %struct.JSXMLArray } +%struct.PRCondVar = type opaque +%struct.PRLock = type opaque +%struct.PRThread = type opaque +%struct.anon = type { [36 x i8], [38 x i8] } +%"struct.js::ArgumentsData" = type { %"class.js::Value", [1 x %"class.js::Value"] } +%"struct.js::Class" = type { i8*, i32, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, i32, %"class.js::Value"*)*, i32 (%struct.JSContext*, %struct.JSObject*)*, i32 (%struct.JSContext*, %struct.JSObject*, i32)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*)*, void (%struct.JSContext*, %struct.JSObject*)*, void ()*, i32 (%struct.JSContext*, %struct.JSObject*, i32, i32, %"class.js::Value"*)*, i32 (%struct.JSContext*, i32, %"class.js::Value"*)*, i32 (%struct.JSContext*, i32, %"class.js::Value"*)*, i32 (%struct.JSXDRState*, %struct.JSObject**)*, i32 (%struct.JSContext*, %struct.JSObject*, %"class.js::Value"*, i32*)*, i32 (%struct.JSContext*, %struct.JSObject*, i8*)*, %"struct.js::ClassExtension", %"struct.js::ObjectOps", [8 x i8] } +%"struct.js::ClassExtension" = type { i32 (%struct.JSContext*, %struct.JSObject*, %"class.js::Value"*, i32*)*, %struct.JSObject* (%struct.JSContext*, %struct.JSObject*)*, %struct.JSObject* (%struct.JSContext*, %struct.JSObject*)*, %struct.JSObject* (%struct.JSContext*, %struct.JSObject*, i32)*, i8* } +%"struct.js::ConservativeGCThreadData" = type { i32*, %59, i32 } +%"struct.js::CountSlotsVisitor" = type { i32, i8, i8* } +%"struct.js::EmptyShape" = type { [40 x i8] } +%"struct.js::FrameInfo" = type { %struct.JSObject*, i8*, i8*, i32, i32, i32, i32 } +%"struct.js::GCMarker" = type { [20 x i8], i32, i32, %9* } +%"struct.js::GlobalState" = type { %struct.JSObject*, i32, %38* } +%"struct.js::LinkableFragment" = type { [32 x i8], i32, %"class.js::TypeMap", i32, i32, %38* } +%"struct.js::LoopProfile::InnerLoop" = type { %struct.JSStackFrame*, i8*, i8*, i32 } +%"struct.js::LoopProfile::StackValue" = type { i8, i8, i32 } +%"struct.js::MathCache::Entry" = type { double, double (double)*, double } +%"struct.js::ObjectOps" = type { i32 (%struct.JSContext*, %struct.JSObject*, i32, %struct.JSObject**, %struct.JSProperty**)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, i32, %"class.js::Value"*)*, i32)*, i32 (%struct.JSContext*, %struct.JSObject*, %struct.JSObject*, i32, %"class.js::Value"*)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*, i32)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, i32*)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, i32*)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*, i32)*, i32 (%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*, i32*)*, i32 (%struct.JSContext*, %struct.JSObject*)*, void (%struct.JSTracer*, %struct.JSObject*)*, i32 (%struct.JSContext*, %struct.JSObject*, i8*, %"class.js::AutoIdVector"*)*, %struct.JSObject* (%struct.JS Context*, %struct.JSObject*)*, void (%struct.JSContext*, %struct.JSObject*)* } +%"struct.js::PICTable" = type { [32 x %"struct.js::PICTableEntry"], i32 } +%"struct.js::PICTableEntry" = type { i32, i32, i32 } +%"struct.js::PropertyCacheEntry" = type { i8*, i32, i32, %"class.js::KidsPointer" } +%"struct.js::PropertyTable" = type { i32, i32, i32, i32, %"struct.js::Shape"** } +%"struct.js::Shape" = type { [8 x i8], %"class.js::KidsPointer", i32, %12, %13, i32, i8, i8, i16, %"struct.js::Shape"*, %14 } +%"struct.js::SlotMap::SlotInfo" = type { i8*, i8, i32, i8 } +%"struct.js::TraceMonitor" = type { %struct.JSContext*, %"struct.js::TracerState"*, %"struct.js::VMSideExit"*, i32, %"struct.js::TraceNativeStorage"*, %"class.js::VMAllocator"*, %"class.js::VMAllocator"*, %"class.js::VMAllocator"*, %"class.nanojit::CodeAlloc"*, %"class.nanojit::Assembler"*, %"class.js::FrameInfoCache"*, i32, %"class.js::Oracle"*, %"class.js::TraceRecorder"*, %"class.js::LoopProfile"*, [4 x %"struct.js::GlobalState"], [512 x %"struct.js::TreeFragment"*], %39*, %41*, i32, i32, %"class.js::TypeMap"*, %43 } +%"struct.js::TraceNativeStorage" = type { [8193 x double], [500 x %"struct.js::FrameInfo"*] } +%"struct.js::TraceRecorder::NameResult" = type { i8, [7 x i8], %"class.js::Value", %struct.JSObject*, %"class.nanojit::LIns"*, %"struct.js::Shape"*, [4 x i8] } +%"struct.js::TracerState" = type { %struct.JSContext*, %"struct.js::TraceMonitor"*, double*, double*, double*, %"struct.js::FrameInfo"**, i8*, %"struct.js::FrameInfo"**, i8*, %"struct.js::VMSideExit"*, %"struct.js::VMSideExit"*, i8*, %"struct.js::VMSideExit"*, %"struct.js::TreeFragment"*, i32*, %"struct.js::VMSideExit"**, %"struct.js::VMSideExit"*, i64, %"struct.js::TracerState"*, i32, double*, i32, %"class.js::Value"* } +%"struct.js::Tracker::TrackerPage" = type { %"struct.js::Tracker::TrackerPage"*, i32, [1024 x %"class.nanojit::LIns"*] } +%"struct.js::TreeFragment" = type { [68 x i8], %"struct.js::TreeFragment"*, %"struct.js::TreeFragment"*, %"struct.js::TreeFragment"*, %struct.JSObject*, i32, i32, %"class.js::Queue", %"class.js::Queue", %struct.JSScript*, %"struct.js::UnstableExit"*, %17, i32, i32, %18, %19, i32, i32, i32 } +%"struct.js::TypedArray" = type { %"class.js::HashMap, js::SystemAllocPolicy>::Entry"*, %struct.JSObject*, i32, i32, i32, i32, i8* } +%"struct.js::UnstableExit" = type { %"class.js::VMFragment"*, %"struct.js::VMSideExit"*, %"struct.js::UnstableExit"* } +%"struct.js::VMAllocator::Mark" = type { %"class.js::VMAllocator"*, i8, %"class.nanojit::Allocator::Chunk"*, i8*, i8*, i32 } +%"struct.js::VMFrame" = type { %"union.js::VMFrame::Arguments", %"struct.js::VMFrame"*, i8*, %struct.JSFrameRegs, %struct.JSContext*, %"class.js::Value"*, %struct.JSStackFrame*, i8*, i8*, i8*, i8*, i8* } +%"struct.js::VMSideExit" = type { [16 x i8], i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32 } +%"struct.js::gc::Arena" = type { %7, %"struct.js::gc::Things" } +%"struct.js::gc::ArenaBitmap" = type { [16 x i32] } +%"struct.js::gc::ArenaHeader" = type { %struct.JSCompartment*, %"struct.js::gc::Arena"*, %"struct.js::gc::FreeCell"*, i32, i8, i32 } +%"struct.js::gc::ArenaList" = type { %"struct.js::gc::Arena"*, %"struct.js::gc::Arena"* } +%"struct.js::gc::Chunk" = type { [251 x %"struct.js::gc::Arena"], [251 x %"struct.js::gc::ArenaBitmap"], [251 x %"struct.js::gc::MarkingDelay"], %"struct.js::gc::ChunkInfo" } +%"struct.js::gc::ChunkInfo" = type { %"struct.js::gc::Chunk"*, %struct.JSRuntime*, %"struct.js::gc::EmptyArenaLists", i32, i32 } +%"struct.js::gc::EmptyArenaLists" = type { %"struct.js::gc::Arena"*, [11 x %"struct.js::gc::Arena"*] } +%"struct.js::gc::FreeCell" = type { %8 } +%"struct.js::gc::FreeLists" = type { [11 x %"struct.js::gc::FreeCell"**] } +%"struct.js::gc::MarkingDelay" = type { %9*, i32, i32 } +%"struct.js::gc::Things" = type { [509 x %"union.js::gc::ThingOrCell"] } +%"struct.js::mjit::JITScript" = type { %"class.JSC::MacroAssemblerCodeRef", i8*, i8*, i8*, [4 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, %16 } +%"struct.js::mjit::Trampolines" = type { void ()*, %"class.JSC::ExecutablePool"* } +%"struct.js::tjit::Address" = type { %"class.nanojit::LIns"*, i32, i32 } +%"struct.nanojit::CallInfo" = type { i32, [4 x i8], i32 } +%"struct.nanojit::Config" = type { i8, i8, i8, i8 } +%"struct.nanojit::GuardRecord" = type { i8*, %"struct.nanojit::GuardRecord"*, %"struct.nanojit::SideExit"* } +%"struct.nanojit::Interval" = type { i64, i64, i8 } +%"struct.nanojit::SideExit" = type { %"struct.nanojit::GuardRecord"*, %"class.nanojit::Fragment"*, %"class.nanojit::Fragment"*, %"struct.nanojit::SwitchInfo"* } +%"struct.nanojit::SwitchInfo" = type { i8**, i32, i32 } +%"union.JSFunction::U" = type { %58 } +%"union.js::AlignedStorage<16>::U" = type { i64, [8 x i8] } +%"union.js::AlignedStorage<1>::U" = type { i64 } +%"union.js::AlignedStorage<256>::U" = type { i64, [248 x i8] } +%"union.js::AlignedStorage<64>::U" = type { i64, [56 x i8] } +%"union.js::VMFrame::Arguments" = type { %46 } +%"union.js::gc::ThingOrCell" = type { %"struct.js::gc::FreeCell" } + + at _ZN7nanojitL9SavedRegsE = external global i32, align 4 + at _ZN7nanojitL7XmmRegsE = external global i32, align 4 + at _ZN7nanojitL7x87RegsE = external global i32, align 4 + at _ZN7nanojitL6FpRegsE = external global i32, align 4 + at _ZL16equality_imacros = external global %struct.anon, align 1 + at _ZL14binary_imacros = external global %69, align 1 + at _ZL11add_imacros = external global %69, align 1 + at _ZL13unary_imacros = external global %70, align 1 + at _ZL12call_imacros = external global %71, align 1 + at _ZL11new_imacros = external global %71, align 1 + at js_opcode2extra = external global [244 x i8], align 1 + at _ZL15incelem_imacros = external global %72, align 1 + at _ZL15decelem_imacros = external global %72, align 1 + at _ZL16funapply_imacros = external global %73, align 1 + at _ZL15funcall_imacros = external global %74, align 1 + at _ZL15getprop_imacros = external global %75, align 1 + at _ZL16callprop_imacros = external global %76, align 1 + at _ZL19getthisprop_imacros = external global %75, align 1 + at .str = external constant [46 x i8] + at .str6 = external constant [51 x i8] + at _ZL17js_IntToString_ci = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL6s_coreE = external global %"class.avmplus::AvmCore", align 4 + at _ZN2jsL31did_we_check_processor_featuresE.b = external global i1 + at _ZN2js13LogControllerE = external global %"class.nanojit::LogControl", align 8 + at __dso_handle = external global i8* + at .str10 = external constant [48 x i8] + at .str11 = external constant [44 x i8] + at _ZN7avmplus7AvmCore6configE = external global %"struct.nanojit::Config" + at js_CodeSpec = external global [0 x %struct.JSCodeSpec] + at _ZN2jsL16GetClosureVar_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL16GetClosureArg_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_dmod_ci = external global %"struct.nanojit::CallInfo" + at js_UnboxDouble_ci = external global %"struct.nanojit::CallInfo" + at js_UnboxInt32_ci = external global %"struct.nanojit::CallInfo" + at js_StringToNumber_ci = external global %"struct.nanojit::CallInfo" + at js_StringToInt32_ci = external global %"struct.nanojit::CallInfo" + at js_DoubleToInt32_ci = external global %"struct.nanojit::CallInfo" + at js_DoubleToUint32_ci = external global %"struct.nanojit::CallInfo" + at js_NumberToString_ci = external global %"struct.nanojit::CallInfo" + at js_BooleanIntToString_ci = external global %"struct.nanojit::CallInfo" + at js_EqualStringsOnTrace_ci = external global %"struct.nanojit::CallInfo" + at js_NaN = external global double + at js_CompareStringsOnTrace_ci = external global %"struct.nanojit::CallInfo" + at _ZN7nanojit8retTypesE = external constant [0 x i32] + at js_FunctionClass = external global %"struct.js::Class" + at js_ArrayClass = external global %"struct.js::Class" + at js_PutArgumentsOnTrace_ci = external global %"struct.nanojit::CallInfo" + at js_PutCallObjectOnTrace_ci = external global %"struct.nanojit::CallInfo" + at js_CreateCallObjectOnTrace_ci = external global %"struct.nanojit::CallInfo" + at _ZN2jsL16functionProbe_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_NewArgumentsOnTrace_ci = external global %"struct.nanojit::CallInfo" + at js_ConcatStrings_ci = external global %"struct.nanojit::CallInfo" + at js_String_tn_ci = external global %"struct.nanojit::CallInfo" + at _ZN2js21NewDenseEmptyArray_ciE = external global %"struct.nanojit::CallInfo" + at _ZN2js27NewDenseUnallocatedArray_ciE = external global %"struct.nanojit::CallInfo" + at _ZN2js25NewDenseAllocatedArray_ciE = external global %"struct.nanojit::CallInfo" + at _ZN2jsL19ceilReturningInt_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL20floorReturningInt_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL20roundReturningInt_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_ObjectClass = external global %"struct.js::Class" + at _ZN2jsL15DeleteIntKey_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL15DeleteStrKey_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_TypeOfObject_ci = external global %"struct.nanojit::CallInfo" + at _ZN2jsL21MethodWriteBarrier_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_AddAtomProperty_ci = external global %"struct.nanojit::CallInfo" + at js_AddProperty_ci = external global %"struct.nanojit::CallInfo" + at js_SetCallArg_ci = external global %"struct.nanojit::CallInfo" + at js_SetCallVar_ci = external global %"struct.nanojit::CallInfo" + at _ZN2jsL20GetPropertyByName_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL21GetPropertyByIndex_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL18GetPropertyById_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL30GetPropertyWithNativeGetter_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_Flatten_ci = external global %"struct.nanojit::CallInfo" + at _ZN8JSString15unitStringTableE = external global [0 x %struct.JSString] + at _ZN2jsL20SetPropertyByName_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL21InitPropertyByName_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL21SetPropertyByIndex_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL22InitPropertyByIndex_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_TypedArray_uint8_clamp_double_ci = external global %"struct.nanojit::CallInfo" + at js_EnsureDenseArrayCapacity_ci = external global %"struct.nanojit::CallInfo" + at _ZN2jsL21GetUpvarArgOnTrace_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL21GetUpvarVarOnTrace_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL23GetUpvarStackOnTrace_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_CreateThisFromTrace_ci = external global %"struct.nanojit::CallInfo" + at _ZN2jsL21funapply_imacro_tableE = external constant [9 x i8*], align 4 + at _ZN2jsL20funcall_imacro_tableE = external constant [9 x i8*], align 4 + at _ZN2jsL20MethodReadBarrier_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_InitializerObject_ci = external global %"struct.nanojit::CallInfo" + at _ZN2jsL19ObjectToIterator_ciE = external global %"struct.nanojit::CallInfo", align 4 + at _ZN2jsL15IteratorMore_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_IteratorClass = external global %"struct.js::Class" + at _ZN2jsL16CloseIterator_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_HasNamedPropertyInt32_ci = external global %"struct.nanojit::CallInfo" + at js_HasNamedProperty_ci = external global %"struct.nanojit::CallInfo" + at _ZN2jsL21HasInstanceOnTrace_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_NewNullClosure_ci = external global %"struct.nanojit::CallInfo" + at js_CloneFunctionObject_ci = external global %"struct.nanojit::CallInfo" + at js_AllocFlatClosure_ci = external global %"struct.nanojit::CallInfo" + at js_CloneRegExpObject_ci = external global %"struct.nanojit::CallInfo" + at js_ArrayCompPush_tn_ci = external global %"struct.nanojit::CallInfo" + at js_SlowArrayClass = external global %"struct.js::Class" + at _ZN2jsL13js_Unbrand_ciE = external global %"struct.nanojit::CallInfo", align 4 + at js_DateClass = external global %"struct.js::Class" + at js_BooleanClass = external global %"struct.js::Class" + at js_StringClass = external global %"struct.js::Class" + at js_NumberClass = external global %"struct.js::Class" + at js_CallClass = external global %"struct.js::Class" + at js_BlockClass = external global %"struct.js::Class" + at js_DeclEnvClass = external global %"struct.js::Class" + at js_ArgumentsClass = external global %"struct.js::Class" + at js_RegExpClass = external global %"struct.js::Class" + at js_XMLClass = external global %"struct.js::Class" + at _ZN2js20StrictArgumentsClassE = external global %"struct.js::Class" + at _ZN11JSObjectMap15sharedNonNativeE = external global %struct.JSObjectMap + at .str456 = external constant [15 x i8] + at .str457 = external constant [5 x i8] + at .str458 = external constant [2 x i8] + at .str459 = external constant [4 x i8] + at _ZTVN2js14DefaultSlotMapE = external constant [6 x i8*] + at _ZTVN2js7SlotMapE = external constant [6 x i8*] + at _ZN7nanojit8repKindsE = external constant [0 x i8] + at _ZZN2js2gc23GetFinalizableTraceKindEmE3map = external constant [11 x i8], align 1 + at _ZN8JSString18hundredStringTableE = external global [0 x %struct.JSString] + at _ZN8JSString18length2StringTableE = external global [0 x %struct.JSString] + at _ZTVN7nanojit10LogControlE = external constant [4 x i8*] + at llvm.global_ctors = external global [1 x %77] + at .memset_pattern = external constant [2 x i64], align 16 + +declare hidden i8* @_Z17js_GetImacroStartPh(i8*) nounwind readnone + +declare hidden i8* @_ZN7nanojit9Allocator10allocChunkEmb(%"class.nanojit::Allocator"* nocapture, i32, i1 zeroext) nounwind align 2 + +declare void @JS_Assert(i8*, i8*, i32) + +declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind + +declare hidden void @_ZN7nanojit9Allocator9freeChunkEPv(%"class.nanojit::Allocator"* nocapture, i8*) nounwind align 2 + +declare hidden void @_ZN7nanojit9Allocator9postResetEv(%"class.nanojit::Allocator"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN7nanojit11StackFilter6getTopEPNS_4LInsE(%"class.nanojit::StackFilter"* nocapture, %"class.nanojit::LIns"*) nounwind readonly align 2 + +declare x86_fastcallcc %struct.JSString* @_Z14js_IntToStringP9JSContexti(%struct.JSContext*, i32) + +declare hidden void @_ZN7nanojit10LogControlD1Ev(%"class.nanojit::LogControl"* nocapture) nounwind align 2 + +declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*) + +declare hidden void @_ZN2js7TrackerC1Ev(%"class.js::Tracker"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js7TrackerC2Ev(%"class.js::Tracker"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js7TrackerD1Ev(%"class.js::Tracker"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js7TrackerD2Ev(%"class.js::Tracker"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js7Tracker5clearEv(%"class.js::Tracker"* nocapture) nounwind align 2 + +declare hidden %"struct.js::Tracker::TrackerPage"* @_ZNK2js7Tracker15findTrackerPageEPKv(%"class.js::Tracker"* nocapture, i8*) nounwind readonly align 2 + +declare hidden %"struct.js::Tracker::TrackerPage"* @_ZN2js7Tracker14addTrackerPageEPKv(%"class.js::Tracker"* nocapture, i8*) nounwind align 2 + +declare hidden zeroext i1 @_ZNK2js7Tracker3hasEPKv(%"class.js::Tracker"* nocapture, i8*) nounwind readonly align 2 + +declare hidden %"class.nanojit::LIns"* @_ZNK2js7Tracker3getEPKv(%"class.js::Tracker"* nocapture, i8*) nounwind readonly align 2 + +declare hidden void @_ZN2js7Tracker3setEPKvPN7nanojit4LInsE(%"class.js::Tracker"* nocapture, i8*, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden void @_ZN2js6OracleC1Ev(%"class.js::Oracle"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js6OracleC2Ev(%"class.js::Oracle"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js6Oracle25markGlobalSlotUndemotableEP9JSContextj(%"class.js::Oracle"* nocapture, %struct.JSContext* nocapture, i32) nounwind align 2 + +declare hidden zeroext i1 @_ZNK2js6Oracle23isGlobalSlotUndemotableEP9JSContextj(%"class.js::Oracle"* nocapture, %struct.JSContext* nocapture, i32) nounwind align 2 + +declare hidden void @_ZN2js6Oracle24markStackSlotUndemotableEP9JSContextjPKv(%"class.js::Oracle"* nocapture, %struct.JSContext* nocapture, i32, i8*) nounwind align 2 + +declare hidden void @_ZN2js6Oracle24markStackSlotUndemotableEP9JSContextj(%"class.js::Oracle"* nocapture, %struct.JSContext* nocapture, i32) nounwind align 2 + +declare hidden zeroext i1 @_ZNK2js6Oracle22isStackSlotUndemotableEP9JSContextjPKv(%"class.js::Oracle"* nocapture, %struct.JSContext* nocapture, i32, i8*) nounwind readonly align 2 + +declare hidden zeroext i1 @_ZNK2js6Oracle22isStackSlotUndemotableEP9JSContextj(%"class.js::Oracle"* nocapture, %struct.JSContext* nocapture, i32) nounwind readonly align 2 + +declare hidden void @_ZN2js6Oracle26markInstructionUndemotableEPh(%"class.js::Oracle"* nocapture, i8*) nounwind align 2 + +declare hidden zeroext i1 @_ZNK2js6Oracle24isInstructionUndemotableEPh(%"class.js::Oracle"* nocapture, i8*) nounwind readonly align 2 + +declare hidden void @_ZN2js6Oracle27markInstructionSlowZeroTestEPh(%"class.js::Oracle"* nocapture, i8*) nounwind align 2 + +declare hidden zeroext i1 @_ZNK2js6Oracle25isInstructionSlowZeroTestEPh(%"class.js::Oracle"* nocapture, i8*) nounwind readonly align 2 + +declare hidden void @_ZN2js6Oracle17clearDemotabilityEv(%"class.js::Oracle"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js14FrameInfoCacheC1EPNS_11VMAllocatorE(%"class.js::FrameInfoCache"* nocapture, %"class.js::VMAllocator"*) nounwind align 2 + +declare hidden void @_ZN2js14FrameInfoCacheC2EPNS_11VMAllocatorE(%"class.js::FrameInfoCache"* nocapture, %"class.js::VMAllocator"*) nounwind align 2 + +declare hidden void @_ZN2js12TreeFragment10initializeEP9JSContextPNS_5QueueItEEb(%"struct.js::TreeFragment"* nocapture, %struct.JSContext*, %38*, i1 zeroext) nounwind align 2 + +declare hidden void @_ZN2js7TypeMap12captureTypesEP9JSContextP8JSObjectRNS_5QueueItEEjb(%"class.js::TypeMap"* nocapture, %struct.JSContext*, %struct.JSObject* nocapture, %38* nocapture, i32, i1 zeroext) nounwind align 2 + +declare hidden %"struct.js::UnstableExit"* @_ZN2js12TreeFragment18removeUnstableExitEPNS_10VMSideExitE(%"struct.js::TreeFragment"* nocapture, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden i32 @_ZN2js16NativeStackSlotsEP9JSContextj(%struct.JSContext* nocapture, i32) nounwind readonly + +declare hidden void @_ZN2js7TypeMap3setEjjPK11JSValueTypeS3_(%"class.js::TypeMap"* nocapture, i32, i32, i8* nocapture, i8* nocapture) nounwind align 2 + +declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind + +declare hidden void @_ZN2js7TypeMap25captureMissingGlobalTypesEP9JSContextP8JSObjectRNS_5QueueItEEjb(%"class.js::TypeMap"* nocapture, %struct.JSContext*, %struct.JSObject* nocapture, %38* nocapture, i32, i1 zeroext) nounwind align 2 + +declare hidden zeroext i1 @_ZNK2js7TypeMap7matchesERS0_(%"class.js::TypeMap"* nocapture, %"class.js::TypeMap"* nocapture) nounwind readonly align 2 + +declare i32 @memcmp(i8* nocapture, i8* nocapture, i32) nounwind readonly + +declare hidden void @_ZN2js7TypeMap7fromRawEP11JSValueTypej(%"class.js::TypeMap"* nocapture, i8* nocapture, i32) nounwind align 2 + +declare hidden void @_ZN2js13FlushJITCacheEP9JSContextPNS_12TraceMonitorE(%struct.JSContext* nocapture, %"struct.js::TraceMonitor"* nocapture) nounwind + +declare hidden void @_ZN2js13TraceRecorderC1EP9JSContextPNS_12TraceMonitorEPNS_10VMSideExitEPNS_10VMFragmentEjjP11JSValueTypeS6_P8JSScriptPhjb(%"class.js::TraceRecorder"*, %struct.JSContext*, %"struct.js::TraceMonitor"*, %"struct.js::VMSideExit"*, %"class.js::VMFragment"*, i32, i32, i8*, %"struct.js::VMSideExit"*, %struct.JSScript*, i8*, i32, i1 zeroext) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorderC2EP9JSContextPNS_12TraceMonitorEPNS_10VMSideExitEPNS_10VMFragmentEjjP11JSValueTypeS6_P8JSScriptPhjb(%"class.js::TraceRecorder"*, %struct.JSContext*, %"struct.js::TraceMonitor"*, %"struct.js::VMSideExit"*, %"class.js::VMFragment"*, i32, i32, i8*, %"struct.js::VMSideExit"*, %struct.JSScript*, i8*, i32, i1 zeroext) nounwind align 2 + +declare void @_ZN7nanojit9LirBufferC1ERNS_9AllocatorE(%"class.nanojit::LirBuffer"*, %"class.nanojit::Allocator"*) + +declare hidden void @_ZN2js14AbortProfilingEP9JSContext(%struct.JSContext* nocapture) nounwind + +declare void @_ZN2js4tjit6Writer4initEPN7nanojit10LogControlE(%"class.js::tjit::Writer"*, %"class.nanojit::LogControl"*) + +declare hidden void @_ZN2js13TraceRecorder6importEPNS_12TreeFragmentEPN7nanojit4LInsEjjjP11JSValueType(%"class.js::TraceRecorder"*, %"struct.js::TreeFragment"* nocapture, %"class.nanojit::LIns"*, i32, i32, i32, i8*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder5guardEbPN7nanojit4LInsENS_8ExitTypeEb(%"class.js::TraceRecorder"*, i1 zeroext, %"class.nanojit::LIns"*, i32, i1 zeroext) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorderD1Ev(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorderD2Ev(%"class.js::TraceRecorder"*) nounwind align 2 + +declare fastcc void @_ZN2js9TrashTreeEPNS_12TreeFragmentE(%"struct.js::TreeFragment"* nocapture) nounwind + +declare void @_ZN7nanojit9Allocator5resetEv(%"class.nanojit::Allocator"*) + +declare hidden void @_ZN2js13TraceRecorder19forgetGuardedShapesEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18finishSuccessfullyEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden zeroext i1 @_ZN2js16OverfullJITCacheEP9JSContextPNS_12TraceMonitorE(%struct.JSContext* nocapture, %"struct.js::TraceMonitor"* nocapture) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder11finishAbortEPKc(%"class.js::TraceRecorder"*, i8* nocapture) nounwind align 2 + +declare hidden void @_ZN2js5QueueIPNS_10VMSideExitEE9setLengthEj(%17* nocapture, i32) nounwind align 2 + +declare hidden i32 @_ZNK2js13TraceRecorder16nativeGlobalSlotEPKNS_5ValueE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"*) nounwind readonly align 2 + +declare hidden i32 @_ZNK2js13TraceRecorder18nativeGlobalOffsetEPKNS_5ValueE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"*) nounwind readonly align 2 + +declare hidden zeroext i1 @_ZNK2js13TraceRecorder8isGlobalEPKNS_5ValueE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"*) nounwind readonly align 2 + +declare hidden zeroext i1 @_ZNK2js13TraceRecorder15isVoidPtrGlobalEPKv(%"class.js::TraceRecorder"* nocapture, i8*) nounwind readonly align 2 + +declare hidden i32 @_ZNK2js13TraceRecorder21nativeStackOffsetImplEPKv(%"class.js::TraceRecorder"* nocapture, i8*) nounwind align 2 + +declare hidden void @_ZN2js12TraceMonitor5flushEv(%"struct.js::TraceMonitor"* nocapture) nounwind align 2 + +declare void @_ZN2js4mjit14ResetTraceHintEP8JSScriptPhtb(%struct.JSScript*, i8*, i16 zeroext, i1 zeroext) + +declare void @_ZN7nanojit9CodeAlloc5resetEv(%"class.nanojit::CodeAlloc"*) + +declare void @_ZN7nanojit9AssemblerC1ERNS_9CodeAllocERNS_9AllocatorES4_PN7avmplus7AvmCoreEPNS_10LogControlERKNS_6ConfigE(%"class.nanojit::Assembler"*, %"class.nanojit::CodeAlloc"*, %"class.nanojit::Allocator"*, %"class.nanojit::Allocator"*, %"class.avmplus::AvmCore"*, %"class.nanojit::LogControl"*, %"struct.nanojit::Config"*) + +declare hidden void @_ZN2js12TraceMonitor5sweepEP9JSContext(%"struct.js::TraceMonitor"* nocapture, %struct.JSContext*) nounwind align 2 + +declare hidden void @_ZN2js12TraceMonitor4markEP8JSTracer(%"struct.js::TraceMonitor"* nocapture, %struct.JSTracer*) nounwind align 2 + +declare hidden void @_ZN2js19ExternNativeToValueEP9JSContextRNS_5ValueE11JSValueTypePd(%struct.JSContext* nocapture, %"class.js::Value"* nocapture, i8 zeroext, double* nocapture) nounwind + +declare hidden x86_fastcallcc i32 @_ZN2js18GetUpvarArgOnTraceEP9JSContextjijPd(%struct.JSContext* nocapture, i32, i32, i32, double* nocapture) nounwind + +declare hidden zeroext i8 @_ZN2js15GetUpvarOnTraceINS_14UpvarArgTraitsEEE11JSValueTypeP9JSContextjijPd(%struct.JSContext* nocapture, i32, i32, i32, double* nocapture) nounwind inlinehint + +declare hidden x86_fastcallcc i32 @_ZN2js18GetUpvarVarOnTraceEP9JSContextjijPd(%struct.JSContext* nocapture, i32, i32, i32, double* nocapture) nounwind + +declare hidden zeroext i8 @_ZN2js15GetUpvarOnTraceINS_14UpvarVarTraitsEEE11JSValueTypeP9JSContextjijPd(%struct.JSContext* nocapture, i32, i32, i32, double* nocapture) nounwind inlinehint + +declare hidden x86_fastcallcc i32 @_ZN2js20GetUpvarStackOnTraceEP9JSContextjijPd(%struct.JSContext* nocapture, i32, i32, i32, double* nocapture) nounwind + +declare hidden zeroext i8 @_ZN2js15GetUpvarOnTraceINS_16UpvarStackTraitsEEE11JSValueTypeP9JSContextjijPd(%struct.JSContext* nocapture, i32, i32, i32, double* nocapture) nounwind inlinehint + +declare hidden x86_fastcallcc i32 @_ZN2js13GetClosureArgEP9JSContextP8JSObjectPKNS_14ClosureVarInfoEPd(%struct.JSContext* nocapture, %struct.JSObject* nocapture, %"class.js::KidsPointer"* nocapture, double* nocapture) nounwind + +declare hidden x86_fastcallcc i32 @_ZN2js13GetClosureVarEP9JSContextP8JSObjectPKNS_14ClosureVarInfoEPd(%struct.JSContext* nocapture, %struct.JSObject* nocapture, %"class.js::KidsPointer"* nocapture, double* nocapture) nounwind + +declare hidden void @_ZN2js13TraceRecorder10importImplENS_4tjit7AddressEPKv11JSValueTypePKcjP12JSStackFrame(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval, i8*, i8 zeroext, i8* nocapture, i32, %struct.JSStackFrame* nocapture) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder6importENS_4tjit7AddressEPKNS_5ValueE11JSValueTypePKcjP12JSStackFrame(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval, %"class.js::Value"*, i8 zeroext, i8* nocapture, i32, %struct.JSStackFrame* nocapture) nounwind align 2 + +declare hidden zeroext i1 @_ZN2js13TraceRecorder11isValidSlotEP8JSObjectPKNS_5ShapeE(%"class.js::TraceRecorder"* nocapture, %struct.JSObject* nocapture, %"struct.js::Shape"* nocapture) nounwind readonly align 2 + +declare hidden void @_ZN2js13TraceRecorder16importGlobalSlotEj(%"class.js::TraceRecorder"* nocapture, i32) nounwind align 2 + +declare hidden void @_ZN2js5QueueItE3addEt(%38* nocapture, i16 zeroext) nounwind align 2 + +declare hidden void @_ZN2js5QueueI11JSValueTypeE3addES1_(%78* nocapture, i8 zeroext) nounwind align 2 + +declare hidden zeroext i1 @_ZN2js13TraceRecorder22lazilyImportGlobalSlotEj(%"class.js::TraceRecorder"* nocapture, i32) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder9writeBackEPN7nanojit4LInsES3_ib(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, i32, i1 zeroext) nounwind align 2 + +declare zeroext i1 @_ZN2js4tjit15IsPromotedInt32EPN7nanojit4LInsE(%"class.nanojit::LIns"*) + +declare hidden void @_ZN2js13TraceRecorder7setImplEPvPN7nanojit4LInsEb(%"class.js::TraceRecorder"*, i8*, %"class.nanojit::LIns"*, i1 zeroext) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder14setFrameObjPtrEPvPN7nanojit4LInsEb(%"class.js::TraceRecorder"*, i8*, %"class.nanojit::LIns"*, i1 zeroext) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder13attemptImportEPKNS_5ValueE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder3getEPKNS_5ValueE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder7getImplEPKv(%"class.js::TraceRecorder"* nocapture, i8*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder14getFrameObjPtrEPv(%"class.js::TraceRecorder"* nocapture, i8*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder4addrEPNS_5ValueE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder38checkForGlobalObjectReallocationHelperEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder17adjustCallerTypesEPNS_12TreeFragmentE(%"class.js::TraceRecorder"*, %"struct.js::TreeFragment"* nocapture) nounwind align 2 + +declare hidden %"struct.js::VMSideExit"* @_ZN2js13TraceRecorder8snapshotENS_8ExitTypeE(%"class.js::TraceRecorder"*, i32) nounwind align 2 + +declare i32 @_Z13js_InferFlagsP9JSContextj(%struct.JSContext*, i32) + +declare hidden %"struct.nanojit::GuardRecord"* @_ZN2js13TraceRecorder17createGuardRecordEPNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder10ensureCondEPPN7nanojit4LInsEPb(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"** nocapture, i8* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder5guardEbPN7nanojit4LInsEPNS_10VMSideExitEb(%"class.js::TraceRecorder"* nocapture, i1 zeroext, %"class.nanojit::LIns"*, %"struct.js::VMSideExit"*, i1 zeroext) nounwind align 2 + +declare hidden void @_ZN2js5QueueIPNS_10VMSideExitEE3addES2_(%17* nocapture, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder9guard_xovEN7nanojit7LOpcodeEPNS1_4LInsES4_PNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, i32, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden %"struct.js::VMSideExit"* @_ZN2js13TraceRecorder4copyEPNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %"struct.js::VMSideExit"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder7compileEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare void @_ZN7nanojit9Assembler7compileEPNS_8FragmentERNS_9AllocatorEb(%"class.nanojit::Assembler"*, %"class.nanojit::Fragment"*, %"class.nanojit::Allocator"*, i1 zeroext) + +declare void @_ZN7nanojit9Assembler5patchEPNS_8SideExitEPNS_10SwitchInfoE(%"class.nanojit::Assembler"*, %"struct.nanojit::SideExit"*, %"struct.nanojit::SwitchInfo"*) + +declare void @_ZN7nanojit9Assembler5patchEPNS_8SideExitE(%"class.nanojit::Assembler"*, %"struct.nanojit::SideExit"*) + +declare hidden i32 @_ZN2js13TraceRecorder17selfTypeStabilityERNS_7SlotMapE(%"class.js::TraceRecorder"* nocapture, %"class.js::SlotMap"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17peerTypeStabilityERNS_7SlotMapEPKvPPNS_12TreeFragmentE(%"class.js::TraceRecorder"* nocapture, %"class.js::SlotMap"* nocapture, i8* nocapture, %"struct.js::TreeFragment"** nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder9closeLoopEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder16joinEdgesToEntryEPNS_12TreeFragmentE(%"class.js::TraceRecorder"* nocapture, %"struct.js::TreeFragment"*) nounwind align 2 + +declare fastcc void @_ZN2js18AttemptCompilationEPNS_12TraceMonitorEP8JSObjectP8JSScriptPhj(%"struct.js::TraceMonitor"* nocapture, %struct.JSObject*, %struct.JSScript*, i8*, i32) nounwind + +declare hidden void @_ZN2js14DefaultSlotMapD1Ev(%"class.js::DefaultSlotMap"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23findUndemotesInTypemapsERKNS_7TypeMapEPNS_16LinkableFragmentERNS_5QueueIjEE(%"class.js::TraceRecorder"* nocapture, %"class.js::TypeMap"* nocapture, %"struct.js::LinkableFragment"* nocapture, %79* nocapture) nounwind align 2 + +declare hidden void @_ZN2js5QueueIjE9setLengthEj(%79* nocapture, i32) nounwind align 2 + +declare hidden void @_ZN2js5QueueIjE3addEj(%79* nocapture, i32) nounwind align 2 + +declare fastcc void @_ZN2js15FullMapFromExitERNS_7TypeMapEPNS_10VMSideExitE(%"class.js::TypeMap"* nocapture, %"struct.js::VMSideExit"* nocapture) nounwind + +declare fastcc i32 @_ZN2js18TypeMapLinkabilityEP9JSContextPNS_12TraceMonitorERKNS_7TypeMapEPNS_12TreeFragmentE(%struct.JSContext* nocapture, %"struct.js::TraceMonitor"* nocapture, %"class.js::TypeMap"* nocapture, %"struct.js::TreeFragment"* nocapture) nounwind + +declare fastcc void @_ZN2js28SpecializeTreesToLateGlobalsEP9JSContextPNS_12TreeFragmentEP11JSValueTypej(%"struct.js::TreeFragment"* nocapture, i8*, i32) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder7endLoopEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder7endLoopEPNS_10VMSideExitE(%"class.js::TraceRecorder"*, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder15prepareTreeCallEPNS_12TreeFragmentE(%"class.js::TraceRecorder"*, %"struct.js::TreeFragment"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder12emitTreeCallEPNS_12TreeFragmentEPNS_10VMSideExitE(%"class.js::TraceRecorder"*, %"struct.js::TreeFragment"*, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder14trackCfgMergesEPh(%"class.js::TraceRecorder"* nocapture, i8*) nounwind align 2 + +declare i8* @_Z19js_GetSrcNoteCachedP9JSContextP8JSScriptPh(%struct.JSContext*, %struct.JSScript*, i8*) + +declare hidden void @_ZN2js5QueueIPhE3addES1_(%31* nocapture, i8*) nounwind align 2 + +declare i32 @js_GetSrcNoteOffset(i8*, i32) + +declare hidden void @_ZN2js13TraceRecorder6emitIfEPhbPN7nanojit4LInsE(%"class.js::TraceRecorder"*, i8*, i1 zeroext, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder6fuseIfEPhbPN7nanojit4LInsE(%"class.js::TraceRecorder"*, i8*, i1 zeroext, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder13checkTraceEndEPh(%"class.js::TraceRecorder"*, i8*) nounwind align 2 + +declare hidden zeroext i1 @_ZN2js13TraceRecorder13startRecorderEP9JSContextPNS_12TraceMonitorEPNS_10VMSideExitEPNS_10VMFragmentEjjP11JSValueTypeS6_P8JSScriptPhjb(%struct.JSContext*, %"struct.js::TraceMonitor"*, %"struct.js::VMSideExit"*, %"class.js::VMFragment"*, i32, i32, i8*, %"struct.js::VMSideExit"*, %struct.JSScript*, i8*, i32, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14recordLoopEdgeEP9JSContextPS0_Rj(%struct.JSContext*, %"class.js::TraceRecorder"*, i32*) nounwind align 2 + +declare fastcc %"struct.js::TreeFragment"* @_ZN2js15LookupOrAddLoopEPNS_12TraceMonitorEPKvP8JSObjectjj(%"struct.js::TraceMonitor"*, i8*, %struct.JSObject*, i32, i32) nounwind + +declare %struct.JSObject* @_ZNK8JSObject9getGlobalEv(%struct.JSObject*) + +declare fastcc zeroext i1 @_ZN2js22CheckGlobalObjectShapeEP9JSContextPNS_12TraceMonitorEP8JSObjectPjPPNS_5QueueItEE(%struct.JSContext*, %"struct.js::TraceMonitor"*, %struct.JSObject*, i32*, %38**) nounwind + +declare hidden %"struct.js::TreeFragment"* @_ZN2js13TraceRecorder24findNestedCompatiblePeerEPNS_12TreeFragmentE(%"class.js::TraceRecorder"*, %"struct.js::TreeFragment"*) nounwind align 2 + +declare hidden i32 @_ZN2js18AbortRecordingImplEP9JSContext(%struct.JSContext* nocapture) nounwind + +declare fastcc zeroext i1 @_ZN2js10RecordTreeEP9JSContextPNS_12TraceMonitorEPNS_12TreeFragmentEP8JSScriptPhjPNS_5QueueItEE(%struct.JSContext*, %"struct.js::TraceMonitor"*, %"struct.js::TreeFragment"*, %struct.JSScript*, i8*, i32, %38*) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder15attemptTreeCallEPNS_12TreeFragmentERj(%"class.js::TraceRecorder"*, %"struct.js::TreeFragment"*, i32*) nounwind align 2 + +declare fastcc zeroext i1 @_ZN2js11ExecuteTreeEP9JSContextPNS_12TraceMonitorEPNS_12TreeFragmentERjPPNS_10VMSideExitES9_(%struct.JSContext*, %"struct.js::TraceMonitor"*, %"struct.js::TreeFragment"*, i32*, %"struct.js::VMSideExit"**, %"struct.js::VMSideExit"** nocapture) nounwind + +declare fastcc zeroext i1 @_ZN2js19AttemptToExtendTreeEP9JSContextPNS_12TraceMonitorEPNS_10VMSideExitES5_P8JSScriptPh(%struct.JSContext*, %"struct.js::TraceMonitor"*, %"struct.js::VMSideExit"*, %"struct.js::VMSideExit"*, %struct.JSScript*, i8*) nounwind + +declare fastcc zeroext i1 @_ZN2js22AttemptToStabilizeTreeEP9JSContextPNS_12TraceMonitorEP8JSObjectPNS_10VMSideExitEP8JSScriptPhj(%struct.JSContext*, %"struct.js::TraceMonitor"*, %struct.JSObject* nocapture, %"struct.js::VMSideExit"*, %struct.JSScript*, i8*, i32) nounwind + +declare hidden i32 @_ZN2js14RecordLoopEdgeEP9JSContextPNS_12TraceMonitorERj(%struct.JSContext*, %"struct.js::TraceMonitor"*, i32*) nounwind + +declare fastcc %"struct.js::TreeFragment"* @_ZN2js20FindVMCompatiblePeerEP9JSContextP8JSObjectPNS_12TreeFragmentERj(%struct.JSContext*, %struct.JSObject* nocapture, %"struct.js::TreeFragment"*, i32* nocapture) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder16monitorRecordingE4JSOp(%"class.js::TraceRecorder"*, i32) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder11unbox_valueERKNS_5ValueENS_4tjit7AddressEPNS_10VMSideExitEb(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"* nocapture, %"struct.js::tjit::Address"* nocapture byval, %"struct.js::VMSideExit"*, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_NOPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_PUSHEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_POPVEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_ENTERWITHEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_LEAVEWITHEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_RETURNEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_GOTOEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_IFEQEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_IFNEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_ARGUMENTSEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_FORARGEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_FORLOCALEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_DUPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_DUP2Ev(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_SETCONSTEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_BITOREv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_BITXOREv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_BITANDEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14record_JSOP_EQEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14record_JSOP_NEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14record_JSOP_LTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14record_JSOP_LEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14record_JSOP_GTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14record_JSOP_GEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_LSHEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_RSHEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_URSHEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_ADDEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_SUBEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_MULEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_DIVEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_MODEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_NOTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_BITNOTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_NEGEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_POSEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_DELNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_DELPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_DELELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_TYPEOFEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_VOIDEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_INCNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_INCPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_INCELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_DECNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_DECPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_DECELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_NAMEINCEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_PROPINCEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_ELEMINCEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_NAMEDECEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_PROPDECEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_ELEMDECEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_GETPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_SETPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_GETELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_SETELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_CALLNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_CALLEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_NAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_DOUBLEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_STRINGEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_ZEROEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_ONEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_NULLEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_THISEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_FALSEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_TRUEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14record_JSOP_OREv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_ANDEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_TABLESWITCHEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder24record_JSOP_LOOKUPSWITCHEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_STRICTEQEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_STRICTNEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_SETCALLEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_ITEREv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_MOREITEREv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_ENDITEREv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_FUNAPPLYEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_SWAPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_OBJECTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_POPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_NEWEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_TRAPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_GETARGEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_SETARGEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_GETLOCALEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_SETLOCALEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_UINT16Ev(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_NEWINITEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_NEWARRAYEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_NEWOBJECTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_ENDINITEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_INITPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_INITELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_DEFSHARPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_USESHARPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_INCARGEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_DECARGEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_ARGINCEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_ARGDECEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_INCLOCALEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_DECLOCALEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_LOCALINCEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_LOCALDECEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_IMACOPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_FORNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_FORPROPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_FORELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_POPNEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_BINDNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_SETNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_THROWEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14record_JSOP_INEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_INSTANCEOFEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_DEBUGGEREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_GOSUBEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_RETSUBEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_EXCEPTIONEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_LINENOEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_CONDSWITCHEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_CASEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_DEFAULTEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_EVALEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_ENUMELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_GETTEREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_SETTEREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_DEFFUNEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_DEFCONSTEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_DEFVAREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_LAMBDAEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_CALLEEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_SETLOCALPOPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_PICKEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_TRYEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_FINALLYEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_GETFCSLOTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_CALLFCSLOTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_ARGSUBEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_ARGCNTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_DEFLOCALFUNEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_GOTOXEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_IFEQXEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_IFNEXEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15record_JSOP_ORXEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_ANDXEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_GOSUBXEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_CASEXEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_DEFAULTXEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder24record_JSOP_TABLESWITCHXEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder25record_JSOP_LOOKUPSWITCHXEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_BACKPATCHEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder25record_JSOP_BACKPATCH_POPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_THROWINGEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_SETRVALEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_RETRVALEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_GETGNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_SETGNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_INCGNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_DECGNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_GNAMEINCEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_GNAMEDECEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_REGEXPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_DEFXMLNSEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_ANYNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_QNAMEPARTEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_QNAMECONSTEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_QNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_TOATTRNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_TOATTRVALEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_ADDATTRNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_ADDATTRVALEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_BINDXMLNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_SETXMLNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_XMLNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_DESCENDANTSEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_FILTEREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_ENDFILTEREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_TOXMLEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_TOXMLLISTEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_XMLTAGEXPREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_XMLELTEXPREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_NOTRACEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_XMLCDATAEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_XMLCOMMENTEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_XMLPIEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_DELDESCEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_CALLPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_BLOCKCHAINEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder26record_JSOP_NULLBLOCKCHAINEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_UINT24Ev(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_INDEXBASEEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_RESETBASEEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_RESETBASE0Ev(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_STARTXMLEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder24record_JSOP_STARTXMLEXPREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_CALLELEMEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_STOPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_GETXPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_CALLXMLNAMEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_TYPEOFEXPREv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_ENTERBLOCKEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_LEAVEBLOCKEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_IFPRIMTOPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_PRIMTOPEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_GENERATOREv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_YIELDEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_ARRAYPUSHEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_GETFUNNSEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder25record_JSOP_ENUMCONSTELEMEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder26record_JSOP_LEAVEBLOCKEXPREv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_GETTHISPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_GETARGPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder24record_JSOP_GETLOCALPROPEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_INDEXBASE1Ev(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_INDEXBASE2Ev(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_INDEXBASE3Ev(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_CALLGNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_CALLLOCALEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_CALLARGEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_BINDGNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_INT8Ev(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_INT32Ev(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_LENGTHEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16record_JSOP_HOLEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_DEFFUN_FCEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder26record_JSOP_DEFLOCALFUN_FCEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_LAMBDA_FCEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder18record_JSOP_OBJTOPEv(%"class.js::TraceRecorder"* nocapture) nounwind readonly align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_JSOP_TRACEEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder24record_JSOP_GETUPVAR_DBGEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder25record_JSOP_CALLUPVAR_DBGEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder24record_JSOP_DEFFUN_DBGFCEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder29record_JSOP_DEFLOCALFUN_DBGFCEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder24record_JSOP_LAMBDA_DBGFCEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_SETMETHODEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_INITMETHODEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_UNBRANDEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23record_JSOP_UNBRANDTHISEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_SHARPINITEv(%"class.js::TraceRecorder"* nocapture) nounwind readnone align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21record_JSOP_GETGLOBALEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22record_JSOP_CALLGLOBALEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19record_JSOP_FUNCALLEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20record_JSOP_FORGNAMEEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden void @_ZN2js20SetMaxCodeCacheBytesEP9JSContextj(%struct.JSContext* nocapture, i32) nounwind + +declare hidden zeroext i1 @_ZN2js7InitJITEPNS_12TraceMonitorE(%"struct.js::TraceMonitor"* nocapture) nounwind + +declare hidden void @_ZN2js9FinishJITEPNS_12TraceMonitorE(%"struct.js::TraceMonitor"* nocapture) nounwind + +declare hidden void @_ZN2js20PurgeScriptFragmentsEPNS_12TraceMonitorEP8JSScript(%"struct.js::TraceMonitor"* nocapture, %struct.JSScript*) nounwind + +declare i32 @_ZN7nanojit9CodeAlloc4sizeEv(%"class.nanojit::CodeAlloc"*) + +declare void @_ZN2js8DeepBailEP9JSContext(%struct.JSContext* nocapture) nounwind + +declare fastcc void @_ZN2js9LeaveTreeEPNS_12TraceMonitorERNS_11TracerStateEPNS_10VMSideExitE(%"struct.js::TraceMonitor"* nocapture, %"struct.js::TracerState"* nocapture, %"struct.js::VMSideExit"*) nounwind + +declare hidden %"class.js::Value"* @_ZNK2js13TraceRecorder6argvalEj(%"class.js::TraceRecorder"* nocapture, i32) nounwind readonly align 2 + +declare hidden %"class.js::Value"* @_ZNK2js13TraceRecorder6varvalEj(%"class.js::TraceRecorder"* nocapture, i32) nounwind readonly align 2 + +declare hidden %"class.js::Value"* @_ZNK2js13TraceRecorder8stackvalEi(%"class.js::TraceRecorder"* nocapture, i32) nounwind readonly align 2 + +declare hidden void @_ZN2js13TraceRecorder11updateAtomsEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder11updateAtomsEP8JSScript(%"class.js::TraceRecorder"* nocapture, %struct.JSScript* nocapture) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder10scopeChainEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZNK2js13TraceRecorder15entryScopeChainEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZNK2js13TraceRecorder13entryFrameInsEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden %struct.JSStackFrame* @_ZNK2js13TraceRecorder14frameIfInRangeEP8JSObjectPj(%"class.js::TraceRecorder"* nocapture, %struct.JSObject* nocapture, i32*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14scopeChainPropEP8JSObjectRPNS_5ValueERPN7nanojit4LInsERNS0_10NameResultE(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.js::Value"** nocapture, %"class.nanojit::LIns"** nocapture, %"struct.js::TraceRecorder::NameResult"*) nounwind align 2 + +declare i32 @_Z15js_FindPropertyP9JSContextiPP8JSObjectS3_PP10JSProperty(%struct.JSContext*, i32, %struct.JSObject**, %struct.JSObject**, %struct.JSProperty**) + +declare hidden i32 @_ZN2js13TraceRecorder18traverseScopeChainEP8JSObjectPN7nanojit4LInsES2_RS5_(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, %struct.JSObject*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder8callPropEP8JSObjectP10JSPropertyiRPNS_5ValueERPN7nanojit4LInsERNS0_10NameResultE(%"class.js::TraceRecorder"*, %struct.JSObject*, %struct.JSProperty*, i32, %"class.js::Value"** nocapture, %"class.nanojit::LIns"** nocapture, %"struct.js::TraceRecorder::NameResult"*) nounwind align 2 + +declare i32 @_ZN2js10GetCallArgEP9JSContextP8JSObjectiPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*) + +declare i32 @_ZN2js10GetCallVarEP9JSContextP8JSObjectiPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*) + +declare i32 @_ZN2js17GetCallVarCheckedEP9JSContextP8JSObjectiPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*) + +declare i32 @_Z20js_GetPropertyHelperP9JSContextP8JSObjectijPN2js5ValueE(%struct.JSContext*, %struct.JSObject*, i32, i32, %"class.js::Value"*) + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder10unbox_slotEP8JSObjectPN7nanojit4LInsEjPNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %struct.JSObject*, %"class.nanojit::LIns"*, i32, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder9stackLoadENS_4tjit7AddressEh(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval, i8 zeroext) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder3argEj(%"class.js::TraceRecorder"* nocapture, i32) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder3argEjPN7nanojit4LInsE(%"class.js::TraceRecorder"*, i32, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder3varEj(%"class.js::TraceRecorder"* nocapture, i32) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder3varEjPN7nanojit4LInsE(%"class.js::TraceRecorder"*, i32, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder5stackEi(%"class.js::TraceRecorder"* nocapture, i32) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder5stackEiPN7nanojit4LInsE(%"class.js::TraceRecorder"*, i32, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder11guardNonNegEPN7nanojit4LInsES3_PNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder3aluEN7nanojit7LOpcodeEddPNS1_4LInsES4_(%"class.js::TraceRecorder"*, i32, double, double, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*) nounwind align 2 + +declare x86_fastcallcc double @_Z7js_dmoddd(double, double) + +declare i32 @_ZN7nanojit14arithOpcodeD2IENS_7LOpcodeE(i32) + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder3d2iEPN7nanojit4LInsEb(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, i1 zeroext) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder3d2uEPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare i32 @_Z21js_DoubleToECMAUint32d(double) + +declare hidden i32 @_ZN2js13TraceRecorder15makeNumberInt32EPN7nanojit4LInsEPS3_(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder16makeNumberUint32EPN7nanojit4LInsEPS3_(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare zeroext i1 @_ZN2js4tjit16IsPromotedUint32EPN7nanojit4LInsE(%"class.nanojit::LIns"*) + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder9stringifyERKNS_5ValueE(%"class.js::TraceRecorder"*, %"class.js::Value"*) nounwind align 2 + +declare hidden zeroext i1 @_ZNK2js13TraceRecorder13canCallImacroEv(%"class.js::TraceRecorder"* nocapture) nounwind readonly align 2 + +declare hidden i32 @_ZN2js13TraceRecorder10callImacroEPh(%"class.js::TraceRecorder"* nocapture, i8*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20callImacroInfalliblyEPh(%"class.js::TraceRecorder"* nocapture, i8*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder4ifopEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder11tableswitchEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder8switchopEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder3incERNS_5ValueEib(%"class.js::TraceRecorder"*, %"class.js::Value"*, i32, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder3incERKNS_5ValueERPN7nanojit4LInsERS1_ib(%"class.js::TraceRecorder"*, %"class.js::Value"* nocapture, %"class.nanojit::LIns"** nocapture, %"class.js::Value"* nocapture, i32, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder9incHelperERKNS_5ValueERPN7nanojit4LInsERS1_S7_i(%"class.js::TraceRecorder"*, %"class.js::Value"* nocapture, %"class.nanojit::LIns"** nocapture, %"class.js::Value"* nocapture, %"class.nanojit::LIns"** nocapture, i32) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder7incPropEib(%"class.js::TraceRecorder"*, i32, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder4propEP8JSObjectPN7nanojit4LInsEPjPS5_PNS_5ValueE(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, i32*, %"class.nanojit::LIns"** nocapture, %"class.js::Value"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder14stobj_set_slotEP8JSObjectPN7nanojit4LInsEjRS5_RKNS_5ValueES5_(%"class.js::TraceRecorder"* nocapture, %struct.JSObject*, %"class.nanojit::LIns"*, i32, %"class.nanojit::LIns"** nocapture, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder7incElemEib(%"class.js::TraceRecorder"*, i32, i1 zeroext) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder15guardDenseArrayEPN7nanojit4LInsENS_8ExitTypeE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, i32) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17denseArrayElementERNS_5ValueES2_RPS1_RPN7nanojit4LInsES8_PNS_10VMSideExitE(%"class.js::TraceRecorder"*, %"class.js::Value"*, %"class.js::Value"*, %"class.js::Value"** nocapture, %"class.nanojit::LIns"** nocapture, %"class.nanojit::LIns"** nocapture, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder14box_value_intoERKNS_5ValueEPN7nanojit4LInsENS_4tjit7AddressE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*, %"struct.js::tjit::Address"* nocapture byval) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14strictEqualityEbb(%"class.js::TraceRecorder"*, i1 zeroext, i1 zeroext) nounwind align 2 + +declare zeroext i1 @_ZN2js12EqualStringsEP9JSContextP8JSStringS3_Pi(%struct.JSContext*, %struct.JSString*, %struct.JSString*, i32*) + +declare hidden i32 @_ZN2js13TraceRecorder8equalityEbb(%"class.js::TraceRecorder"*, i1 zeroext, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14equalityHelperERNS_5ValueES2_PN7nanojit4LInsES5_bbS2_(%"class.js::TraceRecorder"*, %"class.js::Value"*, %"class.js::Value"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, i1 zeroext, i1 zeroext, %"class.js::Value"*) nounwind align 2 + +declare x86_fastcallcc double @_Z17js_StringToNumberP9JSContextP8JSStringPi(%struct.JSContext*, %struct.JSString*, i32*) + +declare hidden i32 @_ZN2js13TraceRecorder21guardNativeConversionERNS_5ValueE(%"class.js::TraceRecorder"*, %"class.js::Value"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder10relationalEN7nanojit7LOpcodeEb(%"class.js::TraceRecorder"*, i32, i1 zeroext) nounwind align 2 + +declare i32 @_ZN7nanojit12cmpOpcodeD2IENS_7LOpcodeE(i32) + +declare hidden i32 @_ZN2js13TraceRecorder5unaryEN7nanojit7LOpcodeE(%"class.js::TraceRecorder"*, i32) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder6binaryEN7nanojit7LOpcodeE(%"class.js::TraceRecorder"*, i32) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder10guardShapeEPN7nanojit4LInsEP8JSObjectjPKcPNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*, %struct.JSObject*, i32, i8* nocapture, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder28forgetGuardedShapesForObjectEP8JSObject(%"class.js::TraceRecorder"*, %struct.JSObject*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19test_property_cacheEP8JSObjectPN7nanojit4LInsERS2_RNS_5PCValE(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, %struct.JSObject**, %"class.js::KidsPointer"* nocapture) nounwind align 2 + +declare %"struct.js::PropertyCacheEntry"* @_Z21js_FindPropertyHelperP9JSContextiiPP8JSObjectS3_PP10JSProperty(%struct.JSContext*, i32, i32, %struct.JSObject**, %struct.JSObject**, %struct.JSProperty**) + +declare i32 @_Z26js_LookupPropertyWithFlagsP9JSContextP8JSObjectijPS2_PP10JSProperty(%struct.JSContext*, %struct.JSObject*, i32, i32, %struct.JSObject**, %struct.JSProperty**) + +declare %"struct.js::PropertyCacheEntry"* @_ZN2js13PropertyCache4fillEP9JSContextP8JSObjectjjS4_PKNS_5ShapeEi(%"class.js::PropertyCache"*, %struct.JSContext*, %struct.JSObject*, i32, i32, %struct.JSObject*, %"struct.js::Shape"*, i32) + +declare hidden i32 @_ZN2js13TraceRecorder21guardPropertyCacheHitEPN7nanojit4LInsEP8JSObjectS5_PNS_18PropertyCacheEntryERNS_5PCValE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %struct.JSObject*, %struct.JSObject*, %"struct.js::PropertyCacheEntry"* nocapture, %"class.js::KidsPointer"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder15stobj_set_fslotEPN7nanojit4LInsEjRKNS_5ValueES3_(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*, i32, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder15stobj_set_dslotEPN7nanojit4LInsEjRS3_RKNS_5ValueES3_(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*, i32, %"class.nanojit::LIns"** nocapture, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder18box_undefined_intoENS_4tjit7AddressE(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder13box_null_intoENS_4tjit7AddressE(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder12unbox_objectENS_4tjit7AddressEPN7nanojit4LInsE11JSValueTypePNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval, %"class.nanojit::LIns"*, i8 zeroext, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder10guardClassEPN7nanojit4LInsEPNS_5ClassEPNS_10VMSideExitENS1_8LoadQualE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*, %"struct.js::Class"*, %"struct.js::VMSideExit"*, i32) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder13guardNotClassEPN7nanojit4LInsEPNS_5ClassEPNS_10VMSideExitENS1_8LoadQualE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*, %"struct.js::Class"*, %"struct.js::VMSideExit"*, i32) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder23unbox_non_double_objectENS_4tjit7AddressEPN7nanojit4LInsE11JSValueTypePNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval, %"class.nanojit::LIns"*, i8 zeroext, %"struct.js::VMSideExit"*) nounwind inlinehint align 2 + +declare hidden void @_ZN2js13TraceRecorder16unbox_any_objectENS_4tjit7AddressEPPN7nanojit4LInsES6_(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval, %"class.nanojit::LIns"** nocapture, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder13is_boxed_trueENS_4tjit7AddressE(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder14is_boxed_magicENS_4tjit7AddressE10JSWhyMagic(%"class.js::TraceRecorder"* nocapture, %"struct.js::tjit::Address"* nocapture byval, i32) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder25box_value_for_native_callERKNS_5ValueEPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder20box_value_into_allocERKNS_5ValueEPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder12is_string_idEPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder15unbox_string_idEPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*) nounwind readnone align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder12unbox_int_idEPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder7getThisERPN7nanojit4LInsE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder16guardClassHelperEbPN7nanojit4LInsEPNS_5ClassEPNS_10VMSideExitENS1_8LoadQualE(%"class.js::TraceRecorder"* nocapture, i1 zeroext, %"class.nanojit::LIns"*, %"struct.js::Class"*, %"struct.js::VMSideExit"*, i32) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder15guardDenseArrayEPN7nanojit4LInsEPNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden zeroext i1 @_ZN2js13TraceRecorder17guardHasPrototypeEP8JSObjectPN7nanojit4LInsEPS2_PS5_PNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %struct.JSObject* nocapture, %"class.nanojit::LIns"*, %struct.JSObject** nocapture, %"class.nanojit::LIns"** nocapture, %"struct.js::VMSideExit"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder36guardPrototypeHasNoIndexedPropertiesEP8JSObjectPN7nanojit4LInsEPNS_10VMSideExitE(%"class.js::TraceRecorder"* nocapture, %struct.JSObject*, %"class.nanojit::LIns"* nocapture, %"struct.js::VMSideExit"*) nounwind align 2 + +declare i32 @_Z32js_PrototypeHasIndexedPropertiesP9JSContextP8JSObject(%struct.JSContext*, %struct.JSObject*) + +declare i32 @JS_ConvertStub(%struct.JSContext*, %struct.JSObject*, i32, i64*) + +declare i32 @_Z13js_TryValueOfP9JSContextP8JSObject6JSTypePN2js5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*) + +declare hidden void @_ZN2js13TraceRecorder36clearReturningFrameFromNativeTrackerEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20putActivationObjectsEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden void @_ZN12JSStackFrame25forEachCanonicalActualArgIN2js6BoxArgEEEvT_(%struct.JSStackFrame*, %"class.js::BoxArg"* nocapture byval) nounwind inlinehint align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_EnterFrameEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17record_LeaveFrameEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare x86_fastcallcc i32 @_ZN2js13functionProbeEP9JSContextP10JSFunctioni(%struct.JSContext* nocapture, %struct.JSFunction* nocapture, i32) nounwind readnone + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder12newArgumentsEPN7nanojit4LInsE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17getClassPrototypeEP8JSObjectRPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, %struct.JSObject*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder17getClassPrototypeE10JSProtoKeyRPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, i32, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare i32 @_Z20js_GetClassPrototypeP9JSContextP8JSObject10JSProtoKeyPS2_PN2js5ClassE(%struct.JSContext*, %struct.JSObject*, i32, %struct.JSObject**, %"struct.js::Class"*) + +declare hidden i32 @_ZN2js13TraceRecorder9newStringEP8JSObjectjPNS_5ValueES4_(%"class.js::TraceRecorder"*, %struct.JSObject*, i32, %"class.js::Value"*, %"class.js::Value"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder8newArrayEP8JSObjectjPNS_5ValueES4_(%"class.js::TraceRecorder"*, %struct.JSObject*, i32, %"class.js::Value"*, %"class.js::Value"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder31propagateFailureToBuiltinStatusEPN7nanojit4LInsERS3_(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder20emitNativePropertyOpEPKNS_5ShapeEPN7nanojit4LInsEbS6_(%"class.js::TraceRecorder"*, %"struct.js::Shape"* nocapture, %"class.nanojit::LIns"*, i1 zeroext, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden %"struct.js::VMSideExit"* @_ZN2js13TraceRecorder17enterDeepBailCallEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder17leaveDeepBailCallEv(%"class.js::TraceRecorder"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14emitNativeCallEP19JSSpecializedNativejPPN7nanojit4LInsEb(%"class.js::TraceRecorder"*, %struct.JSSpecializedNative*, i32, %"class.nanojit::LIns"**, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder21callSpecializedNativeEP17JSNativeTraceInfojb(%"class.js::TraceRecorder"*, %struct.JSNativeTraceInfo* nocapture, i32, i1 zeroext) nounwind align 2 + +declare i32 @strlen(i8* nocapture) nounwind readonly + +declare x86_fastcallcc i32 @_ZN2js16ceilReturningIntEdPi(double, i32* nocapture) nounwind + +declare x86_fastcallcc i32 @_ZN2js17floorReturningIntEdPi(double, i32* nocapture) nounwind + +declare x86_fastcallcc i32 @_ZN2js17roundReturningIntEdPi(double, i32* nocapture) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder21callFloatReturningIntEjPKN7nanojit8CallInfoE(%"class.js::TraceRecorder"*, i32, %"struct.nanojit::CallInfo"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder10callNativeEj4JSOp(%"class.js::TraceRecorder"*, i32, i32) nounwind align 2 + +declare i32 @_Z12js_math_ceilP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_Z13js_math_floorP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_Z13js_math_roundP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare zeroext i1 @_ZN2js4tjit23IsPromotedInt32OrUint32EPN7nanojit4LInsE(%"class.nanojit::LIns"*) + +declare i32 @_Z11js_math_absP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_Z13js_str_charAtP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare hidden i32 @_ZN2js13TraceRecorder9getCharAtEP8JSStringPN7nanojit4LInsES5_4JSOpPS5_(%"class.js::TraceRecorder"*, %struct.JSString* nocapture, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, i32, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare i32 @_Z17js_str_charCodeAtP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare hidden i32 @_ZN2js13TraceRecorder13getCharCodeAtEP8JSStringPN7nanojit4LInsES5_PS5_(%"class.js::TraceRecorder"*, %struct.JSString* nocapture, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare i32 @_Z14js_regexp_execP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare %struct.JSObject* @_ZN2js15HasNativeMethodEP8JSObjectiPFiP9JSContextjPNS_5ValueEE(%struct.JSObject*, i32, i32 (%struct.JSContext*, i32, %"class.js::Value"*)*) + +declare i32 @_Z14js_regexp_testP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_Z11js_math_minP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_Z11js_math_maxP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_Z12js_fun_applyP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_Z11js_fun_callP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare hidden i32 @_ZN2js13TraceRecorder12functionCallEj4JSOp(%"class.js::TraceRecorder"*, i32, i32) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder11guardCalleeERNS_5ValueE(%"class.js::TraceRecorder"*, %"class.js::Value"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder23interpretedFunctionCallERNS_5ValueEP10JSFunctionjb(%"class.js::TraceRecorder"*, %"class.js::Value"*, %struct.JSFunction* nocapture, i32, i1 zeroext) nounwind align 2 + +declare i32 @_Z8js_ArrayP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_Z9js_StringP9JSContextjPN2js5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare x86_fastcallcc i32 @_ZN2js12DeleteIntKeyEP9JSContextP8JSObjectii(%struct.JSContext*, %struct.JSObject*, i32, i32) nounwind + +declare x86_fastcallcc i32 @_ZN2js12DeleteStrKeyEP9JSContextP8JSObjectP8JSStringi(%struct.JSContext*, %struct.JSObject*, %struct.JSString*, i32) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder7incNameEib(%"class.js::TraceRecorder"*, i32, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder4nameERPNS_5ValueERPN7nanojit4LInsERNS0_10NameResultE(%"class.js::TraceRecorder"*, %"class.js::Value"** nocapture, %"class.nanojit::LIns"** nocapture, %"struct.js::TraceRecorder::NameResult"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder11setCallPropEP8JSObjectPN7nanojit4LInsEPKNS_5ShapeES5_RKNS_5ValueE(%"class.js::TraceRecorder"*, %struct.JSObject* nocapture, %"class.nanojit::LIns"*, %"struct.js::Shape"* nocapture, %"class.nanojit::LIns"*, %"class.js::Value"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder7getPropERNS_5ValueE(%"class.js::TraceRecorder"*, %"class.js::Value"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder22lookupForSetPropertyOpEP8JSObjectPN7nanojit4LInsEiPbPS2_PPKNS_5ShapeE(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, i32, i8* nocapture, %struct.JSObject** nocapture, %"struct.js::Shape"** nocapture) nounwind align 2 + +declare x86_fastcallcc i32 @_ZN2js18MethodWriteBarrierEP9JSContextP8JSObjectjPKNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"* nocapture) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder9nativeSetEP8JSObjectPN7nanojit4LInsEPKNS_5ShapeERKNS_5ValueES5_(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, %"struct.js::Shape"* nocapture, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder15addDataPropertyEP8JSObject(%"class.js::TraceRecorder"* nocapture, %struct.JSObject*) nounwind readonly align 2 + +declare i32 @JS_PropertyStub(%struct.JSContext*, %struct.JSObject*, i32, i64*) + +declare i32 @JS_StrictPropertyStub(%struct.JSContext*, %struct.JSObject*, i32, i32, i64*) + +declare hidden i32 @_ZN2js13TraceRecorder18record_AddPropertyEP8JSObject(%"class.js::TraceRecorder"*, %struct.JSObject*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19setUpwardTrackedVarEPNS_5ValueERKS1_PN7nanojit4LInsE(%"class.js::TraceRecorder"*, %"class.js::Value"*, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden zeroext i8 @_ZN2js13TraceRecorder17determineSlotTypeEPNS_5ValueE(%"class.js::TraceRecorder"* nocapture, %"class.js::Value"*) nounwind inlinehint align 2 + +declare i32 @_ZN2js10SetCallArgEP9JSContextP8JSObjectiiPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, i32, %"class.js::Value"*) + +declare i32 @_ZN2js10SetCallVarEP9JSContextP8JSObjectiiPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, i32, %"class.js::Value"*) + +declare hidden i32 @_ZN2js13TraceRecorder11setPropertyEP8JSObjectPN7nanojit4LInsERKNS_5ValueES5_Pb(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, %"class.js::Value"* nocapture, %"class.nanojit::LIns"*, i8* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder19recordSetPropertyOpEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder20recordInitPropertyOpEh(%"class.js::TraceRecorder"*, i8 zeroext) nounwind align 2 + +declare i32 @_Z22js_CheckForStringIndexi(i32) + +declare hidden void @_ZN2js13TraceRecorder13finishGetPropEPN7nanojit4LInsES3_S3_PNS_5ValueE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.js::Value"*) nounwind align 2 + +declare x86_fastcallcc i32 @_ZN2js17GetPropertyByNameEP9JSContextP8JSObjectPP8JSStringPNS_5ValueEPNS_8PICTableE(%struct.JSContext*, %struct.JSObject*, %struct.JSString** nocapture, %"class.js::Value"*, %"struct.js::PICTable"* nocapture) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder24primitiveToStringInPlaceEPNS_5ValueE(%"class.js::TraceRecorder"*, %"class.js::Value"*) nounwind align 2 + +declare %struct.JSString* @_Z16js_ValueToStringP9JSContextRKN2js5ValueE(%struct.JSContext*, %"class.js::Value"*) + +declare hidden i32 @_ZN2js13TraceRecorder17getPropertyByNameEPN7nanojit4LInsEPNS_5ValueES5_(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.js::Value"*, %"class.js::Value"*) nounwind align 2 + +declare x86_fastcallcc i32 @_ZN2js18GetPropertyByIndexEP9JSContextP8JSObjectiPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder18getPropertyByIndexEPN7nanojit4LInsES3_PNS_5ValueE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.js::Value"*) nounwind align 2 + +declare x86_fastcallcc i32 @_ZN2js15GetPropertyByIdEP9JSContextP8JSObjectiPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder15getPropertyByIdEPN7nanojit4LInsEPNS_5ValueE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.js::Value"*) nounwind align 2 + +declare x86_fastcallcc i32 @_ZN2js27GetPropertyWithNativeGetterEP9JSContextP8JSObjectPNS_5ShapeEPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, %"struct.js::Shape"* nocapture, %"class.js::Value"*) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder27getPropertyWithNativeGetterEPN7nanojit4LInsEPKNS_5ShapeEPNS_5ValueE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"struct.js::Shape"*, %"class.js::Value"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder27getPropertyWithScriptGetterEP8JSObjectPN7nanojit4LInsEPKNS_5ShapeE(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, %"struct.js::Shape"* nocapture) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder13getUnitStringEPN7nanojit4LInsES3_(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder12guardNotHoleEPN7nanojit4LInsES3_(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden %struct.JSStackFrame* @_ZN2js13TraceRecorder14guardArgumentsEP8JSObjectPN7nanojit4LInsEPj(%"class.js::TraceRecorder"*, %struct.JSObject* nocapture, %"class.nanojit::LIns"*, i32*) nounwind align 2 + +declare i32 @_Z15js_IsTypedArrayP8JSObject(%struct.JSObject*) + +declare hidden i32 @_ZN2js13TraceRecorder17typedArrayElementERNS_5ValueES2_RPS1_RPN7nanojit4LInsE(%"class.js::TraceRecorder"*, %"class.js::Value"*, %"class.js::Value"*, %"class.js::Value"** nocapture, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare x86_fastcallcc i32 @_ZN2js17SetPropertyByNameEP9JSContextP8JSObjectPP8JSStringPNS_5ValueEi(%struct.JSContext*, %struct.JSObject*, %struct.JSString** nocapture, %"class.js::Value"*, i32) nounwind + +declare x86_fastcallcc i32 @_ZN2js18InitPropertyByNameEP9JSContextP8JSObjectPP8JSStringPKNS_5ValueE(%struct.JSContext*, %struct.JSObject*, %struct.JSString** nocapture, %"class.js::Value"*) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder23initOrSetPropertyByNameEPN7nanojit4LInsEPNS_5ValueES5_b(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.js::Value"*, %"class.js::Value"*, i1 zeroext) nounwind align 2 + +declare x86_fastcallcc i32 @_ZN2js18SetPropertyByIndexEP9JSContextP8JSObjectiPNS_5ValueEi(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*, i32) nounwind + +declare x86_fastcallcc i32 @_ZN2js19InitPropertyByIndexEP9JSContextP8JSObjectiPKNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder24initOrSetPropertyByIndexEPN7nanojit4LInsES3_PNS_5ValueEb(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"*, %"class.js::Value"*, i1 zeroext) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder7setElemEiii(%"class.js::TraceRecorder"*, i32, i32, i32) nounwind align 2 + +declare %"struct.js::TypedArray"* @_ZN2js10TypedArray12fromJSObjectEP8JSObject(%struct.JSObject*) + +declare x86_fastcallcc i32 @_Z27js_EnsureDenseArrayCapacityP9JSContextP8JSObjecti(%struct.JSContext*, %struct.JSObject*, i32) + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder5upvarEP8JSScriptP12JSUpvarArrayjRNS_5ValueE(%"class.js::TraceRecorder"*, %struct.JSScript* nocapture, %struct.JSUpvarArray* nocapture, i32, %"class.js::Value"* nocapture) nounwind align 2 + +declare %"class.js::Value"* @_ZN2js8GetUpvarEP9JSContextjNS_11UpvarCookieE(%struct.JSContext*, i32, %"class.js::KidsPointer"* byval) + +declare hidden i32 @_ZN2js13TraceRecorder10createThisER8JSObjectPN7nanojit4LInsEPS5_(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare %"struct.js::Shape"* @_ZN2js34LookupInterpretedFunctionPrototypeEP9JSContextP8JSObject(%struct.JSContext*, %struct.JSObject*) + +declare hidden %"struct.js::FrameInfo"* @_ZN2js14FrameInfoCache7memoizeEPNS_9FrameInfoE(%"class.js::FrameInfoCache"* nocapture, %"struct.js::FrameInfo"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder26guardArgsLengthNotAssignedEPN7nanojit4LInsE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder25record_NativeCallCompleteEv(%"class.js::TraceRecorder"*) nounwind align 2 + +declare x86_fastcallcc %struct.JSObject* @_ZN2js17MethodReadBarrierEP9JSContextP8JSObjectPNS_5ShapeES3_(%struct.JSContext*, %struct.JSObject*, %"struct.js::Shape"*, %struct.JSObject*) nounwind + +declare hidden i32 @_ZN2js13TraceRecorder8propTailEP8JSObjectPN7nanojit4LInsES2_NS_5PCValEPjPS5_PNS_5ValueE(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*, %struct.JSObject*, %"class.js::KidsPointer"* nocapture byval, i32*, %"class.nanojit::LIns"** nocapture, %"class.js::Value"*) nounwind align 2 + +declare hidden %"class.nanojit::LIns"* @_ZN2js13TraceRecorder16canonicalizeNaNsEPN7nanojit4LInsE(%"class.js::TraceRecorder"* nocapture, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder7getPropEP8JSObjectPN7nanojit4LInsE(%"class.js::TraceRecorder"*, %struct.JSObject*, %"class.nanojit::LIns"*) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder12getFullIndexEi(%"class.js::TraceRecorder"* nocapture, i32) nounwind readonly align 2 + +declare x86_fastcallcc i32 @_ZN2js16ObjectToIteratorEP9JSContextP8JSObjectiPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, i32, %"class.js::Value"*) nounwind + +declare x86_fastcallcc i32 @_ZN2js12IteratorMoreEP9JSContextP8JSObjectPNS_5ValueE(%struct.JSContext*, %struct.JSObject*, %"class.js::Value"*) nounwind + +declare x86_fastcallcc i32 @_ZN2js13CloseIteratorEP9JSContextP8JSObject(%struct.JSContext*, %struct.JSObject*) nounwind + +declare hidden void @_ZN2js13TraceRecorder10storeMagicE10JSWhyMagicNS_4tjit7AddressE(%"class.js::TraceRecorder"* nocapture, i32, %"struct.js::tjit::Address"* nocapture byval) nounwind align 2 + +declare hidden i32 @_ZN2js13TraceRecorder14unboxNextValueERPN7nanojit4LInsE(%"class.js::TraceRecorder"*, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare %struct.JSObject* @_Z21js_FindIdentifierBaseP9JSContextP8JSObjecti(%struct.JSContext*, %struct.JSObject*, i32) + +declare x86_fastcallcc i32 @_ZN2js18HasInstanceOnTraceEP9JSContextP8JSObjectPKNS_5ValueE(%struct.JSContext*, %struct.JSObject*, %"class.js::Value"*) nounwind + +declare i32 @_ZN2js10array_sortEP9JSContextjPNS_5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare i32 @_ZN2js11str_replaceEP9JSContextjPNS_5ValueE(%struct.JSContext*, i32, %"class.js::Value"*) + +declare %struct.JSObject* @_ZN2js17GetBlockChainFastEP9JSContextP12JSStackFrame4JSOpm(%struct.JSContext*, %struct.JSStackFrame*, i32, i32) + +declare hidden i32 @_ZN2js13TraceRecorder25record_DefLocalFunSetSlotEjP8JSObject(%"class.js::TraceRecorder"*, i32, %struct.JSObject* nocapture) nounwind align 2 + +declare hidden x86_fastcallcc i32 @_ZN2js10js_UnbrandEP9JSContextP8JSObject(%struct.JSContext*, %struct.JSObject*) nounwind + +declare hidden void @_ZN2js13TraceRecorder17captureStackTypesEjP11JSValueType(%"class.js::TraceRecorder"* nocapture, i32, i8*) nounwind align 2 + +declare hidden void @_ZN2js13TraceRecorder20determineGlobalTypesEP11JSValueType(%"class.js::TraceRecorder"*, i8*) nounwind align 2 + +declare hidden i32 @_ZN2js16RecordTracePointEP9JSContextPNS_12TraceMonitorERjPbb(%struct.JSContext*, %"struct.js::TraceMonitor"*, i32*, i8*, i1 zeroext) nounwind + +declare zeroext i1 @_ZN2js9InterpretEP9JSContextP12JSStackFramej12JSInterpMode(%struct.JSContext*, %struct.JSStackFrame*, i32, i32) + +declare hidden void @_ZN2js11LoopProfileC1EPNS_12TraceMonitorEP12JSStackFramePhS5_(%"class.js::LoopProfile"*, %"struct.js::TraceMonitor"*, %struct.JSStackFrame*, i8*, i8*) nounwind align 2 + +declare hidden void @_ZN2js11LoopProfileC2EPNS_12TraceMonitorEP12JSStackFramePhS5_(%"class.js::LoopProfile"*, %"struct.js::TraceMonitor"*, %struct.JSStackFrame*, i8*, i8*) nounwind align 2 + +declare hidden void @_ZN2js11LoopProfile5resetEv(%"class.js::LoopProfile"* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js11LoopProfile15profileLoopEdgeEP9JSContextRj(%"class.js::LoopProfile"*, %struct.JSContext*, i32* nocapture) nounwind align 2 + +declare hidden void @_ZN2js11LoopProfile6decideEP9JSContext(%"class.js::LoopProfile"*, %struct.JSContext*) nounwind align 2 + +declare hidden void @_ZN2js11LoopProfile13stopProfilingEP9JSContext(%"class.js::LoopProfile"* nocapture, %struct.JSContext* nocapture) nounwind align 2 + +declare hidden i32 @_ZN2js17MonitorTracePointEP9JSContextRjPbPPvPjS6_j(%struct.JSContext*, i32*, i8*, i8** nocapture, i32* nocapture, i32* nocapture, i32) nounwind + +declare hidden i32 @_ZN2js11LoopProfile16profileOperationEP9JSContext4JSOp(%"class.js::LoopProfile"*, %struct.JSContext*, i32) nounwind align 2 + +declare zeroext i1 @_Z17js_IsMathFunctionPFiP9JSContextjPyE(i32 (%struct.JSContext*, i32, i64*)*) + +declare i32 @_ZN2js4mjit18GetCallTargetCountEP8JSScriptPh(%struct.JSScript*, i8*) + +declare i32 @_Z17js_ValueToBooleanRKN2js5ValueE(%"class.js::Value"*) + +declare hidden zeroext i1 @_ZN2js11LoopProfile22isCompilationExpensiveEP9JSContextj(%"class.js::LoopProfile"* nocapture, %struct.JSContext*, i32) nounwind align 2 + +declare hidden zeroext i1 @_ZN2js11LoopProfile25isCompilationUnprofitableEP9JSContextj(%"class.js::LoopProfile"* nocapture, %struct.JSContext* nocapture, i32) nounwind align 2 + +declare hidden i32 @_ZN2js15MonitorLoopEdgeEP9JSContextRj12JSInterpMode(%struct.JSContext*, i32*, i32) nounwind + +declare hidden i32 @_ZN2js10GetHotloopEP9JSContext(%struct.JSContext* nocapture) nounwind readonly + +declare fastcc void @_ZN2js15VisitFrameSlotsINS_19CaptureTypesVisitorEEEbRT_P9JSContextjP12JSStackFrameS7_(%"class.js::CaptureTypesVisitor"*, %struct.JSContext*, i32, %struct.JSStackFrame*, %struct.JSStackFrame*) nounwind + +declare hidden zeroext i1 @_ZN2js6detail9HashTableINS_7HashMapIPN7nanojit4LInsEP8JSObjectNS_13DefaultHasherIS5_EENS_18ContextAllocPolicyEE5EntryENSB_13MapHashPolicyESA_E15changeTableSizeEi(%33* nocapture, i32) nounwind align 2 + +declare hidden %"class.js::detail::HashTable, js::ContextAllocPolicy>::Entry, js::HashMap, js::ContextAllocPolicy>::MapHashPolicy, js::ContextAllocPolicy>::Entry"* @_ZN2js6detail9HashTableINS_7HashMapIPN7nanojit4LInsEP8JSObjectNS_13DefaultHasherIS5_EENS_18ContextAllocPolicyEE5EntryENSB_13MapHashPolicyESA_E11createTableERSA_j(%"class.js::ContextAllocPolicy"* nocapture, i32) nounwind align 2 + +declare void @_ZN2js14GCHelperThread21replenishAndFreeLaterEPv(%"class.js::GCHelperThread"*, i8*) + +declare i8* @_ZN9JSRuntime13onOutOfMemoryEPvmP9JSContext(%struct.JSRuntime*, i8*, i32, %struct.JSContext*) + +declare void @_ZN9JSRuntime15onTooMuchMallocEv(%struct.JSRuntime*) + +declare void @_Z27js_ReportAllocationOverflowP9JSContext(%struct.JSContext*) + +declare hidden zeroext i1 @_ZN2js6detail9HashTableINS_7HashMapIPN7nanojit4LInsEP8JSObjectNS_13DefaultHasherIS5_EENS_18ContextAllocPolicyEE5EntryENSB_13MapHashPolicyESA_E3addERNSE_6AddPtrE(%33* nocapture, %"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::AddPtr"* nocapture) nounwind align 2 + +declare hidden void @_ZN2js6detail9HashTableINS_7HashMapIPN7nanojit4LInsEP8JSObjectNS_13DefaultHasherIS5_EENS_18ContextAllocPolicyEE5EntryENSB_13MapHashPolicyESA_E3Ptr7nonNullEv(%"class.js::detail::HashTable, js::ContextAllocPolicy>::Entry, js::HashMap, js::ContextAllocPolicy>::MapHashPolicy, js::ContextAllocPolicy>::Ptr"* nocapture) nounwind readnone align 2 + +declare hidden i64 @_ZNK2js6detail9HashTableINS_7HashMapIPN7nanojit4LInsEP8JSObjectNS_13DefaultHasherIS5_EENS_18ContextAllocPolicyEE5EntryENSB_13MapHashPolicyESA_E12lookupForAddERKS5_(%33* nocapture, %"class.nanojit::LIns"** nocapture) nounwind align 2 + +declare hidden zeroext i1 @_ZN2js6detail9HashTableINS_7HashMapIPhmNS_13DefaultHasherIS3_EENS_17SystemAllocPolicyEE5EntryENS7_13MapHashPolicyES6_E15changeTableSizeEi(%40* nocapture, i32) nounwind align 2 + +declare hidden zeroext i1 @_ZN2js6detail9HashTableIKP8JSScriptNS_7HashSetIS3_NS_13DefaultHasherIS3_EENS_17SystemAllocPolicyEE6SetOpsES8_E15changeTableSizeEi(%44* nocapture, i32) nounwind align 2 + +declare hidden void @_ZN2js6detail9HashTableIKP8JSScriptNS_7HashSetIS3_NS_13DefaultHasherIS3_EENS_17SystemAllocPolicyEE6SetOpsES8_E3Ptr7nonNullEv(%"class.js::detail::HashTable, js::SystemAllocPolicy>::SetOps, js::SystemAllocPolicy>::Ptr"* nocapture) nounwind readnone align 2 + +declare void @_ZN7nanojit9AllocatorD2Ev(%"class.nanojit::Allocator"*) + +declare void @_ZN7nanojit9CodeAllocD1Ev(%"class.nanojit::CodeAlloc"*) + +declare void @free(i8* nocapture) nounwind + +declare void @_ZN7nanojit9CodeAllocC1Ev(%"class.nanojit::CodeAlloc"*) + +declare void @_ZN7nanojit9AllocatorC2Ev(%"class.nanojit::Allocator"*) + +declare fastcc void @_ZN2js15VisitFrameSlotsINS_21DetermineTypesVisitorEEEbRT_P9JSContextjP12JSStackFrameS7_(%"class.js::DetermineTypesVisitor"*, %struct.JSContext*, i32, %struct.JSStackFrame*, %struct.JSStackFrame*) nounwind + +declare %80 @llvm.umul.with.overflow.i32(i32, i32) nounwind readnone + +declare noalias i8* @realloc(i8* nocapture, i32) nounwind + +declare fastcc void @_ZN2js15VisitFrameSlotsINS_17ClearSlotsVisitorEEEbRT_P9JSContextjP12JSStackFrameS7_(%"class.js::ClearSlotsVisitor"*, %struct.JSContext*, i32, %struct.JSStackFrame*, %struct.JSStackFrame*) nounwind + +define linkonce_odr hidden void @_ZN2js5QueueINS_7SlotMap8SlotInfoEE6ensureEj(%67* nocapture %this, i32 %size) nounwind align 2 { + br i1 undef, label %14, label %1 + +;