From dpatel at apple.com Mon Aug 27 01:16:22 2007
From: dpatel at apple.com (Devang Patel)
Date: Sun, 26 Aug 2007 23:16:22 -0700
Subject: [llvm-commits] [llvm] r41394 -
/llvm/trunk/lib/Transforms/Scalar/LoopIndexSplit.cpp
In-Reply-To: <200708250239.l7P2dOZn011844@zion.cs.uiuc.edu>
References: <200708250239.l7P2dOZn011844@zion.cs.uiuc.edu>
Message-ID: <8DC10931-F83C-4E3B-BB24-FB1A8C17ED36@apple.com>
On Aug 24, 2007, at 7:39 PM, Devang Patel wrote:
> Move exit condition and exit branch from exiting block into loop
> header and dominator info. This avoid execution of dead iteration.
> Loop is already filter in the beginning such that this change is safe.
err...
... move exit condition and exit branch from loop exiting block into
split condition block and update dominator info.
-
Devang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070826/d637c35e/attachment.html
From rafael.espindola at gmail.com Mon Aug 27 05:18:21 2007
From: rafael.espindola at gmail.com (Rafael Espindola)
Date: Mon, 27 Aug 2007 10:18:21 -0000
Subject: [llvm-commits] [llvm] r41479 - in /llvm/trunk:
lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/2004-02-12-Memcpy.llx
Message-ID: <200708271018.l7RAILvU000581@zion.cs.uiuc.edu>
Author: rafael
Date: Mon Aug 27 05:18:20 2007
New Revision: 41479
URL: http://llvm.org/viewvc/llvm-project?rev=41479&view=rev
Log:
call libc memcpy/memset if array size is bigger then threshold.
Coping 100MB array (after a warmup) shows that glibc 2.6.1 implementation on
x86-64 (core 2) is 30% faster (from 0.270917s to 0.188079s)
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/test/CodeGen/X86/2004-02-12-Memcpy.llx
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=41479&r1=41478&r2=41479&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Mon Aug 27 05:18:20 2007
@@ -3753,10 +3753,10 @@
if (Align == 0) Align = 1;
ConstantSDNode *I = dyn_cast(Op.getOperand(3));
- // If not DWORD aligned, call memset if size is less than the threshold.
+ // If not DWORD aligned or size is more than the threshold, call memset.
// It knows how to align to the right boundary first.
if ((Align & 3) != 0 ||
- (I && I->getValue() < Subtarget->getMinRepStrSizeThreshold())) {
+ (I && I->getValue() > Subtarget->getMinRepStrSizeThreshold())) {
MVT::ValueType IntPtr = getPointerTy();
const Type *IntPtrTy = getTargetData()->getIntPtrType();
TargetLowering::ArgListTy Args;
@@ -3909,10 +3909,10 @@
if (Align == 0) Align = 1;
ConstantSDNode *I = dyn_cast(Op.getOperand(3));
- // If not DWORD aligned, call memcpy if size is less than the threshold.
+ // If not DWORD aligned or size is more than the threshold, call memcpy.
// It knows how to align to the right boundary first.
if ((Align & 3) != 0 ||
- (I && I->getValue() < Subtarget->getMinRepStrSizeThreshold())) {
+ (I && I->getValue() > Subtarget->getMinRepStrSizeThreshold())) {
MVT::ValueType IntPtr = getPointerTy();
TargetLowering::ArgListTy Args;
TargetLowering::ArgListEntry Entry;
Modified: llvm/trunk/test/CodeGen/X86/2004-02-12-Memcpy.llx
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2004-02-12-Memcpy.llx?rev=41479&r1=41478&r2=41479&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/2004-02-12-Memcpy.llx (original)
+++ llvm/trunk/test/CodeGen/X86/2004-02-12-Memcpy.llx Mon Aug 27 05:18:20 2007
@@ -1,24 +1,26 @@
-; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 | grep movs
-declare void %llvm.memcpy.i32(sbyte* %A, sbyte* %B, uint %amt, uint %align)
+; RUN: llvm-as < %s | llc -march=x86 | grep movs | count 1
+; RUN: llvm-as < %s | llc -march=x86 | grep memcpy | count 2
-%A = global [1000 x int] zeroinitializer
-%B = global [1000 x int] zeroinitializer
+ at A = global [32 x i32] zeroinitializer
+ at B = global [32 x i32] zeroinitializer
+declare void @llvm.memcpy.i32(i8*, i8*, i32, i32)
-void %main() {
+define void @main() {
; dword copy
- call void %llvm.memcpy.i32(sbyte* cast (int* getelementptr ([1000 x int]* %A, long 0, long 0) to sbyte*),
- sbyte* cast (int* getelementptr ([1000 x int]* %B, long 0, long 0) to sbyte*),
- uint 4000, uint 4)
+ call void @llvm.memcpy.i32(i8* bitcast ([32 x i32]* @A to i8*),
+ i8* bitcast ([32 x i32]* @B to i8*),
+ i32 128, i32 4 )
; word copy
- call void %llvm.memcpy.i32(sbyte* cast (int* getelementptr ([1000 x int]* %A, long 0, long 0) to sbyte*),
- sbyte* cast (int* getelementptr ([1000 x int]* %B, long 0, long 0) to sbyte*),
- uint 4000, uint 2)
+ call void @llvm.memcpy.i32( i8* bitcast ([32 x i32]* @A to i8*),
+ i8* bitcast ([32 x i32]* @B to i8*),
+ i32 128, i32 2 )
; byte copy
- call void %llvm.memcpy.i32(sbyte* cast (int* getelementptr ([1000 x int]* %A, long 0, long 0) to sbyte*),
- sbyte* cast (int* getelementptr ([1000 x int]* %B, long 0, long 0) to sbyte*),
- uint 4000, uint 1)
+ call void @llvm.memcpy.i32( i8* bitcast ([32 x i32]* @A to i8*),
+ i8* bitcast ([32 x i32]* @B to i8*),
+ i32 128, i32 1 )
+
ret void
}
From baldrick at free.fr Mon Aug 27 07:53:49 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 12:53:49 -0000
Subject: [llvm-commits] [llvm-gcc-4.0] r41480 -
/llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp
Message-ID: <200708271253.l7RCrnVv005638@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 07:53:48 2007
New Revision: 41480
URL: http://llvm.org/viewvc/llvm-project?rev=41480&view=rev
Log:
Turn on exception handling code generation.
Modified:
llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp
Modified: llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp?rev=41480&r1=41479&r2=41480&view=diff
==============================================================================
--- llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm-backend.cpp Mon Aug 27 07:53:48 2007
@@ -122,9 +122,8 @@
Args.push_back("--debug-pass=Structure");
if (flag_debug_pass_arguments)
Args.push_back("--debug-pass=Arguments");
-// Disabled until PR1224 is resolved.
- //if (flag_exceptions)
- // Args.push_back("--enable-eh");
+ if (flag_exceptions)
+ Args.push_back("--enable-eh");
// If there are options that should be passed through to the LLVM backend
// directly from the command line, do so now. This is mainly for debugging
From baldrick at free.fr Mon Aug 27 07:56:28 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 12:56:28 -0000
Subject: [llvm-commits] [llvm-gcc-4.2] r41481 -
/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
Message-ID: <200708271256.l7RCuSWN005749@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 07:56:28 2007
New Revision: 41481
URL: http://llvm.org/viewvc/llvm-project?rev=41481&view=rev
Log:
Turn on exception handling codegen.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
Modified: llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp?rev=41481&r1=41480&r2=41481&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Mon Aug 27 07:56:28 2007
@@ -123,9 +123,8 @@
Args.push_back("--debug-pass=Structure");
if (flag_debug_pass_arguments)
Args.push_back("--debug-pass=Arguments");
-// Disabled until PR1224 is resolved.
- //if (flag_exceptions)
- // Args.push_back("--enable-eh");
+ if (flag_exceptions)
+ Args.push_back("--enable-eh");
// If there are options that should be passed through to the LLVM backend
// directly from the command line, do so now. This is mainly for debugging
From dalej at apple.com Mon Aug 27 09:32:45 2007
From: dalej at apple.com (Dale Johannesen)
Date: Mon, 27 Aug 2007 07:32:45 -0700
Subject: [llvm-commits] [llvm] r41479 - in /llvm/trunk:
lib/Target/X86/X86ISelLowering.cpp
test/CodeGen/X86/2004-02-12-Memcpy.llx
In-Reply-To: <200708271018.l7RAILvU000581@zion.cs.uiuc.edu>
References: <200708271018.l7RAILvU000581@zion.cs.uiuc.edu>
Message-ID:
On Aug 27, 2007, at 3:18 AM, Rafael Espindola wrote:
> Coping 100MB array (after a warmup) shows that glibc 2.6.1
> implementation on
> x86-64 (core 2) is 30% faster (from 0.270917s to 0.188079s)
Please record this information in a comment? It is likely other
people will want to revise this area later for their target of
interest. Don't want them to break yours.
From djg at cray.com Mon Aug 27 09:50:11 2007
From: djg at cray.com (Dan Gohman)
Date: Mon, 27 Aug 2007 14:50:11 -0000
Subject: [llvm-commits] [llvm] r41482 - in /llvm/trunk:
include/llvm/ADT/FoldingSet.h include/llvm/CodeGen/LiveInterval.h
include/llvm/CodeGen/MachineConstantPool.h
include/llvm/CodeGen/MachineFunction.h
include/llvm/CodeGen/RegisterScavenging.h
include/llvm/CodeGen/SelectionDAGISel.h
include/llvm/CodeGen/SimpleRegisterCoalescing.h
include/llvm/Support/FileUtilities.h
include/llvm/Target/TargetELFWriterInfo.h
include/llvm/Target/TargetLowering.h lib/CodeGen/DwarfWriter.cpp
lib/CodeGen/PhysRegTracker.h
Message-ID: <200708271450.l7REoC50012551@zion.cs.uiuc.edu>
Author: djg
Date: Mon Aug 27 09:50:10 2007
New Revision: 41482
URL: http://llvm.org/viewvc/llvm-project?rev=41482&view=rev
Log:
Add explicit keywords and remove spurious trailing semicolons.
Modified:
llvm/trunk/include/llvm/ADT/FoldingSet.h
llvm/trunk/include/llvm/CodeGen/LiveInterval.h
llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h
llvm/trunk/include/llvm/CodeGen/MachineFunction.h
llvm/trunk/include/llvm/CodeGen/RegisterScavenging.h
llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h
llvm/trunk/include/llvm/Support/FileUtilities.h
llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h
llvm/trunk/include/llvm/Target/TargetLowering.h
llvm/trunk/lib/CodeGen/DwarfWriter.cpp
llvm/trunk/lib/CodeGen/PhysRegTracker.h
Modified: llvm/trunk/include/llvm/ADT/FoldingSet.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/FoldingSet.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/FoldingSet.h (original)
+++ llvm/trunk/include/llvm/ADT/FoldingSet.h Mon Aug 27 09:50:10 2007
@@ -119,7 +119,7 @@
unsigned NumNodes;
public:
- FoldingSetImpl(unsigned Log2InitSize = 6);
+ explicit FoldingSetImpl(unsigned Log2InitSize = 6);
virtual ~FoldingSetImpl();
// Forward declaration.
@@ -232,7 +232,7 @@
}
public:
- FoldingSet(unsigned Log2InitSize = 6)
+ explicit FoldingSet(unsigned Log2InitSize = 6)
: FoldingSetImpl(Log2InitSize)
{}
Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Mon Aug 27 09:50:10 2007
@@ -96,8 +96,8 @@
unsigned def;
unsigned reg;
SmallVector kills;
- VNInfo() : def(~1U), reg(0) {};
- VNInfo(unsigned d, unsigned r) : def(d), reg(r) {};
+ VNInfo() : def(~1U), reg(0) {}
+ VNInfo(unsigned d, unsigned r) : def(d), reg(r) {}
};
private:
SmallVector ValueNumberInfo;
Modified: llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h Mon Aug 27 09:50:10 2007
@@ -36,7 +36,7 @@
public:
explicit MachineConstantPoolValue(const Type *ty) : Ty(ty) {}
- virtual ~MachineConstantPoolValue() {};
+ virtual ~MachineConstantPoolValue() {}
/// getType - get type of this MachineConstantPoolValue.
///
Modified: llvm/trunk/include/llvm/CodeGen/MachineFunction.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFunction.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineFunction.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineFunction.h Mon Aug 27 09:50:10 2007
@@ -73,7 +73,7 @@
/// of type are accessed/created with MF::getInfo and destroyed when the
/// MachineFunction is destroyed.
struct MachineFunctionInfo {
- virtual ~MachineFunctionInfo() {};
+ virtual ~MachineFunctionInfo() {}
};
class MachineFunction : private Annotation {
Modified: llvm/trunk/include/llvm/CodeGen/RegisterScavenging.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/RegisterScavenging.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/RegisterScavenging.h (original)
+++ llvm/trunk/include/llvm/CodeGen/RegisterScavenging.h Mon Aug 27 09:50:10 2007
@@ -55,11 +55,11 @@
public:
RegScavenger()
: MBB(NULL), NumPhysRegs(0), Tracking(false),
- ScavengingFrameIndex(-1), ScavengedReg(0), ScavengedRC(NULL) {};
+ ScavengingFrameIndex(-1), ScavengedReg(0), ScavengedRC(NULL) {}
explicit RegScavenger(MachineBasicBlock *mbb)
: MBB(mbb), NumPhysRegs(0), Tracking(false),
- ScavengingFrameIndex(-1), ScavengedReg(0), ScavengedRC(NULL) {};
+ ScavengingFrameIndex(-1), ScavengedReg(0), ScavengedRC(NULL) {}
/// enterBasicBlock - Start tracking liveness from the begin of the specific
/// basic block.
Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h Mon Aug 27 09:50:10 2007
@@ -104,7 +104,7 @@
};
struct JumpTable {
JumpTable(unsigned R, unsigned J, MachineBasicBlock *M,
- MachineBasicBlock *D): Reg(R), JTI(J), MBB(M), Default(D) {};
+ MachineBasicBlock *D): Reg(R), JTI(J), MBB(M), Default(D) {}
/// Reg - the virtual register containing the index of the jump table entry
//. to jump to.
@@ -120,7 +120,7 @@
struct JumpTableHeader {
JumpTableHeader(uint64_t F, uint64_t L, Value* SV, MachineBasicBlock* H,
bool E = false):
- First(F), Last(L), SValue(SV), HeaderBB(H), Emitted(E) {};
+ First(F), Last(L), SValue(SV), HeaderBB(H), Emitted(E) {}
uint64_t First;
uint64_t Last;
Value *SValue;
@@ -131,7 +131,7 @@
struct BitTestCase {
BitTestCase(uint64_t M, MachineBasicBlock* T, MachineBasicBlock* Tr):
- Mask(M), ThisBB(T), TargetBB(Tr) { };
+ Mask(M), ThisBB(T), TargetBB(Tr) { }
uint64_t Mask;
MachineBasicBlock* ThisBB;
MachineBasicBlock* TargetBB;
@@ -145,7 +145,7 @@
MachineBasicBlock* P, MachineBasicBlock* D,
const BitTestInfo& C):
First(F), Range(R), SValue(SV), Reg(Rg), Emitted(E),
- Parent(P), Default(D), Cases(C) { };
+ Parent(P), Default(D), Cases(C) { }
uint64_t First;
uint64_t Range;
Value *SValue;
Modified: llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SimpleRegisterCoalescing.h Mon Aug 27 09:50:10 2007
@@ -47,7 +47,7 @@
public:
static char ID; // Pass identifcation, replacement for typeid
- SimpleRegisterCoalescing() : MachineFunctionPass((intptr_t)&ID) {};
+ SimpleRegisterCoalescing() : MachineFunctionPass((intptr_t)&ID) {}
struct CopyRec {
MachineInstr *MI;
Modified: llvm/trunk/include/llvm/Support/FileUtilities.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FileUtilities.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/FileUtilities.h (original)
+++ llvm/trunk/include/llvm/Support/FileUtilities.h Mon Aug 27 09:50:10 2007
@@ -40,7 +40,7 @@
sys::Path Filename;
bool DeleteIt;
public:
- FileRemover(const sys::Path &filename, bool deleteIt = true)
+ explicit FileRemover(const sys::Path &filename, bool deleteIt = true)
: Filename(filename), DeleteIt(deleteIt) {}
~FileRemover() {
Modified: llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetELFWriterInfo.h Mon Aug 27 09:50:10 2007
@@ -32,7 +32,7 @@
EM_386 = 3
};
- TargetELFWriterInfo(MachineType machine) : EMachine(machine) {}
+ explicit TargetELFWriterInfo(MachineType machine) : EMachine(machine) {}
virtual ~TargetELFWriterInfo() {}
unsigned short getEMachine() const { return EMachine; }
Modified: llvm/trunk/include/llvm/Target/TargetLowering.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Target/TargetLowering.h (original)
+++ llvm/trunk/include/llvm/Target/TargetLowering.h Mon Aug 27 09:50:10 2007
@@ -844,7 +844,7 @@
bool isByVal;
ArgListEntry() : isSExt(false), isZExt(false), isInReg(false),
- isSRet(false), isNest(false), isByVal(false) { };
+ isSRet(false), isNest(false), isByVal(false) { }
};
typedef std::vector ArgListTy;
virtual std::pair
Modified: llvm/trunk/lib/CodeGen/DwarfWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfWriter.cpp?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/DwarfWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/DwarfWriter.cpp Mon Aug 27 09:50:10 2007
@@ -221,7 +221,7 @@
std::vector Values;
public:
- DIE(unsigned Tag)
+ explicit DIE(unsigned Tag)
: Abbrev(Tag, DW_CHILDREN_no)
, Offset(0)
, Size(0)
@@ -304,7 +304,7 @@
///
unsigned Type;
- DIEValue(unsigned T)
+ explicit DIEValue(unsigned T)
: Type(T)
{}
virtual ~DIEValue() {}
@@ -344,7 +344,7 @@
uint64_t Integer;
public:
- DIEInteger(uint64_t I) : DIEValue(isInteger), Integer(I) {}
+ explicit DIEInteger(uint64_t I) : DIEValue(isInteger), Integer(I) {}
// Implement isa/cast/dyncast.
static bool classof(const DIEInteger *) { return true; }
@@ -396,7 +396,7 @@
public:
const std::string String;
- DIEString(const std::string &S) : DIEValue(isString), String(S) {}
+ explicit DIEString(const std::string &S) : DIEValue(isString), String(S) {}
// Implement isa/cast/dyncast.
static bool classof(const DIEString *) { return true; }
@@ -435,7 +435,7 @@
const DWLabel Label;
- DIEDwarfLabel(const DWLabel &L) : DIEValue(isLabel), Label(L) {}
+ explicit DIEDwarfLabel(const DWLabel &L) : DIEValue(isLabel), Label(L) {}
// Implement isa/cast/dyncast.
static bool classof(const DIEDwarfLabel *) { return true; }
@@ -473,7 +473,8 @@
public:
const std::string Label;
- DIEObjectLabel(const std::string &L) : DIEValue(isAsIsLabel), Label(L) {}
+ explicit DIEObjectLabel(const std::string &L)
+ : DIEValue(isAsIsLabel), Label(L) {}
// Implement isa/cast/dyncast.
static bool classof(const DIEObjectLabel *) { return true; }
@@ -553,7 +554,7 @@
public:
DIE *Entry;
- DIEntry(DIE *E) : DIEValue(isEntry), Entry(E) {}
+ explicit DIEntry(DIE *E) : DIEValue(isEntry), Entry(E) {}
// Implement isa/cast/dyncast.
static bool classof(const DIEntry *) { return true; }
@@ -1117,7 +1118,7 @@
std::vector Moves;
FunctionDebugFrameInfo(unsigned Num, const std::vector &M):
- Number(Num), Moves(M) { };
+ Number(Num), Moves(M) { }
};
std::vector DebugFrames;
@@ -2745,7 +2746,7 @@
bool hC, bool hL,
const std::vector &M):
FnName(FN), Number(Num), PersonalityIndex(P),
- hasCalls(hC), hasLandingPads(hL), Moves(M) { };
+ hasCalls(hC), hasLandingPads(hL), Moves(M) { }
};
std::vector EHFrames;
Modified: llvm/trunk/lib/CodeGen/PhysRegTracker.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PhysRegTracker.h?rev=41482&r1=41481&r2=41482&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/PhysRegTracker.h (original)
+++ llvm/trunk/lib/CodeGen/PhysRegTracker.h Mon Aug 27 09:50:10 2007
@@ -26,7 +26,7 @@
std::vector regUse_;
public:
- PhysRegTracker(const MRegisterInfo& mri)
+ explicit PhysRegTracker(const MRegisterInfo& mri)
: mri_(&mri),
regUse_(mri_->getNumRegs(), 0) {
}
From baldrick at free.fr Mon Aug 27 10:47:51 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 15:47:51 -0000
Subject: [llvm-commits] [llvm] r41484 - in /llvm/trunk:
docs/ExceptionHandling.html include/llvm/CodeGen/MachineModuleInfo.h
lib/CodeGen/MachineModuleInfo.cpp
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Message-ID: <200708271547.l7RFlpKS014440@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 10:47:50 2007
New Revision: 41484
URL: http://llvm.org/viewvc/llvm-project?rev=41484&view=rev
Log:
There is an impedance matching problem between LLVM and
gcc exception handling: if an exception unwinds through
an invoke, then execution must branch to the invoke's
unwind target. We previously tried to enforce this by
appending a cleanup action to every selector, however
this does not always work correctly due to an optimization
in the C++ unwinding runtime: if only cleanups would be
run while unwinding an exception, then the program just
terminates without actually executing the cleanups, as
invoke semantics would require. I was hoping this
wouldn't be a problem, but in fact it turns out to be the
cause of all the remaining failures in the LLVM testsuite
(these also fail with -enable-correct-eh-support, so turning
on -enable-eh didn't make things worse!). Instead we need
to append a full-blown catch-all to the end of each
selector. The correct way of doing this depends on the
personality function, i.e. it is language dependent, so
can only be done by gcc. Thus this patch which generalizes
the eh.selector intrinsic so that it can handle all possible
kinds of action table entries (before it didn't accomodate
cleanups): now 0 indicates a cleanup, and filters have to be
specified using the number of type infos plus one rather than
the number of type infos. Related gcc patches will cause
Ada to pass a cleanup (0) to force the selector to always
fire, while C++ will use a C++ catch-all (null).
Modified:
llvm/trunk/docs/ExceptionHandling.html
llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h
llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Modified: llvm/trunk/docs/ExceptionHandling.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/ExceptionHandling.html?rev=41484&r1=41483&r2=41484&view=diff
==============================================================================
--- llvm/trunk/docs/ExceptionHandling.html (original)
+++ llvm/trunk/docs/ExceptionHandling.html Mon Aug 27 10:47:50 2007
@@ -22,8 +22,9 @@
- Throw
- Try/Catch
- - Finallys
+ - Cleanups
- Throw Filters
+ - Restrictions
Exception Handling Intrinsics
@@ -212,17 +213,19 @@
three arguments. The first argument is the reference to the exception
structure. The second argument is a reference to the personality function to be
used for this try catch sequence. Each of the remaining arguments is either a
-reference to the type info for a catch statement, or a non-negative integer
-followed by that many type info references, representing a
-filter.
+reference to the type info for a catch statement,
+a filter expression,
+or the number zero representing a cleanup.
The exception is tested against the arguments sequentially from first to last.
-The catch all (...) is represented with a null i8*. The result
-of the llvm.eh.selector is a positive
-number if the exception matched a type info, a negative number if it matched a
-filter, and zero if it didn't match anything. If a type info matched then the
-returned value is the index of the type info in the exception table.
-The LLVM C++ front end generates code to save this value in an alloca location
-for further use in the landing pad and catch code.
+The result of the llvm.eh.selector is a
+positive number if the exception matched a type info, a negative number if it matched
+a filter, and zero if it matched a cleanup. If nothing is matched, the behaviour of
+the program is undefined.
+The LLVM C++ front end generates code to save the selector value in an alloca
+location for further use in the landing pad and catch code.
+If a type info matched then the selector value is the index of the type info in
+the exception table, which can be obtained using the
+llvm.eh.typeid.for intrinsic.
Once the landing pad has the type info selector, the code branches to the
code for the first catch. The catch then checks the value of the type info
@@ -249,7 +252,7 @@
@@ -258,7 +261,12 @@
from a landing pad to the first catch. Control may actually flow from the
landing pad to clean up code and then to the first catch. Since the required
clean up for each invoke in a try may be different (ex., intervening
-constructor), there may be several landing pads for a given try.
+constructor), there may be several landing pads for a given try. If cleanups
+need to be run, the number zero should be passed as the last
+
llvm.eh.selector argument.
+However for C++ a
null i8* must be passed
+instead.
+
@@ -273,8 +281,8 @@
a function. To represent this a top level landing pad may exist to filter out
invalid types. To express this in LLVM code the landing pad will call llvm.eh.selector. The arguments are the
-number of different type infos the function may throw, followed by the type
-infos themselves.
+length of the filter expression (the number of type infos plus one), followed by
+the type infos themselves.
llvm.eh.selector will return a negative
value if the exception does not match any of the type infos. If no match is
found then a call to __cxa_call_unexpected should be made, otherwise
@@ -284,6 +292,34 @@
+
+
+
+
+
The semantics of the invoke instruction require that any exception that
+unwinds through an invoke call should result in a branch to the invoke's unwind
+label. However such a branch will only happen if the
+llvm.eh.selector matches.
+Thus in order to ensure correct operation, the front-end must only generate
+llvm.eh.selector calls that are
+guaranteed to always match whatever exception unwinds through the invoke.
+For most languages it is enough to pass zero, indicating the presence of
+a cleanup, as the last
+llvm.eh.selector argument.
+However for C++ this is not sufficient, because the C++ personality function
+will terminate the program if it detects that unwinding the exception only
+results in matches with cleanups. For C++ a null i8* should
+be passed as the last
+llvm.eh.selector argument instead.
+This is interpreted as a catch-all by the C++ personality function, and will
+always match.
+
+
+
+
+
@@ -330,16 +366,18 @@
llvm.eh.selector takes a minimum of
three arguments. The first argument is the reference to the exception
structure. The second argument is a reference to the personality function to be
-used for this try catch sequence. Each of the remaining arguments is either a
-reference to the type info for a catch statement, or a non-negative integer
-followed by that many type info references, representing a
-filter.
+used for this try catch sequence. Each of the remaining arguments is either a
+reference to the type info for a catch statement,
+a filter expression,
+or the number zero representing a cleanup.
The exception is tested against the arguments sequentially from first to last.
-The catch all (...) is represented with a null i8*. The result
-of the llvm.eh.selector is a positive
-number if the exception matched a type info, a negative number if it matched a
-filter, and zero if it didn't match anything. If a type info matched then the
-returned value is the index of the type info in the exception table.
+The result of the llvm.eh.selector is a
+positive number if the exception matched a type info, a negative number if it matched
+a filter, and zero if it matched a cleanup. If nothing is matched, the behaviour of
+the program is undefined.
+If a type info matched then the selector value is the index of the type info in
+the exception table, which can be obtained using the
+llvm.eh.typeid.for intrinsic.
Modified: llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h?rev=41484&r1=41483&r2=41484&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineModuleInfo.h Mon Aug 27 10:47:50 2007
@@ -966,7 +966,6 @@
: LandingPadBlock(MBB)
, LandingPadLabel(0)
, Personality(NULL)
- , TypeIds(1, 0) // Always have cleanups
{}
};
@@ -1239,6 +1238,10 @@
void addFilterTypeInfo(MachineBasicBlock *LandingPad,
std::vector &TyInfo);
+ /// addCleanup - Add a cleanup action for a landing pad.
+ ///
+ void addCleanup(MachineBasicBlock *LandingPad);
+
/// getTypeIDFor - Return the type id for the specified typeinfo. This is
/// function wide.
unsigned getTypeIDFor(GlobalVariable *TI);
Modified: llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp?rev=41484&r1=41483&r2=41484&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineModuleInfo.cpp Mon Aug 27 10:47:50 2007
@@ -1726,6 +1726,13 @@
LP.TypeIds.push_back(getFilterIDFor(IdsInFilter));
}
+/// addCleanup - Add a cleanup action for a landing pad.
+///
+void MachineModuleInfo::addCleanup(MachineBasicBlock *LandingPad) {
+ LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
+ LP.TypeIds.push_back(0);
+}
+
/// TidyLandingPads - Remap landing pad labels and remove any deleted landing
/// pads.
void MachineModuleInfo::TidyLandingPads() {
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=41484&r1=41483&r2=41484&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Mon Aug 27 10:47:50 2007
@@ -2519,7 +2519,7 @@
for (unsigned i = N - 1; i > 2; --i) {
if (ConstantInt *CI = dyn_cast(I.getOperand(i))) {
unsigned FilterLength = CI->getZExtValue();
- unsigned FirstCatch = i + FilterLength + 1;
+ unsigned FirstCatch = i + FilterLength + !FilterLength;
assert (FirstCatch <= N && "Invalid filter length");
if (FirstCatch < N) {
@@ -2530,11 +2530,17 @@
TyInfo.clear();
}
- TyInfo.reserve(FilterLength);
- for (unsigned j = i + 1; j < FirstCatch; ++j)
- TyInfo.push_back(ExtractTypeInfo(I.getOperand(j)));
- MMI->addFilterTypeInfo(MBB, TyInfo);
- TyInfo.clear();
+ if (!FilterLength) {
+ // Cleanup.
+ MMI->addCleanup(MBB);
+ } else {
+ // Filter.
+ TyInfo.reserve(FilterLength - 1);
+ for (unsigned j = i + 1; j < FirstCatch; ++j)
+ TyInfo.push_back(ExtractTypeInfo(I.getOperand(j)));
+ MMI->addFilterTypeInfo(MBB, TyInfo);
+ TyInfo.clear();
+ }
N = i;
}
From baldrick at free.fr Mon Aug 27 10:51:13 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 15:51:13 -0000
Subject: [llvm-commits] [llvm-gcc-4.0] r41485 -
/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
Message-ID: <200708271551.l7RFpEXd014607@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 10:51:13 2007
New Revision: 41485
URL: http://llvm.org/viewvc/llvm-project?rev=41485&view=rev
Log:
Filters are now specified by using the number of type infos
plus one. Always append a catch-all to the selector call,
unless it is pointless.
Modified:
llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=41485&r1=41484&r2=41485&view=diff
==============================================================================
--- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Mon Aug 27 10:51:13 2007
@@ -2039,6 +2039,7 @@
Args.push_back(CastToType(Instruction::BitCast, FuncCPPPersonality,
PointerType::get(Type::Int8Ty)));
+ bool CaughtAll = false;
for (std::vector::reverse_iterator I = CurrentEHScopes.rbegin(),
E = CurrentEHScopes.rend(); I != E; ++I) {
if (I->CatchExpr) {
@@ -2051,16 +2052,30 @@
EH_FILTER_EXPR) ? FilterExpr : CatchList;
}
- if (I->InfosType == FilterExpr)
+ if (I->InfosType == FilterExpr) {
// Filter - note the size.
- Args.push_back(ConstantInt::get(Type::Int32Ty, I->TypeInfos.size()));
+ Args.push_back(ConstantInt::get(Type::Int32Ty, I->TypeInfos.size()+1));
+ // An empty filter catches all exceptions.
+ if ((CaughtAll = !I->TypeInfos.size()))
+ break;
+ }
Args.reserve(Args.size() + I->TypeInfos.size());
- for (unsigned j = 0, N = I->TypeInfos.size(); j < N; ++j)
+ for (unsigned j = 0, N = I->TypeInfos.size(); j < N; ++j) {
Args.push_back(I->TypeInfos[j]);
+ // A null typeinfo indicates a catch-all.
+ if ((CaughtAll = I->TypeInfos[j]->isNullValue()))
+ break;
+ }
}
}
+ // Invokes are required to branch to the unwind label no matter what exception
+ // is being unwound. Enforce this by appending a catch-all.
+ // FIXME: The use of null as catch-all is C++ specific.
+ if (!CaughtAll)
+ Args.push_back(Constant::getNullValue(PointerType::get(Type::Int8Ty)));
+
Value *Select = Builder.CreateCall(FuncEHSelector, Args.begin(), Args.end(),
"eh_select");
Builder.CreateStore(Select, ExceptionSelectorValue);
From baldrick at free.fr Mon Aug 27 11:08:37 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 16:08:37 -0000
Subject: [llvm-commits] [llvm-gcc-4.2] r41486 -
/llvm-gcc-4.2/trunk/gcc/except.c
Message-ID: <200708271608.l7RG8biO015505@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 11:08:37 2007
New Revision: 41486
URL: http://llvm.org/viewvc/llvm-project?rev=41486&view=rev
Log:
Fix a mismatch between can_throw_external_1 (CTE) and
foreach_reachable_handler (FRH): CTE should visit the
same handlers as FRE (indeed it could have been implemented
using FRE but seems to have been open-coded as an
optimization) but is missing one piece of FRH logic.
This causes problems in the case of cleanups contained
inside an empty filter (i.e. a filter that catches
everything): FRH didn't visit the filter while CTE did.
The testcase is gcc's crossjump1.C, which produced
eh.selectors with only the exception and personality
arguments.
Modified:
llvm-gcc-4.2/trunk/gcc/except.c
Modified: llvm-gcc-4.2/trunk/gcc/except.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/except.c?rev=41486&r1=41485&r2=41486&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/except.c (original)
+++ llvm-gcc-4.2/trunk/gcc/except.c Mon Aug 27 11:08:37 2007
@@ -2800,9 +2800,21 @@
/* If the exception is caught or blocked by any containing region,
then it is not seen by any calling function. */
- for (; region ; region = region->outer)
- if (reachable_next_level (region, type_thrown, NULL) >= RNL_CAUGHT)
- return false;
+ /* LLVM local begin */
+ while (region)
+ {
+ if (reachable_next_level (region, type_thrown, NULL) >= RNL_CAUGHT)
+ return false;
+ /* If we have processed one cleanup, there is no point in
+ processing any more of them. Each cleanup will have an edge
+ to the next outer cleanup region, so the flow graph will be
+ accurate. */
+ if (region->type == ERT_CLEANUP)
+ region = region->u.cleanup.prev_try;
+ else
+ region = region->outer;
+ }
+ /* LLVM local end */
return true;
}
From baldrick at free.fr Mon Aug 27 11:11:09 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 16:11:09 -0000
Subject: [llvm-commits] [llvm-gcc-4.2] r41487 - in /llvm-gcc-4.2/trunk/gcc:
llvm-convert.cpp llvm-internal.h
Message-ID: <200708271611.l7RGB9wu015673@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 11:11:09 2007
New Revision: 41487
URL: http://llvm.org/viewvc/llvm-project?rev=41487&view=rev
Log:
Filters are now specified using the number of type infos
plus one. If an eh.selector call isn't guaranteed to
match, append a catch-all. Also, some trivial cleanups.
Modified:
llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
llvm-gcc-4.2/trunk/gcc/llvm-internal.h
Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=41487&r1=41486&r2=41487&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon Aug 27 11:11:09 2007
@@ -1757,18 +1757,6 @@
}
-/// getLandingPad - Return the landing pad for the given exception handling
-/// region, creating it if necessary.
-BasicBlock *TreeToLLVM::getLandingPad(unsigned RegionNo) {
- LandingPads.grow(RegionNo);
- BasicBlock *&LandingPad = LandingPads[RegionNo];
-
- if (!LandingPad)
- LandingPad = new BasicBlock("lpad");
-
- return LandingPad;
-}
-
/// getPostPad - Return the post landing pad for the given exception handling
/// region, creating it if necessary.
BasicBlock *TreeToLLVM::getPostPad(unsigned RegionNo) {
@@ -1829,7 +1817,7 @@
tree TypeList = get_eh_type_list(region);
unsigned Length = list_length(TypeList);
Args.reserve(Args.size() + Length + 1);
- Args.push_back(ConstantInt::get(Type::Int32Ty, Length));
+ Args.push_back(ConstantInt::get(Type::Int32Ty, Length + 1));
// Add the type infos.
for (; TypeList; TypeList = TREE_CHAIN(TypeList)) {
@@ -1855,6 +1843,13 @@
}
}
+ if (can_throw_external_1(i, false))
+ // Some exceptions from this region may not be caught by any handler.
+ // Since invokes are required to branch to the unwind label no matter
+ // what exception is being unwound, append a catch-all.
+ // FIXME: The use of null as catch-all is C++ specific.
+ Args.push_back(Constant::getNullValue(PointerType::get(Type::Int8Ty)));
+
// Emit the selector call.
Value *Select = Builder.CreateCall(FuncEHSelector, Args.begin(), Args.end(),
"eh_select");
@@ -2250,12 +2245,23 @@
if (!NoUnwind) {
int RegionNo = lookup_stmt_eh_region(exp);
+ // Is the call contained in an exception handling region?
if (RegionNo > 0) {
- if (can_throw_internal_1(RegionNo, false))
+ // Are there any exception handlers for this region?
+ if (can_throw_internal_1(RegionNo, false)) {
// Turn the call into an invoke.
- LandingPad = getLandingPad(RegionNo);
- else
+ LandingPads.grow(RegionNo);
+ BasicBlock *&ThisPad = LandingPads[RegionNo];
+
+ // Create a landing pad if one didn't exist already.
+ if (!ThisPad)
+ ThisPad = new BasicBlock("lpad");
+
+ LandingPad = ThisPad;
+ } else {
+ // Can this call unwind out of the current function?
NoUnwind = !can_throw_external_1(RegionNo, false);
+ }
}
}
}
Modified: llvm-gcc-4.2/trunk/gcc/llvm-internal.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-internal.h?rev=41487&r1=41486&r2=41487&view=diff
==============================================================================
--- llvm-gcc-4.2/trunk/gcc/llvm-internal.h (original)
+++ llvm-gcc-4.2/trunk/gcc/llvm-internal.h Mon Aug 27 11:11:09 2007
@@ -242,8 +242,6 @@
bool isBitfield() const { return BitStart != 255; }
};
-typedef IndexedMap RegionMapType;
-
/// TreeToLLVM - An instance of this class is created and used to convert the
/// body of each function to LLVM.
///
@@ -268,10 +266,10 @@
//===---------------------- Exception Handling --------------------------===//
/// LandingPads - The landing pad for a given EH region.
- RegionMapType LandingPads;
+ IndexedMap LandingPads;
/// PostPads - The post landing pad for a given EH region.
- RegionMapType PostPads;
+ IndexedMap PostPads;
/// ExceptionValue - Is the local to receive the current exception.
Value *ExceptionValue;
@@ -421,10 +419,6 @@
/// handling.
void CreateExceptionValues();
- /// getLandingPad - Return the landing pad for the given exception handling
- /// region, creating it if necessary.
- BasicBlock *getLandingPad(unsigned RegionNo);
-
/// getPostPad - Return the post landing pad for the given exception handling
/// region, creating it if necessary.
BasicBlock *getPostPad(unsigned RegionNo);
From djg at cray.com Mon Aug 27 11:11:49 2007
From: djg at cray.com (Dan Gohman)
Date: Mon, 27 Aug 2007 16:11:49 -0000
Subject: [llvm-commits] [llvm] r41488 -
/llvm/trunk/lib/Transforms/IPO/RaiseAllocations.cpp
Message-ID: <200708271611.l7RGBnTv015710@zion.cs.uiuc.edu>
Author: djg
Date: Mon Aug 27 11:11:48 2007
New Revision: 41488
URL: http://llvm.org/viewvc/llvm-project?rev=41488&view=rev
Log:
Change comments to refer to @malloc and @free instead of %malloc and %free.
Modified:
llvm/trunk/lib/Transforms/IPO/RaiseAllocations.cpp
Modified: llvm/trunk/lib/Transforms/IPO/RaiseAllocations.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/RaiseAllocations.cpp?rev=41488&r1=41487&r2=41488&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/RaiseAllocations.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/RaiseAllocations.cpp Mon Aug 27 11:11:48 2007
@@ -1,4 +1,4 @@
-//===- RaiseAllocations.cpp - Convert %malloc & %free calls to insts ------===//
+//===- RaiseAllocations.cpp - Convert @malloc & @free calls to insts ------===//
//
// The LLVM Compiler Infrastructure
//
@@ -28,7 +28,7 @@
STATISTIC(NumRaised, "Number of allocations raised");
namespace {
- // RaiseAllocations - Turn %malloc and %free calls into the appropriate
+ // RaiseAllocations - Turn @malloc and @free calls into the appropriate
// instruction.
//
class VISIBILITY_HIDDEN RaiseAllocations : public ModulePass {
@@ -65,7 +65,7 @@
// free functions. If this is the case, grab the method pointers that the
// module is using.
//
-// Lookup %malloc and %free in the symbol table, for later use. If they don't
+// Lookup @malloc and @free in the symbol table, for later use. If they don't
// exist, or are not external, we do not worry about converting calls to that
// function into the appropriate instruction.
//
From djg at cray.com Mon Aug 27 11:26:13 2007
From: djg at cray.com (Dan Gohman)
Date: Mon, 27 Aug 2007 16:26:13 -0000
Subject: [llvm-commits] [llvm] r41489 - in /llvm/trunk:
include/llvm/CodeGen/SelectionDAGISel.h
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp test/CodeGen/X86/memmove-0.ll
test/CodeGen/X86/memmove-1.ll test/CodeGen/X86/memmove-2.ll
test/CodeGen/X86/memmove-3.ll
Message-ID: <200708271626.l7RGQExY016152@zion.cs.uiuc.edu>
Author: djg
Date: Mon Aug 27 11:26:13 2007
New Revision: 41489
URL: http://llvm.org/viewvc/llvm-project?rev=41489&view=rev
Log:
If the source and destination pointers in an llvm.memmove are known
to not alias each other, it can be translated as an llvm.memcpy.
Added:
llvm/trunk/test/CodeGen/X86/memmove-0.ll
llvm/trunk/test/CodeGen/X86/memmove-1.ll
llvm/trunk/test/CodeGen/X86/memmove-2.ll
llvm/trunk/test/CodeGen/X86/memmove-3.ll
Modified:
llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h?rev=41489&r1=41488&r2=41489&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h Mon Aug 27 11:26:13 2007
@@ -39,6 +39,7 @@
SSARegMap *RegMap;
SelectionDAG *CurDAG;
MachineBasicBlock *BB;
+ AliasAnalysis *AA;
std::vector TopOrder;
unsigned DAGSize;
static char ID;
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=41489&r1=41488&r2=41489&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Mon Aug 27 11:26:13 2007
@@ -409,6 +409,7 @@
TargetLowering &TLI;
SelectionDAG &DAG;
const TargetData *TD;
+ AliasAnalysis &AA;
/// SwitchCases - Vector of CaseBlock structures used to communicate
/// SwitchInst code generation information.
@@ -423,8 +424,9 @@
FunctionLoweringInfo &FuncInfo;
SelectionDAGLowering(SelectionDAG &dag, TargetLowering &tli,
+ AliasAnalysis &aa,
FunctionLoweringInfo &funcinfo)
- : TLI(tli), DAG(dag), TD(DAG.getTarget().getTargetData()),
+ : TLI(tli), DAG(dag), TD(DAG.getTarget().getTargetData()), AA(aa),
FuncInfo(funcinfo) {
}
@@ -4196,6 +4198,17 @@
unsigned Align = (unsigned)cast(Op4)->getValue();
if (Align == 0) Align = 1;
+ // If the source and destination are known to not be aliases, we can
+ // lower memmove as memcpy.
+ if (Op == ISD::MEMMOVE) {
+ uint64_t Size = -1;
+ if (ConstantSDNode *C = dyn_cast(Op3))
+ Size = C->getValue();
+ if (AA.alias(I.getOperand(1), Size, I.getOperand(2), Size) ==
+ AliasAnalysis::NoAlias)
+ Op = ISD::MEMCPY;
+ }
+
if (ConstantSDNode *Size = dyn_cast(Op3)) {
std::vector MemOps;
@@ -4307,6 +4320,9 @@
bool SelectionDAGISel::runOnFunction(Function &Fn) {
+ // Get alias analysis for load/store combining.
+ AA = &getAnalysis();
+
MachineFunction &MF = MachineFunction::construct(&Fn, TLI.getTargetMachine());
RegMap = MF.getSSARegMap();
DOUT << "\n\n\n=== " << Fn.getName() << "\n";
@@ -4404,7 +4420,7 @@
void SelectionDAGISel::BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB,
std::vector > &PHINodesToUpdate,
FunctionLoweringInfo &FuncInfo) {
- SelectionDAGLowering SDL(DAG, TLI, FuncInfo);
+ SelectionDAGLowering SDL(DAG, TLI, *AA, FuncInfo);
std::vector UnorderedChains;
@@ -4581,11 +4597,8 @@
}
void SelectionDAGISel::CodeGenAndEmitDAG(SelectionDAG &DAG) {
- // Get alias analysis for load/store combining.
- AliasAnalysis &AA = getAnalysis();
-
// Run the DAG combiner in pre-legalize mode.
- DAG.Combine(false, AA);
+ DAG.Combine(false, *AA);
DOUT << "Lowered selection DAG:\n";
DEBUG(DAG.dump());
@@ -4598,7 +4611,7 @@
DEBUG(DAG.dump());
// Run the DAG combiner in post-legalize mode.
- DAG.Combine(true, AA);
+ DAG.Combine(true, *AA);
if (ViewISelDAGs) DAG.viewGraph();
@@ -4649,7 +4662,7 @@
if (!BitTestCases[i].Emitted) {
SelectionDAG HSDAG(TLI, MF, getAnalysisToUpdate());
CurDAG = &HSDAG;
- SelectionDAGLowering HSDL(HSDAG, TLI, FuncInfo);
+ SelectionDAGLowering HSDL(HSDAG, TLI, *AA, FuncInfo);
// Set the current basic block to the mbb we wish to insert the code into
BB = BitTestCases[i].Parent;
HSDL.setCurrentBasicBlock(BB);
@@ -4662,7 +4675,7 @@
for (unsigned j = 0, ej = BitTestCases[i].Cases.size(); j != ej; ++j) {
SelectionDAG BSDAG(TLI, MF, getAnalysisToUpdate());
CurDAG = &BSDAG;
- SelectionDAGLowering BSDL(BSDAG, TLI, FuncInfo);
+ SelectionDAGLowering BSDL(BSDAG, TLI, *AA, FuncInfo);
// Set the current basic block to the mbb we wish to insert the code into
BB = BitTestCases[i].Cases[j].ThisBB;
BSDL.setCurrentBasicBlock(BB);
@@ -4715,7 +4728,7 @@
if (!JTCases[i].first.Emitted) {
SelectionDAG HSDAG(TLI, MF, getAnalysisToUpdate());
CurDAG = &HSDAG;
- SelectionDAGLowering HSDL(HSDAG, TLI, FuncInfo);
+ SelectionDAGLowering HSDL(HSDAG, TLI, *AA, FuncInfo);
// Set the current basic block to the mbb we wish to insert the code into
BB = JTCases[i].first.HeaderBB;
HSDL.setCurrentBasicBlock(BB);
@@ -4727,7 +4740,7 @@
SelectionDAG JSDAG(TLI, MF, getAnalysisToUpdate());
CurDAG = &JSDAG;
- SelectionDAGLowering JSDL(JSDAG, TLI, FuncInfo);
+ SelectionDAGLowering JSDL(JSDAG, TLI, *AA, FuncInfo);
// Set the current basic block to the mbb we wish to insert the code into
BB = JTCases[i].second.MBB;
JSDL.setCurrentBasicBlock(BB);
@@ -4772,7 +4785,7 @@
for (unsigned i = 0, e = SwitchCases.size(); i != e; ++i) {
SelectionDAG SDAG(TLI, MF, getAnalysisToUpdate());
CurDAG = &SDAG;
- SelectionDAGLowering SDL(SDAG, TLI, FuncInfo);
+ SelectionDAGLowering SDL(SDAG, TLI, *AA, FuncInfo);
// Set the current basic block to the mbb we wish to insert the code into
BB = SwitchCases[i].ThisBB;
Added: llvm/trunk/test/CodeGen/X86/memmove-0.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memmove-0.ll?rev=41489&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/memmove-0.ll (added)
+++ llvm/trunk/test/CodeGen/X86/memmove-0.ll Mon Aug 27 11:26:13 2007
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc -march=x86 | grep {call memcpy}
+
+declare void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 %a)
+
+define void @foo(i8* noalias %d, i8* noalias %s, i64 %l)
+{
+ call void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 1)
+ ret void
+}
Added: llvm/trunk/test/CodeGen/X86/memmove-1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memmove-1.ll?rev=41489&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/memmove-1.ll (added)
+++ llvm/trunk/test/CodeGen/X86/memmove-1.ll Mon Aug 27 11:26:13 2007
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc -march=x86 | grep {call memmove}
+
+declare void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 %a)
+
+define void @foo(i8* %d, i8* %s, i64 %l)
+{
+ call void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 1)
+ ret void
+}
Added: llvm/trunk/test/CodeGen/X86/memmove-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memmove-2.ll?rev=41489&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/memmove-2.ll (added)
+++ llvm/trunk/test/CodeGen/X86/memmove-2.ll Mon Aug 27 11:26:13 2007
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc -march=x86 | not grep call
+
+declare void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 %a)
+
+define void @foo(i8* noalias %d, i8* noalias %s)
+{
+ call void @llvm.memmove.i64(i8* %d, i8* %s, i64 32, i32 1)
+ ret void
+}
Added: llvm/trunk/test/CodeGen/X86/memmove-3.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memmove-3.ll?rev=41489&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/memmove-3.ll (added)
+++ llvm/trunk/test/CodeGen/X86/memmove-3.ll Mon Aug 27 11:26:13 2007
@@ -0,0 +1,9 @@
+; RUN: llvm-as < %s | llc -march=x86 | grep {call memmove}
+
+declare void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 %a)
+
+define void @foo(i8* %d, i8* %s)
+{
+ call void @llvm.memmove.i64(i8* %d, i8* %s, i64 32, i32 1)
+ ret void
+}
From baldrick at free.fr Mon Aug 27 11:30:05 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 16:30:05 -0000
Subject: [llvm-commits] [llvm] r41490 -
/llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll
Message-ID: <200708271630.l7RGU5wt016261@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 11:30:05 2007
New Revision: 41490
URL: http://llvm.org/viewvc/llvm-project?rev=41490&view=rev
Log:
Now that we don't output cleanups by default, the action
offset needs to be adjusted in this test.
Modified:
llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll
Modified: llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll?rev=41490&r1=41489&r2=41490&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll (original)
+++ llvm/trunk/test/CodeGen/Generic/2007-06-06-CriticalEdgeLandingPad.ll Mon Aug 27 11:30:05 2007
@@ -1,5 +1,5 @@
; RUN: llvm-as < %s | llc -enable-eh -asm-verbose -o - | \
-; RUN: grep -A 3 {Llabel137.*Region start} | grep {5.*Action}
+; RUN: grep -A 3 {Llabel137.*Region start} | grep {3.*Action}
; PR1422
; PR1508
From djg at cray.com Mon Aug 27 11:32:12 2007
From: djg at cray.com (Dan Gohman)
Date: Mon, 27 Aug 2007 16:32:12 -0000
Subject: [llvm-commits] [llvm] r41491 -
/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Message-ID: <200708271632.l7RGWDqf016322@zion.cs.uiuc.edu>
Author: djg
Date: Mon Aug 27 11:32:11 2007
New Revision: 41491
URL: http://llvm.org/viewvc/llvm-project?rev=41491&view=rev
Log:
Make DAGCombiner's global alias analysis query more precise in the case
where both pointers have non-zero offsets.
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=41491&r1=41490&r2=41491&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Mon Aug 27 11:32:11 2007
@@ -4606,8 +4606,9 @@
if (CombinerGlobalAA) {
// Use alias analysis information.
- int Overlap1 = Size1 + SrcValueOffset1;
- int Overlap2 = Size2 + SrcValueOffset2;
+ int64_t MinOffset = std::min(SrcValueOffset1, SrcValueOffset2);
+ int64_t Overlap1 = Size1 + SrcValueOffset1 - MinOffset;
+ int64_t Overlap2 = Size2 + SrcValueOffset2 - MinOffset;
AliasAnalysis::AliasResult AAResult =
AA.alias(SrcValue1, Overlap1, SrcValue2, Overlap2);
if (AAResult == AliasAnalysis::NoAlias)
From clattner at apple.com Mon Aug 27 11:35:32 2007
From: clattner at apple.com (Chris Lattner)
Date: Mon, 27 Aug 2007 09:35:32 -0700
Subject: [llvm-commits] [llvm] r41489 - in /llvm/trunk:
include/llvm/CodeGen/SelectionDAGISel.h
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
test/CodeGen/X86/memmove-0.ll test/CodeGen/X86/memmove-1.ll
test/CodeGen/X86/memmove-2.ll test/CodeGen/X86/memmove-3.ll
In-Reply-To: <200708271626.l7RGQExY016152@zion.cs.uiuc.edu>
References: <200708271626.l7RGQExY016152@zion.cs.uiuc.edu>
Message-ID: <05A645B5-307D-4E4F-B599-192DFCF9E5DA@apple.com>
On Aug 27, 2007, at 9:26 AM, Dan Gohman wrote:
> Author: djg
> Date: Mon Aug 27 11:26:13 2007
> New Revision: 41489
>
> URL: http://llvm.org/viewvc/llvm-project?rev=41489&view=rev
> Log:
> If the source and destination pointers in an llvm.memmove are known
> to not alias each other, it can be translated as an llvm.memcpy.
This is nifty, but shouldn't this be done at the LLVM IR level? I
can't think of cases where lowering would create new memmove calls.
-Chris
> Added:
> llvm/trunk/test/CodeGen/X86/memmove-0.ll
> llvm/trunk/test/CodeGen/X86/memmove-1.ll
> llvm/trunk/test/CodeGen/X86/memmove-2.ll
> llvm/trunk/test/CodeGen/X86/memmove-3.ll
> Modified:
> llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
> llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
>
> Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
> CodeGen/SelectionDAGISel.h?rev=41489&r1=41488&r2=41489&view=diff
>
> ======================================================================
> ========
> --- llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h Mon Aug 27
> 11:26:13 2007
> @@ -39,6 +39,7 @@
> SSARegMap *RegMap;
> SelectionDAG *CurDAG;
> MachineBasicBlock *BB;
> + AliasAnalysis *AA;
> std::vector TopOrder;
> unsigned DAGSize;
> static char ID;
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/
> SelectionDAG/SelectionDAGISel.cpp?
> rev=41489&r1=41488&r2=41489&view=diff
>
> ======================================================================
> ========
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
> (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Mon
> Aug 27 11:26:13 2007
> @@ -409,6 +409,7 @@
> TargetLowering &TLI;
> SelectionDAG &DAG;
> const TargetData *TD;
> + AliasAnalysis &AA;
>
> /// SwitchCases - Vector of CaseBlock structures used to
> communicate
> /// SwitchInst code generation information.
> @@ -423,8 +424,9 @@
> FunctionLoweringInfo &FuncInfo;
>
> SelectionDAGLowering(SelectionDAG &dag, TargetLowering &tli,
> + AliasAnalysis &aa,
> FunctionLoweringInfo &funcinfo)
> - : TLI(tli), DAG(dag), TD(DAG.getTarget().getTargetData()),
> + : TLI(tli), DAG(dag), TD(DAG.getTarget().getTargetData()), AA
> (aa),
> FuncInfo(funcinfo) {
> }
>
> @@ -4196,6 +4198,17 @@
> unsigned Align = (unsigned)cast(Op4)->getValue();
> if (Align == 0) Align = 1;
>
> + // If the source and destination are known to not be aliases, we
> can
> + // lower memmove as memcpy.
> + if (Op == ISD::MEMMOVE) {
> + uint64_t Size = -1;
> + if (ConstantSDNode *C = dyn_cast(Op3))
> + Size = C->getValue();
> + if (AA.alias(I.getOperand(1), Size, I.getOperand(2), Size) ==
> + AliasAnalysis::NoAlias)
> + Op = ISD::MEMCPY;
> + }
> +
> if (ConstantSDNode *Size = dyn_cast(Op3)) {
> std::vector MemOps;
>
> @@ -4307,6 +4320,9 @@
>
>
> bool SelectionDAGISel::runOnFunction(Function &Fn) {
> + // Get alias analysis for load/store combining.
> + AA = &getAnalysis();
> +
> MachineFunction &MF = MachineFunction::construct(&Fn,
> TLI.getTargetMachine());
> RegMap = MF.getSSARegMap();
> DOUT << "\n\n\n=== " << Fn.getName() << "\n";
> @@ -4404,7 +4420,7 @@
> void SelectionDAGISel::BuildSelectionDAG(SelectionDAG &DAG,
> BasicBlock *LLVMBB,
> std::vector >
> &PHINodesToUpdate,
> FunctionLoweringInfo
> &FuncInfo) {
> - SelectionDAGLowering SDL(DAG, TLI, FuncInfo);
> + SelectionDAGLowering SDL(DAG, TLI, *AA, FuncInfo);
>
> std::vector UnorderedChains;
>
> @@ -4581,11 +4597,8 @@
> }
>
> void SelectionDAGISel::CodeGenAndEmitDAG(SelectionDAG &DAG) {
> - // Get alias analysis for load/store combining.
> - AliasAnalysis &AA = getAnalysis();
> -
> // Run the DAG combiner in pre-legalize mode.
> - DAG.Combine(false, AA);
> + DAG.Combine(false, *AA);
>
> DOUT << "Lowered selection DAG:\n";
> DEBUG(DAG.dump());
> @@ -4598,7 +4611,7 @@
> DEBUG(DAG.dump());
>
> // Run the DAG combiner in post-legalize mode.
> - DAG.Combine(true, AA);
> + DAG.Combine(true, *AA);
>
> if (ViewISelDAGs) DAG.viewGraph();
>
> @@ -4649,7 +4662,7 @@
> if (!BitTestCases[i].Emitted) {
> SelectionDAG HSDAG(TLI, MF,
> getAnalysisToUpdate());
> CurDAG = &HSDAG;
> - SelectionDAGLowering HSDL(HSDAG, TLI, FuncInfo);
> + SelectionDAGLowering HSDL(HSDAG, TLI, *AA, FuncInfo);
> // Set the current basic block to the mbb we wish to insert
> the code into
> BB = BitTestCases[i].Parent;
> HSDL.setCurrentBasicBlock(BB);
> @@ -4662,7 +4675,7 @@
> for (unsigned j = 0, ej = BitTestCases[i].Cases.size(); j !=
> ej; ++j) {
> SelectionDAG BSDAG(TLI, MF,
> getAnalysisToUpdate());
> CurDAG = &BSDAG;
> - SelectionDAGLowering BSDL(BSDAG, TLI, FuncInfo);
> + SelectionDAGLowering BSDL(BSDAG, TLI, *AA, FuncInfo);
> // Set the current basic block to the mbb we wish to insert
> the code into
> BB = BitTestCases[i].Cases[j].ThisBB;
> BSDL.setCurrentBasicBlock(BB);
> @@ -4715,7 +4728,7 @@
> if (!JTCases[i].first.Emitted) {
> SelectionDAG HSDAG(TLI, MF,
> getAnalysisToUpdate());
> CurDAG = &HSDAG;
> - SelectionDAGLowering HSDL(HSDAG, TLI, FuncInfo);
> + SelectionDAGLowering HSDL(HSDAG, TLI, *AA, FuncInfo);
> // Set the current basic block to the mbb we wish to insert
> the code into
> BB = JTCases[i].first.HeaderBB;
> HSDL.setCurrentBasicBlock(BB);
> @@ -4727,7 +4740,7 @@
>
> SelectionDAG JSDAG(TLI, MF,
> getAnalysisToUpdate());
> CurDAG = &JSDAG;
> - SelectionDAGLowering JSDL(JSDAG, TLI, FuncInfo);
> + SelectionDAGLowering JSDL(JSDAG, TLI, *AA, FuncInfo);
> // Set the current basic block to the mbb we wish to insert
> the code into
> BB = JTCases[i].second.MBB;
> JSDL.setCurrentBasicBlock(BB);
> @@ -4772,7 +4785,7 @@
> for (unsigned i = 0, e = SwitchCases.size(); i != e; ++i) {
> SelectionDAG SDAG(TLI, MF,
> getAnalysisToUpdate());
> CurDAG = &SDAG;
> - SelectionDAGLowering SDL(SDAG, TLI, FuncInfo);
> + SelectionDAGLowering SDL(SDAG, TLI, *AA, FuncInfo);
>
> // Set the current basic block to the mbb we wish to insert
> the code into
> BB = SwitchCases[i].ThisBB;
>
> Added: llvm/trunk/test/CodeGen/X86/memmove-0.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/
> X86/memmove-0.ll?rev=41489&view=auto
>
> ======================================================================
> ========
> --- llvm/trunk/test/CodeGen/X86/memmove-0.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/memmove-0.ll Mon Aug 27 11:26:13 2007
> @@ -0,0 +1,9 @@
> +; RUN: llvm-as < %s | llc -march=x86 | grep {call memcpy}
> +
> +declare void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 %a)
> +
> +define void @foo(i8* noalias %d, i8* noalias %s, i64 %l)
> +{
> + call void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 1)
> + ret void
> +}
>
> Added: llvm/trunk/test/CodeGen/X86/memmove-1.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/
> X86/memmove-1.ll?rev=41489&view=auto
>
> ======================================================================
> ========
> --- llvm/trunk/test/CodeGen/X86/memmove-1.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/memmove-1.ll Mon Aug 27 11:26:13 2007
> @@ -0,0 +1,9 @@
> +; RUN: llvm-as < %s | llc -march=x86 | grep {call memmove}
> +
> +declare void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 %a)
> +
> +define void @foo(i8* %d, i8* %s, i64 %l)
> +{
> + call void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 1)
> + ret void
> +}
>
> Added: llvm/trunk/test/CodeGen/X86/memmove-2.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/
> X86/memmove-2.ll?rev=41489&view=auto
>
> ======================================================================
> ========
> --- llvm/trunk/test/CodeGen/X86/memmove-2.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/memmove-2.ll Mon Aug 27 11:26:13 2007
> @@ -0,0 +1,9 @@
> +; RUN: llvm-as < %s | llc -march=x86 | not grep call
> +
> +declare void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 %a)
> +
> +define void @foo(i8* noalias %d, i8* noalias %s)
> +{
> + call void @llvm.memmove.i64(i8* %d, i8* %s, i64 32, i32 1)
> + ret void
> +}
>
> Added: llvm/trunk/test/CodeGen/X86/memmove-3.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/
> X86/memmove-3.ll?rev=41489&view=auto
>
> ======================================================================
> ========
> --- llvm/trunk/test/CodeGen/X86/memmove-3.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/memmove-3.ll Mon Aug 27 11:26:13 2007
> @@ -0,0 +1,9 @@
> +; RUN: llvm-as < %s | llc -march=x86 | grep {call memmove}
> +
> +declare void @llvm.memmove.i64(i8* %d, i8* %s, i64 %l, i32 %a)
> +
> +define void @foo(i8* %d, i8* %s)
> +{
> + call void @llvm.memmove.i64(i8* %d, i8* %s, i64 32, i32 1)
> + ret void
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
From baldrick at free.fr Mon Aug 27 11:47:32 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 16:47:32 -0000
Subject: [llvm-commits] [llvm] r41494 -
/llvm/trunk/test/C++Frontend/2007-07-04-NestedCatches.cpp
Message-ID: <200708271647.l7RGlW2t016698@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 11:47:32 2007
New Revision: 41494
URL: http://llvm.org/viewvc/llvm-project?rev=41494&view=rev
Log:
Fix this test: llvm-gcc-4.2 optimizes almost everything away,
resulting in zero matches, while llvm-gcc-4.1 manages to
remove one pointless selector changing the number of matches.
Modified:
llvm/trunk/test/C++Frontend/2007-07-04-NestedCatches.cpp
Modified: llvm/trunk/test/C++Frontend/2007-07-04-NestedCatches.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/C%2B%2BFrontend/2007-07-04-NestedCatches.cpp?rev=41494&r1=41493&r2=41494&view=diff
==============================================================================
--- llvm/trunk/test/C++Frontend/2007-07-04-NestedCatches.cpp (original)
+++ llvm/trunk/test/C++Frontend/2007-07-04-NestedCatches.cpp Mon Aug 27 11:47:32 2007
@@ -1,6 +1,6 @@
-// RUN: %llvmgxx %s -S -emit-llvm -O2 -o - | \
+// RUN: %llvmgxx %s -S -O2 -o - | \
// RUN: ignore grep {eh\.selector.*One.*Two.*Three.*Four.*Five.*Six.*null} | \
-// RUN: wc -l | grep {\[02\]}
+// RUN: wc -l | grep {\[01\]}
extern void X(void);
From baldrick at free.fr Mon Aug 27 12:08:14 2007
From: baldrick at free.fr (Duncan Sands)
Date: Mon, 27 Aug 2007 17:08:14 -0000
Subject: [llvm-commits] [llvm] r41497 -
/llvm/trunk/test/CodeGen/Generic/2007-07-06-FilterOffset.ll
Message-ID: <200708271708.l7RH8Ec0017614@zion.cs.uiuc.edu>
Author: baldrick
Date: Mon Aug 27 12:08:14 2007
New Revision: 41497
URL: http://llvm.org/viewvc/llvm-project?rev=41497&view=rev
Log:
Remove this test as it is too hard to fix after the
latest EH changes, and in any case it is hard to
imagine how the original bug could be reintroduced.
Removed:
llvm/trunk/test/CodeGen/Generic/2007-07-06-FilterOffset.ll
Removed: llvm/trunk/test/CodeGen/Generic/2007-07-06-FilterOffset.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/2007-07-06-FilterOffset.ll?rev=41496&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Generic/2007-07-06-FilterOffset.ll (original)
+++ llvm/trunk/test/CodeGen/Generic/2007-07-06-FilterOffset.ll (removed)
@@ -1,1621 +0,0 @@
-; RUN: llvm-as < %s | llc -enable-eh -asm-verbose -o - | \
-; RUN: grep {\\-4.*TypeInfo index}
-
-target triple = "i686-pc-linux-gnu"
- %struct.__class_type_info_pseudo = type { %struct.__type_info_pseudo }
- %struct.__type_info_pseudo = type { i8*, i8* }
- at _ZTI4a000 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a000, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a001 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a001, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a002 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a002, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a003 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a003, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a004 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a004, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a005 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a005, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a006 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a006, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a007 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a007, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a008 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a008, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a009 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a009, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a010 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a010, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a011 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a011, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a012 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a012, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a013 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a013, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a014 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a014, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a015 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a015, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a016 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a016, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a017 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a017, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a018 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a018, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a019 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a019, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a020 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a020, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a021 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a021, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a022 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a022, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a023 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a023, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a024 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a024, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a025 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a025, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a026 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a026, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a027 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a027, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a028 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a028, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a029 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a029, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a030 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a030, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a031 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a031, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a032 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a032, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a033 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a033, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a034 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a034, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a035 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a035, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a036 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a036, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a037 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a037, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a038 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a038, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a039 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a039, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a040 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a040, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a041 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a041, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a042 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a042, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a043 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a043, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a044 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a044, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a045 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a045, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a046 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a046, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a047 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a047, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a048 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a048, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a049 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a049, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a050 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a050, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a051 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a051, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a052 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a052, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a053 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a053, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a054 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a054, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a055 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a055, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a056 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a056, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a057 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a057, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a058 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a058, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a059 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a059, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a060 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a060, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a061 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a061, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a062 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a062, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a063 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a063, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a064 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a064, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a065 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a065, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a066 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a066, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a067 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a067, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a068 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a068, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a069 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a069, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a070 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a070, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a071 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a071, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a072 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a072, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a073 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a073, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a074 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a074, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a075 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a075, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a076 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a076, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a077 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a077, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a078 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a078, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a079 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a079, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a080 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a080, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a081 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a081, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a082 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a082, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a083 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a083, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a084 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a084, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a085 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a085, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a086 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a086, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a087 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a087, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a088 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a088, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a089 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a089, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a090 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a090, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a091 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a091, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a092 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a092, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a093 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a093, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a094 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a094, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a095 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a095, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a096 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a096, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a097 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a097, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a098 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a098, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a099 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a099, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a100 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a100, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a101 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a101, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a102 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a102, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a103 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a103, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a104 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a104, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a105 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a105, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a106 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a106, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a107 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a107, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a108 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a108, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a109 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a109, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a110 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a110, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a111 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a111, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a112 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a112, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a113 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a113, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a114 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a114, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a115 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a115, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a116 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a116, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a117 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a117, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a118 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a118, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a119 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a119, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a120 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a120, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a121 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a121, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a122 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a122, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a123 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a123, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a124 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a124, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a125 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a125, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a126 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a126, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a127 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a127, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTI4a128 = weak constant %struct.__class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv117__class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([6 x i8]* @_ZTS4a128, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1]
- at _ZTVN10__cxxabiv117__class_type_infoE = external constant [0 x i32 (...)*] ; <[0 x i32 (...)*]*> [#uses=1]
- at _ZTS4a128 = weak constant [6 x i8] c"4a128\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a127 = weak constant [6 x i8] c"4a127\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a126 = weak constant [6 x i8] c"4a126\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a125 = weak constant [6 x i8] c"4a125\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a124 = weak constant [6 x i8] c"4a124\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a123 = weak constant [6 x i8] c"4a123\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a122 = weak constant [6 x i8] c"4a122\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a121 = weak constant [6 x i8] c"4a121\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a120 = weak constant [6 x i8] c"4a120\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a119 = weak constant [6 x i8] c"4a119\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a118 = weak constant [6 x i8] c"4a118\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a117 = weak constant [6 x i8] c"4a117\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a116 = weak constant [6 x i8] c"4a116\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a115 = weak constant [6 x i8] c"4a115\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a114 = weak constant [6 x i8] c"4a114\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a113 = weak constant [6 x i8] c"4a113\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a112 = weak constant [6 x i8] c"4a112\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a111 = weak constant [6 x i8] c"4a111\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a110 = weak constant [6 x i8] c"4a110\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a109 = weak constant [6 x i8] c"4a109\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a108 = weak constant [6 x i8] c"4a108\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a107 = weak constant [6 x i8] c"4a107\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a106 = weak constant [6 x i8] c"4a106\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a105 = weak constant [6 x i8] c"4a105\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a104 = weak constant [6 x i8] c"4a104\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a103 = weak constant [6 x i8] c"4a103\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a102 = weak constant [6 x i8] c"4a102\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a101 = weak constant [6 x i8] c"4a101\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a100 = weak constant [6 x i8] c"4a100\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a099 = weak constant [6 x i8] c"4a099\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a098 = weak constant [6 x i8] c"4a098\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a097 = weak constant [6 x i8] c"4a097\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a096 = weak constant [6 x i8] c"4a096\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a095 = weak constant [6 x i8] c"4a095\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a094 = weak constant [6 x i8] c"4a094\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a093 = weak constant [6 x i8] c"4a093\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a092 = weak constant [6 x i8] c"4a092\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a091 = weak constant [6 x i8] c"4a091\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a090 = weak constant [6 x i8] c"4a090\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a089 = weak constant [6 x i8] c"4a089\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a088 = weak constant [6 x i8] c"4a088\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a087 = weak constant [6 x i8] c"4a087\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a086 = weak constant [6 x i8] c"4a086\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a085 = weak constant [6 x i8] c"4a085\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a084 = weak constant [6 x i8] c"4a084\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a083 = weak constant [6 x i8] c"4a083\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a082 = weak constant [6 x i8] c"4a082\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a081 = weak constant [6 x i8] c"4a081\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a080 = weak constant [6 x i8] c"4a080\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a079 = weak constant [6 x i8] c"4a079\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a078 = weak constant [6 x i8] c"4a078\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a077 = weak constant [6 x i8] c"4a077\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a076 = weak constant [6 x i8] c"4a076\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a075 = weak constant [6 x i8] c"4a075\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a074 = weak constant [6 x i8] c"4a074\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a073 = weak constant [6 x i8] c"4a073\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a072 = weak constant [6 x i8] c"4a072\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a071 = weak constant [6 x i8] c"4a071\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a070 = weak constant [6 x i8] c"4a070\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a069 = weak constant [6 x i8] c"4a069\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a068 = weak constant [6 x i8] c"4a068\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a067 = weak constant [6 x i8] c"4a067\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a066 = weak constant [6 x i8] c"4a066\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a065 = weak constant [6 x i8] c"4a065\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a064 = weak constant [6 x i8] c"4a064\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a063 = weak constant [6 x i8] c"4a063\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a062 = weak constant [6 x i8] c"4a062\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a061 = weak constant [6 x i8] c"4a061\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a060 = weak constant [6 x i8] c"4a060\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a059 = weak constant [6 x i8] c"4a059\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a058 = weak constant [6 x i8] c"4a058\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a057 = weak constant [6 x i8] c"4a057\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a056 = weak constant [6 x i8] c"4a056\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a055 = weak constant [6 x i8] c"4a055\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a054 = weak constant [6 x i8] c"4a054\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a053 = weak constant [6 x i8] c"4a053\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a052 = weak constant [6 x i8] c"4a052\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a051 = weak constant [6 x i8] c"4a051\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a050 = weak constant [6 x i8] c"4a050\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a049 = weak constant [6 x i8] c"4a049\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a048 = weak constant [6 x i8] c"4a048\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a047 = weak constant [6 x i8] c"4a047\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a046 = weak constant [6 x i8] c"4a046\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a045 = weak constant [6 x i8] c"4a045\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a044 = weak constant [6 x i8] c"4a044\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a043 = weak constant [6 x i8] c"4a043\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a042 = weak constant [6 x i8] c"4a042\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a041 = weak constant [6 x i8] c"4a041\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a040 = weak constant [6 x i8] c"4a040\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a039 = weak constant [6 x i8] c"4a039\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a038 = weak constant [6 x i8] c"4a038\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a037 = weak constant [6 x i8] c"4a037\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a036 = weak constant [6 x i8] c"4a036\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a035 = weak constant [6 x i8] c"4a035\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a034 = weak constant [6 x i8] c"4a034\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a033 = weak constant [6 x i8] c"4a033\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a032 = weak constant [6 x i8] c"4a032\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a031 = weak constant [6 x i8] c"4a031\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a030 = weak constant [6 x i8] c"4a030\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a029 = weak constant [6 x i8] c"4a029\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a028 = weak constant [6 x i8] c"4a028\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a027 = weak constant [6 x i8] c"4a027\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a026 = weak constant [6 x i8] c"4a026\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a025 = weak constant [6 x i8] c"4a025\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a024 = weak constant [6 x i8] c"4a024\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a023 = weak constant [6 x i8] c"4a023\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a022 = weak constant [6 x i8] c"4a022\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a021 = weak constant [6 x i8] c"4a021\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a020 = weak constant [6 x i8] c"4a020\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a019 = weak constant [6 x i8] c"4a019\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a018 = weak constant [6 x i8] c"4a018\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a017 = weak constant [6 x i8] c"4a017\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a016 = weak constant [6 x i8] c"4a016\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a015 = weak constant [6 x i8] c"4a015\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a014 = weak constant [6 x i8] c"4a014\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a013 = weak constant [6 x i8] c"4a013\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a012 = weak constant [6 x i8] c"4a012\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a011 = weak constant [6 x i8] c"4a011\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a010 = weak constant [6 x i8] c"4a010\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a009 = weak constant [6 x i8] c"4a009\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a008 = weak constant [6 x i8] c"4a008\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a007 = weak constant [6 x i8] c"4a007\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a006 = weak constant [6 x i8] c"4a006\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a005 = weak constant [6 x i8] c"4a005\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a004 = weak constant [6 x i8] c"4a004\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a003 = weak constant [6 x i8] c"4a003\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a002 = weak constant [6 x i8] c"4a002\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a001 = weak constant [6 x i8] c"4a001\00" ; <[6 x i8]*> [#uses=1]
- at _ZTS4a000 = weak constant [6 x i8] c"4a000\00" ; <[6 x i8]*> [#uses=1]
-
-declare void @_Z1Nv()
-
-declare i8* @llvm.eh.exception()
-
-declare i32 @llvm.eh.selector(i8*, i8*, ...)
-
-declare i32 @llvm.eh.typeid.for(i8*)
-
-declare i32 @__gxx_personality_v0(...)
-
-declare i32 @_Unwind_Resume(...)
-
-declare void @__cxa_call_unexpected(i8*)
-
-define void @_Z1Qv() {
-entry:
- invoke void @_Z1Nv( )
- to label %UnifiedReturnBlock2 unwind label %unwind
-
-unwind: ; preds = %entry
- %eh_ptr = tail call i8* @llvm.eh.exception( ) ; [#uses=3]
- %eh_select = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1, i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*), i32 1, i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a002 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a003 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a004 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a005 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a006 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a007 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a008 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a009 to i8*), i8* bitcast (%struct.__class_type_info!
_pseudo* @_ZTI4a010 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a011 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a012 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a013 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a014 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a015 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a016 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a017 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a018 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a019 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a020 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a021 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a022 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a023 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a024 to i8*), i8* bitcast (%struct.!
__class_type_info_pseudo* @_ZTI4a025 to i8*), i8* bitcast (%st!
ruct.__c
lass_type_info_pseudo* @_ZTI4a026 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a027 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a028 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a029 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a030 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a031 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a032 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a033 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a034 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a035 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a036 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a037 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a038 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a039 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a040 to i8*), i8* bitc!
ast (%struct.__class_type_info_pseudo* @_ZTI4a041 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a042 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a043 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a044 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a045 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a046 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a047 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a048 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a049 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a050 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a051 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a052 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a053 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a054 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a055 !
to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4!
a056 to
i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a057 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a058 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a059 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a060 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a061 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a062 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a063 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a064 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a065 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a066 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a067 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a068 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a069 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a070 to i8*), i8* bitcast (%struct.__class_type_info_pseudo!
* @_ZTI4a071 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a072 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a073 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a074 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a075 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a076 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a077 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a078 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a079 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a080 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a081 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a082 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a083 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a084 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a085 to i8*), i8* bitcast (%struct.__class!
_type_info_pseudo* @_ZTI4a086 to i8*), i8* bitcast (%struct.__!
class_ty
pe_info_pseudo* @_ZTI4a087 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a088 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a089 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a090 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a091 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a092 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a093 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a094 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a095 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a096 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a097 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a098 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a099 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a100 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a101 to i8*), i8* bitcast (%s!
truct.__class_type_info_pseudo* @_ZTI4a102 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a103 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a104 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a105 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a106 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a107 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a108 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a109 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a110 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a111 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a112 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a113 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a114 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a115 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a116 to i8*)!
, i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a117 to!
i8*), i
8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a118 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a119 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a120 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a121 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a122 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a123 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a124 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a125 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a126 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a127 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a128 to i8*) ) ; [#uses=2]
- %tmp260 = icmp slt i32 %eh_select, 0 ; [#uses=1]
- br i1 %tmp260, label %filter, label %cleanup279
-
-filter: ; preds = %unwind
- invoke void @__cxa_call_unexpected( i8* %eh_ptr )
- to label %UnifiedUnreachableBlock1 unwind label %unwind261
-
-unwind261: ; preds = %filter
- %eh_ptr262 = tail call i8* @llvm.eh.exception( ) ; [#uses=3]
- %eh_select264 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr262, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1, i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a002 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a003 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a004 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a005 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a006 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a007 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a008 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a009 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a010 to i8*), i8* bitcast (%struct.__class_type_info_!
pseudo* @_ZTI4a011 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a012 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a013 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a014 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a015 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a016 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a017 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a018 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a019 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a020 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a021 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a022 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a023 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a024 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a025 to i8*), i8* bitcast (%struct._!
_class_type_info_pseudo* @_ZTI4a026 to i8*), i8* bitcast (%str!
uct.__cl
ass_type_info_pseudo* @_ZTI4a027 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a028 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a029 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a030 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a031 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a032 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a033 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a034 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a035 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a036 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a037 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a038 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a039 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a040 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a041 to i8*), i8* bitca!
st (%struct.__class_type_info_pseudo* @_ZTI4a042 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a043 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a044 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a045 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a046 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a047 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a048 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a049 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a050 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a051 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a052 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a053 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a054 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a055 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a056 t!
o i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a!
057 to i
8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a058 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a059 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a060 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a061 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a062 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a063 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a064 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a065 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a066 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a067 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a068 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a069 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a070 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a071 to i8*), i8* bitcast (%struct.__class_type_info_pseudo*!
@_ZTI4a072 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a073 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a074 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a075 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a076 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a077 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a078 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a079 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a080 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a081 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a082 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a083 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a084 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a085 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a086 to i8*), i8* bitcast (%struct.__class_!
type_info_pseudo* @_ZTI4a087 to i8*), i8* bitcast (%struct.__c!
lass_typ
e_info_pseudo* @_ZTI4a088 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a089 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a090 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a091 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a092 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a093 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a094 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a095 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a096 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a097 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a098 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a099 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a100 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a101 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a102 to i8*), i8* bitcast (%st!
ruct.__class_type_info_pseudo* @_ZTI4a103 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a104 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a105 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a106 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a107 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a108 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a109 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a110 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a111 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a112 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a113 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a114 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a115 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a116 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a117 to i8*),!
i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a118 to !
i8*), i8
* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a119 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a120 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a121 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a122 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a123 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a124 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a125 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a126 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a127 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a128 to i8*) ) ; [#uses=2]
- %tmp2692602 = icmp slt i32 %eh_select264, 0 ; [#uses=1]
- br i1 %tmp2692602, label %filter270, label %cleanup279
-
-filter270: ; preds = %unwind261
- invoke void @__cxa_call_unexpected( i8* %eh_ptr262 )
- to label %UnifiedUnreachableBlock1 unwind label %unwind272
-
-unwind272: ; preds = %filter270
- %eh_ptr273 = tail call i8* @llvm.eh.exception( ) ; [#uses=3]
- %eh_select275 = tail call i32 (i8*, i8*, ...)* @llvm.eh.selector( i8* %eh_ptr273, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a002 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a003 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a004 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a005 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a006 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a007 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a008 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a009 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a010 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a011 to i8*), i8* bitcast (%struct.__class_type_info_pseudo*!
@_ZTI4a012 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a013 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a014 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a015 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a016 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a017 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a018 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a019 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a020 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a021 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a022 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a023 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a024 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a025 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a026 to i8*), i8* bitcast (%struct.__class_!
type_info_pseudo* @_ZTI4a027 to i8*), i8* bitcast (%struct.__c!
lass_typ
e_info_pseudo* @_ZTI4a028 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a029 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a030 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a031 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a032 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a033 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a034 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a035 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a036 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a037 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a038 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a039 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a040 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a041 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a042 to i8*), i8* bitcast (%st!
ruct.__class_type_info_pseudo* @_ZTI4a043 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a044 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a045 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a046 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a047 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a048 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a049 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a050 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a051 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a052 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a053 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a054 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a055 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a056 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a057 to i8*),!
i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a058 to !
i8*), i8
* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a059 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a060 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a061 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a062 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a063 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a064 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a065 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a066 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a067 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a068 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a069 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a070 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a071 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a072 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4!
a073 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a074 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a075 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a076 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a077 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a078 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a079 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a080 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a081 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a082 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a083 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a084 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a085 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a086 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a087 to i8*), i8* bitcast (%struct.__class_type_in!
fo_pseudo* @_ZTI4a088 to i8*), i8* bitcast (%struct.__class_ty!
pe_info_
pseudo* @_ZTI4a089 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a090 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a091 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a092 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a093 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a094 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a095 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a096 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a097 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a098 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a099 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a100 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a101 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a102 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a103 to i8*), i8* bitcast (%struct.__!
class_type_info_pseudo* @_ZTI4a104 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a105 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a106 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a107 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a108 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a109 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a110 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a111 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a112 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a113 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a114 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a115 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a116 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a117 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a118 to i8*), i8* bi!
tcast (%struct.__class_type_info_pseudo* @_ZTI4a119 to i8*), i!
8* bitca
st (%struct.__class_type_info_pseudo* @_ZTI4a120 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a121 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a122 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a123 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a124 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a125 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a126 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a127 to i8*), i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a128 to i8*) ) ; [#uses=2]
- %eh_typeid2863 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*) ) ; [#uses=1]
- %tmp2812865 = icmp eq i32 %eh_select275, %eh_typeid2863 ; [#uses=1]
- br i1 %tmp2812865, label %eh_then, label %eh_else
-
-cleanup279: ; preds = %unwind261, %unwind
- %eh_exception.1 = phi i8* [ %eh_ptr, %unwind ], [ %eh_ptr262, %unwind261 ] ; [#uses=2]
- %eh_selector.1 = phi i32 [ %eh_select, %unwind ], [ %eh_select264, %unwind261 ] ; [#uses=2]
- %eh_typeid = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a000 to i8*) ) ; [#uses=1]
- %tmp281 = icmp eq i32 %eh_selector.1, %eh_typeid ; [#uses=1]
- br i1 %tmp281, label %eh_then, label %eh_else
-
-eh_then: ; preds = %cleanup279, %unwind272
- %eh_exception.12604.0 = phi i8* [ %eh_ptr273, %unwind272 ], [ %eh_exception.1, %cleanup279 ] ; [#uses=1]
- %tmp284 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.0 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else: ; preds = %cleanup279, %unwind272
- %eh_exception.12604.1 = phi i8* [ %eh_ptr273, %unwind272 ], [ %eh_exception.1, %cleanup279 ] ; [#uses=129]
- %eh_selector.12734.1 = phi i32 [ %eh_select275, %unwind272 ], [ %eh_selector.1, %cleanup279 ] ; [#uses=128]
- %eh_typeid295 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a001 to i8*) ) ; [#uses=1]
- %tmp297 = icmp eq i32 %eh_selector.12734.1, %eh_typeid295 ; [#uses=1]
- br i1 %tmp297, label %eh_then298, label %eh_else312
-
-eh_then298: ; preds = %eh_else
- %tmp301 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else312: ; preds = %eh_else
- %eh_typeid313 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a002 to i8*) ) ; [#uses=1]
- %tmp315 = icmp eq i32 %eh_selector.12734.1, %eh_typeid313 ; [#uses=1]
- br i1 %tmp315, label %eh_then316, label %eh_else330
-
-eh_then316: ; preds = %eh_else312
- %tmp319 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else330: ; preds = %eh_else312
- %eh_typeid331 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a003 to i8*) ) ; [#uses=1]
- %tmp333 = icmp eq i32 %eh_selector.12734.1, %eh_typeid331 ; [#uses=1]
- br i1 %tmp333, label %eh_then334, label %eh_else348
-
-eh_then334: ; preds = %eh_else330
- %tmp337 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else348: ; preds = %eh_else330
- %eh_typeid349 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a004 to i8*) ) ; [#uses=1]
- %tmp351 = icmp eq i32 %eh_selector.12734.1, %eh_typeid349 ; [#uses=1]
- br i1 %tmp351, label %eh_then352, label %eh_else366
-
-eh_then352: ; preds = %eh_else348
- %tmp355 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else366: ; preds = %eh_else348
- %eh_typeid367 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a005 to i8*) ) ; [#uses=1]
- %tmp369 = icmp eq i32 %eh_selector.12734.1, %eh_typeid367 ; [#uses=1]
- br i1 %tmp369, label %eh_then370, label %eh_else384
-
-eh_then370: ; preds = %eh_else366
- %tmp373 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else384: ; preds = %eh_else366
- %eh_typeid385 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a006 to i8*) ) ; [#uses=1]
- %tmp387 = icmp eq i32 %eh_selector.12734.1, %eh_typeid385 ; [#uses=1]
- br i1 %tmp387, label %eh_then388, label %eh_else402
-
-eh_then388: ; preds = %eh_else384
- %tmp391 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else402: ; preds = %eh_else384
- %eh_typeid403 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a007 to i8*) ) ; [#uses=1]
- %tmp405 = icmp eq i32 %eh_selector.12734.1, %eh_typeid403 ; [#uses=1]
- br i1 %tmp405, label %eh_then406, label %eh_else420
-
-eh_then406: ; preds = %eh_else402
- %tmp409 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else420: ; preds = %eh_else402
- %eh_typeid421 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a008 to i8*) ) ; [#uses=1]
- %tmp423 = icmp eq i32 %eh_selector.12734.1, %eh_typeid421 ; [#uses=1]
- br i1 %tmp423, label %eh_then424, label %eh_else438
-
-eh_then424: ; preds = %eh_else420
- %tmp427 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else438: ; preds = %eh_else420
- %eh_typeid439 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a009 to i8*) ) ; [#uses=1]
- %tmp441 = icmp eq i32 %eh_selector.12734.1, %eh_typeid439 ; [#uses=1]
- br i1 %tmp441, label %eh_then442, label %eh_else456
-
-eh_then442: ; preds = %eh_else438
- %tmp445 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else456: ; preds = %eh_else438
- %eh_typeid457 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a010 to i8*) ) ; [#uses=1]
- %tmp459 = icmp eq i32 %eh_selector.12734.1, %eh_typeid457 ; [#uses=1]
- br i1 %tmp459, label %eh_then460, label %eh_else474
-
-eh_then460: ; preds = %eh_else456
- %tmp463 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else474: ; preds = %eh_else456
- %eh_typeid475 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a011 to i8*) ) ; [#uses=1]
- %tmp477 = icmp eq i32 %eh_selector.12734.1, %eh_typeid475 ; [#uses=1]
- br i1 %tmp477, label %eh_then478, label %eh_else492
-
-eh_then478: ; preds = %eh_else474
- %tmp481 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else492: ; preds = %eh_else474
- %eh_typeid493 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a012 to i8*) ) ; [#uses=1]
- %tmp495 = icmp eq i32 %eh_selector.12734.1, %eh_typeid493 ; [#uses=1]
- br i1 %tmp495, label %eh_then496, label %eh_else510
-
-eh_then496: ; preds = %eh_else492
- %tmp499 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else510: ; preds = %eh_else492
- %eh_typeid511 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a013 to i8*) ) ; [#uses=1]
- %tmp513 = icmp eq i32 %eh_selector.12734.1, %eh_typeid511 ; [#uses=1]
- br i1 %tmp513, label %eh_then514, label %eh_else528
-
-eh_then514: ; preds = %eh_else510
- %tmp517 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else528: ; preds = %eh_else510
- %eh_typeid529 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a014 to i8*) ) ; [#uses=1]
- %tmp531 = icmp eq i32 %eh_selector.12734.1, %eh_typeid529 ; [#uses=1]
- br i1 %tmp531, label %eh_then532, label %eh_else546
-
-eh_then532: ; preds = %eh_else528
- %tmp535 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else546: ; preds = %eh_else528
- %eh_typeid547 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a015 to i8*) ) ; [#uses=1]
- %tmp549 = icmp eq i32 %eh_selector.12734.1, %eh_typeid547 ; [#uses=1]
- br i1 %tmp549, label %eh_then550, label %eh_else564
-
-eh_then550: ; preds = %eh_else546
- %tmp553 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else564: ; preds = %eh_else546
- %eh_typeid565 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a016 to i8*) ) ; [#uses=1]
- %tmp567 = icmp eq i32 %eh_selector.12734.1, %eh_typeid565 ; [#uses=1]
- br i1 %tmp567, label %eh_then568, label %eh_else582
-
-eh_then568: ; preds = %eh_else564
- %tmp571 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else582: ; preds = %eh_else564
- %eh_typeid583 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a017 to i8*) ) ; [#uses=1]
- %tmp585 = icmp eq i32 %eh_selector.12734.1, %eh_typeid583 ; [#uses=1]
- br i1 %tmp585, label %eh_then586, label %eh_else600
-
-eh_then586: ; preds = %eh_else582
- %tmp589 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else600: ; preds = %eh_else582
- %eh_typeid601 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a018 to i8*) ) ; [#uses=1]
- %tmp603 = icmp eq i32 %eh_selector.12734.1, %eh_typeid601 ; [#uses=1]
- br i1 %tmp603, label %eh_then604, label %eh_else618
-
-eh_then604: ; preds = %eh_else600
- %tmp607 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else618: ; preds = %eh_else600
- %eh_typeid619 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a019 to i8*) ) ; [#uses=1]
- %tmp621 = icmp eq i32 %eh_selector.12734.1, %eh_typeid619 ; [#uses=1]
- br i1 %tmp621, label %eh_then622, label %eh_else636
-
-eh_then622: ; preds = %eh_else618
- %tmp625 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else636: ; preds = %eh_else618
- %eh_typeid637 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a020 to i8*) ) ; [#uses=1]
- %tmp639 = icmp eq i32 %eh_selector.12734.1, %eh_typeid637 ; [#uses=1]
- br i1 %tmp639, label %eh_then640, label %eh_else654
-
-eh_then640: ; preds = %eh_else636
- %tmp643 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else654: ; preds = %eh_else636
- %eh_typeid655 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a021 to i8*) ) ; [#uses=1]
- %tmp657 = icmp eq i32 %eh_selector.12734.1, %eh_typeid655 ; [#uses=1]
- br i1 %tmp657, label %eh_then658, label %eh_else672
-
-eh_then658: ; preds = %eh_else654
- %tmp661 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else672: ; preds = %eh_else654
- %eh_typeid673 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a022 to i8*) ) ; [#uses=1]
- %tmp675 = icmp eq i32 %eh_selector.12734.1, %eh_typeid673 ; [#uses=1]
- br i1 %tmp675, label %eh_then676, label %eh_else690
-
-eh_then676: ; preds = %eh_else672
- %tmp679 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else690: ; preds = %eh_else672
- %eh_typeid691 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a023 to i8*) ) ; [#uses=1]
- %tmp693 = icmp eq i32 %eh_selector.12734.1, %eh_typeid691 ; [#uses=1]
- br i1 %tmp693, label %eh_then694, label %eh_else708
-
-eh_then694: ; preds = %eh_else690
- %tmp697 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else708: ; preds = %eh_else690
- %eh_typeid709 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a024 to i8*) ) ; [#uses=1]
- %tmp711 = icmp eq i32 %eh_selector.12734.1, %eh_typeid709 ; [#uses=1]
- br i1 %tmp711, label %eh_then712, label %eh_else726
-
-eh_then712: ; preds = %eh_else708
- %tmp715 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else726: ; preds = %eh_else708
- %eh_typeid727 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a025 to i8*) ) ; [#uses=1]
- %tmp729 = icmp eq i32 %eh_selector.12734.1, %eh_typeid727 ; [#uses=1]
- br i1 %tmp729, label %eh_then730, label %eh_else744
-
-eh_then730: ; preds = %eh_else726
- %tmp733 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else744: ; preds = %eh_else726
- %eh_typeid745 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a026 to i8*) ) ; [#uses=1]
- %tmp747 = icmp eq i32 %eh_selector.12734.1, %eh_typeid745 ; [#uses=1]
- br i1 %tmp747, label %eh_then748, label %eh_else762
-
-eh_then748: ; preds = %eh_else744
- %tmp751 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else762: ; preds = %eh_else744
- %eh_typeid763 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a027 to i8*) ) ; [#uses=1]
- %tmp765 = icmp eq i32 %eh_selector.12734.1, %eh_typeid763 ; [#uses=1]
- br i1 %tmp765, label %eh_then766, label %eh_else780
-
-eh_then766: ; preds = %eh_else762
- %tmp769 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else780: ; preds = %eh_else762
- %eh_typeid781 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a028 to i8*) ) ; [#uses=1]
- %tmp783 = icmp eq i32 %eh_selector.12734.1, %eh_typeid781 ; [#uses=1]
- br i1 %tmp783, label %eh_then784, label %eh_else798
-
-eh_then784: ; preds = %eh_else780
- %tmp787 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else798: ; preds = %eh_else780
- %eh_typeid799 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a029 to i8*) ) ; [#uses=1]
- %tmp801 = icmp eq i32 %eh_selector.12734.1, %eh_typeid799 ; [#uses=1]
- br i1 %tmp801, label %eh_then802, label %eh_else816
-
-eh_then802: ; preds = %eh_else798
- %tmp805 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else816: ; preds = %eh_else798
- %eh_typeid817 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a030 to i8*) ) ; [#uses=1]
- %tmp819 = icmp eq i32 %eh_selector.12734.1, %eh_typeid817 ; [#uses=1]
- br i1 %tmp819, label %eh_then820, label %eh_else834
-
-eh_then820: ; preds = %eh_else816
- %tmp823 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else834: ; preds = %eh_else816
- %eh_typeid835 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a031 to i8*) ) ; [#uses=1]
- %tmp837 = icmp eq i32 %eh_selector.12734.1, %eh_typeid835 ; [#uses=1]
- br i1 %tmp837, label %eh_then838, label %eh_else852
-
-eh_then838: ; preds = %eh_else834
- %tmp841 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else852: ; preds = %eh_else834
- %eh_typeid853 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a032 to i8*) ) ; [#uses=1]
- %tmp855 = icmp eq i32 %eh_selector.12734.1, %eh_typeid853 ; [#uses=1]
- br i1 %tmp855, label %eh_then856, label %eh_else870
-
-eh_then856: ; preds = %eh_else852
- %tmp859 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else870: ; preds = %eh_else852
- %eh_typeid871 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a033 to i8*) ) ; [#uses=1]
- %tmp873 = icmp eq i32 %eh_selector.12734.1, %eh_typeid871 ; [#uses=1]
- br i1 %tmp873, label %eh_then874, label %eh_else888
-
-eh_then874: ; preds = %eh_else870
- %tmp877 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else888: ; preds = %eh_else870
- %eh_typeid889 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a034 to i8*) ) ; [#uses=1]
- %tmp891 = icmp eq i32 %eh_selector.12734.1, %eh_typeid889 ; [#uses=1]
- br i1 %tmp891, label %eh_then892, label %eh_else906
-
-eh_then892: ; preds = %eh_else888
- %tmp895 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else906: ; preds = %eh_else888
- %eh_typeid907 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a035 to i8*) ) ; [#uses=1]
- %tmp909 = icmp eq i32 %eh_selector.12734.1, %eh_typeid907 ; [#uses=1]
- br i1 %tmp909, label %eh_then910, label %eh_else924
-
-eh_then910: ; preds = %eh_else906
- %tmp913 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else924: ; preds = %eh_else906
- %eh_typeid925 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a036 to i8*) ) ; [#uses=1]
- %tmp927 = icmp eq i32 %eh_selector.12734.1, %eh_typeid925 ; [#uses=1]
- br i1 %tmp927, label %eh_then928, label %eh_else942
-
-eh_then928: ; preds = %eh_else924
- %tmp931 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else942: ; preds = %eh_else924
- %eh_typeid943 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a037 to i8*) ) ; [#uses=1]
- %tmp945 = icmp eq i32 %eh_selector.12734.1, %eh_typeid943 ; [#uses=1]
- br i1 %tmp945, label %eh_then946, label %eh_else960
-
-eh_then946: ; preds = %eh_else942
- %tmp949 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else960: ; preds = %eh_else942
- %eh_typeid961 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a038 to i8*) ) ; [#uses=1]
- %tmp963 = icmp eq i32 %eh_selector.12734.1, %eh_typeid961 ; [#uses=1]
- br i1 %tmp963, label %eh_then964, label %eh_else978
-
-eh_then964: ; preds = %eh_else960
- %tmp967 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else978: ; preds = %eh_else960
- %eh_typeid979 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a039 to i8*) ) ; [#uses=1]
- %tmp981 = icmp eq i32 %eh_selector.12734.1, %eh_typeid979 ; [#uses=1]
- br i1 %tmp981, label %eh_then982, label %eh_else996
-
-eh_then982: ; preds = %eh_else978
- %tmp985 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else996: ; preds = %eh_else978
- %eh_typeid997 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a040 to i8*) ) ; [#uses=1]
- %tmp999 = icmp eq i32 %eh_selector.12734.1, %eh_typeid997 ; [#uses=1]
- br i1 %tmp999, label %eh_then1000, label %eh_else1014
-
-eh_then1000: ; preds = %eh_else996
- %tmp1003 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1014: ; preds = %eh_else996
- %eh_typeid1015 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a041 to i8*) ) ; [#uses=1]
- %tmp1017 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1015 ; [#uses=1]
- br i1 %tmp1017, label %eh_then1018, label %eh_else1032
-
-eh_then1018: ; preds = %eh_else1014
- %tmp1021 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1032: ; preds = %eh_else1014
- %eh_typeid1033 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a042 to i8*) ) ; [#uses=1]
- %tmp1035 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1033 ; [#uses=1]
- br i1 %tmp1035, label %eh_then1036, label %eh_else1050
-
-eh_then1036: ; preds = %eh_else1032
- %tmp1039 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1050: ; preds = %eh_else1032
- %eh_typeid1051 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a043 to i8*) ) ; [#uses=1]
- %tmp1053 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1051 ; [#uses=1]
- br i1 %tmp1053, label %eh_then1054, label %eh_else1068
-
-eh_then1054: ; preds = %eh_else1050
- %tmp1057 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1068: ; preds = %eh_else1050
- %eh_typeid1069 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a044 to i8*) ) ; [#uses=1]
- %tmp1071 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1069 ; [#uses=1]
- br i1 %tmp1071, label %eh_then1072, label %eh_else1086
-
-eh_then1072: ; preds = %eh_else1068
- %tmp1075 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1086: ; preds = %eh_else1068
- %eh_typeid1087 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a045 to i8*) ) ; [#uses=1]
- %tmp1089 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1087 ; [#uses=1]
- br i1 %tmp1089, label %eh_then1090, label %eh_else1104
-
-eh_then1090: ; preds = %eh_else1086
- %tmp1093 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1104: ; preds = %eh_else1086
- %eh_typeid1105 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a046 to i8*) ) ; [#uses=1]
- %tmp1107 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1105 ; [#uses=1]
- br i1 %tmp1107, label %eh_then1108, label %eh_else1122
-
-eh_then1108: ; preds = %eh_else1104
- %tmp1111 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1122: ; preds = %eh_else1104
- %eh_typeid1123 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a047 to i8*) ) ; [#uses=1]
- %tmp1125 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1123 ; [#uses=1]
- br i1 %tmp1125, label %eh_then1126, label %eh_else1140
-
-eh_then1126: ; preds = %eh_else1122
- %tmp1129 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1140: ; preds = %eh_else1122
- %eh_typeid1141 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a048 to i8*) ) ; [#uses=1]
- %tmp1143 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1141 ; [#uses=1]
- br i1 %tmp1143, label %eh_then1144, label %eh_else1158
-
-eh_then1144: ; preds = %eh_else1140
- %tmp1147 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1158: ; preds = %eh_else1140
- %eh_typeid1159 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a049 to i8*) ) ; [#uses=1]
- %tmp1161 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1159 ; [#uses=1]
- br i1 %tmp1161, label %eh_then1162, label %eh_else1176
-
-eh_then1162: ; preds = %eh_else1158
- %tmp1165 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1176: ; preds = %eh_else1158
- %eh_typeid1177 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a050 to i8*) ) ; [#uses=1]
- %tmp1179 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1177 ; [#uses=1]
- br i1 %tmp1179, label %eh_then1180, label %eh_else1194
-
-eh_then1180: ; preds = %eh_else1176
- %tmp1183 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1194: ; preds = %eh_else1176
- %eh_typeid1195 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a051 to i8*) ) ; [#uses=1]
- %tmp1197 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1195 ; [#uses=1]
- br i1 %tmp1197, label %eh_then1198, label %eh_else1212
-
-eh_then1198: ; preds = %eh_else1194
- %tmp1201 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1212: ; preds = %eh_else1194
- %eh_typeid1213 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a052 to i8*) ) ; [#uses=1]
- %tmp1215 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1213 ; [#uses=1]
- br i1 %tmp1215, label %eh_then1216, label %eh_else1230
-
-eh_then1216: ; preds = %eh_else1212
- %tmp1219 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1230: ; preds = %eh_else1212
- %eh_typeid1231 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a053 to i8*) ) ; [#uses=1]
- %tmp1233 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1231 ; [#uses=1]
- br i1 %tmp1233, label %eh_then1234, label %eh_else1248
-
-eh_then1234: ; preds = %eh_else1230
- %tmp1237 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1248: ; preds = %eh_else1230
- %eh_typeid1249 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a054 to i8*) ) ; [#uses=1]
- %tmp1251 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1249 ; [#uses=1]
- br i1 %tmp1251, label %eh_then1252, label %eh_else1266
-
-eh_then1252: ; preds = %eh_else1248
- %tmp1255 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1266: ; preds = %eh_else1248
- %eh_typeid1267 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a055 to i8*) ) ; [#uses=1]
- %tmp1269 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1267 ; [#uses=1]
- br i1 %tmp1269, label %eh_then1270, label %eh_else1284
-
-eh_then1270: ; preds = %eh_else1266
- %tmp1273 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1284: ; preds = %eh_else1266
- %eh_typeid1285 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a056 to i8*) ) ; [#uses=1]
- %tmp1287 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1285 ; [#uses=1]
- br i1 %tmp1287, label %eh_then1288, label %eh_else1302
-
-eh_then1288: ; preds = %eh_else1284
- %tmp1291 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1302: ; preds = %eh_else1284
- %eh_typeid1303 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a057 to i8*) ) ; [#uses=1]
- %tmp1305 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1303 ; [#uses=1]
- br i1 %tmp1305, label %eh_then1306, label %eh_else1320
-
-eh_then1306: ; preds = %eh_else1302
- %tmp1309 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1320: ; preds = %eh_else1302
- %eh_typeid1321 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a058 to i8*) ) ; [#uses=1]
- %tmp1323 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1321 ; [#uses=1]
- br i1 %tmp1323, label %eh_then1324, label %eh_else1338
-
-eh_then1324: ; preds = %eh_else1320
- %tmp1327 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1338: ; preds = %eh_else1320
- %eh_typeid1339 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a059 to i8*) ) ; [#uses=1]
- %tmp1341 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1339 ; [#uses=1]
- br i1 %tmp1341, label %eh_then1342, label %eh_else1356
-
-eh_then1342: ; preds = %eh_else1338
- %tmp1345 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1356: ; preds = %eh_else1338
- %eh_typeid1357 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a060 to i8*) ) ; [#uses=1]
- %tmp1359 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1357 ; [#uses=1]
- br i1 %tmp1359, label %eh_then1360, label %eh_else1374
-
-eh_then1360: ; preds = %eh_else1356
- %tmp1363 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1374: ; preds = %eh_else1356
- %eh_typeid1375 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a061 to i8*) ) ; [#uses=1]
- %tmp1377 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1375 ; [#uses=1]
- br i1 %tmp1377, label %eh_then1378, label %eh_else1392
-
-eh_then1378: ; preds = %eh_else1374
- %tmp1381 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1392: ; preds = %eh_else1374
- %eh_typeid1393 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a062 to i8*) ) ; [#uses=1]
- %tmp1395 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1393 ; [#uses=1]
- br i1 %tmp1395, label %eh_then1396, label %eh_else1410
-
-eh_then1396: ; preds = %eh_else1392
- %tmp1399 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1410: ; preds = %eh_else1392
- %eh_typeid1411 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a063 to i8*) ) ; [#uses=1]
- %tmp1413 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1411 ; [#uses=1]
- br i1 %tmp1413, label %eh_then1414, label %eh_else1428
-
-eh_then1414: ; preds = %eh_else1410
- %tmp1417 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1428: ; preds = %eh_else1410
- %eh_typeid1429 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a064 to i8*) ) ; [#uses=1]
- %tmp1431 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1429 ; [#uses=1]
- br i1 %tmp1431, label %eh_then1432, label %eh_else1446
-
-eh_then1432: ; preds = %eh_else1428
- %tmp1435 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1446: ; preds = %eh_else1428
- %eh_typeid1447 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a065 to i8*) ) ; [#uses=1]
- %tmp1449 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1447 ; [#uses=1]
- br i1 %tmp1449, label %eh_then1450, label %eh_else1464
-
-eh_then1450: ; preds = %eh_else1446
- %tmp1453 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1464: ; preds = %eh_else1446
- %eh_typeid1465 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a066 to i8*) ) ; [#uses=1]
- %tmp1467 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1465 ; [#uses=1]
- br i1 %tmp1467, label %eh_then1468, label %eh_else1482
-
-eh_then1468: ; preds = %eh_else1464
- %tmp1471 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1482: ; preds = %eh_else1464
- %eh_typeid1483 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a067 to i8*) ) ; [#uses=1]
- %tmp1485 = icmp eq i32 %eh_selector.12734.1, %eh_typeid1483 ; [#uses=1]
- br i1 %tmp1485, label %eh_then1486, label %eh_else1500
-
-eh_then1486: ; preds = %eh_else1482
- %tmp1489 = tail call i8* @__cxa_begin_catch( i8* %eh_exception.12604.1 ) ; [#uses=0]
- tail call void @__cxa_end_catch( )
- ret void
-
-eh_else1500: ; preds = %eh_else1482
- %eh_typeid1501 = tail call i32 @llvm.eh.typeid.for( i8* bitcast (%struct.__class_type_info_pseudo* @_ZTI4a068 to i8*) ) ;