From baldrick at free.fr Mon Mar 16 02:39:47 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 16 Mar 2009 08:39:47 +0100 Subject: [llvm-commits] [llvm] r66976 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/split-eh-lpad-edges.ll In-Reply-To: References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <200903141140.49101.baldrick@free.fr> Message-ID: <200903160839.48588.baldrick@free.fr> Hi Evan, > > %reg1031 = MOV32rr %EAX > > EH_LABEL 2 > > %reg1025 = MOV32rr %reg1031 <= Invoke result, not an > > EH_LABEL > > JMP mbb > > > > So in this case the logic bails out, putting the copy at the end of > > the BB, > > even though it might still need to be before the invoke. > > Something seems wrong with this. Who inserted the copy? The copy from > EAX to reg1031 is the copy lowered by isel. Is PHI elimination > inserting the copy from reg1031 to reg1025? Then it should have done > the right thing. I'm not sure where it's coming from (see testcase below). By the way, what do you think of the patch I sent? It's more efficient in the common case of an invoke with one def/use of SrcReg in the basic block, but less efficient when there is more than one def/use because it has to walk more of the basic block. Ciao, Duncan. Run: llc -march=x86 -f phi.bc If I break on WalkPassEHTryRange, then the first time I hit the breakpoint I see such a register copy after the EH_LABEL. This is the MBB for "cont", and it is trying to find a place to put the copy for the phi node in the landing pad. declare i32 @f() declare i32 @g() define i32 @phi() { entry: %a = call i32 @f() ; [#uses=1] %b = invoke i32 @g() to label %cont unwind label %lpad ; [#uses=1] cont: ; preds = %entry %x = phi i32 [ %b, %entry ] ; [#uses=0] %aa = call i32 @f() ; [#uses=1] %bb = invoke i32 @g() to label %cont2 unwind label %lpad ; [#uses=1] cont2: ; preds = %cont %xx = phi i32 [ %bb, %cont ] ; [#uses=1] ret i32 %xx lpad: ; preds = %cont, %entry %y = phi i32 [ %a, %entry ], [ %aa, %cont ] ; [#uses=1] ret i32 %y } From baldrick at free.fr Mon Mar 16 04:03:56 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 16 Mar 2009 10:03:56 +0100 Subject: [llvm-commits] [llvm] r66976 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/split-eh-lpad-edges.ll In-Reply-To: References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <200903141140.49101.baldrick@free.fr> Message-ID: <200903161003.57095.baldrick@free.fr> Hi Evan, here's another testcase. If you compile with -fast (to avoid critical edge splitting) then the copy for the phi node is placed before the call, even though the value being used is the result of the call. That's because your patch skips over the definition of SrcReg while looking for the EH_LABELs. Is it ok with you if I apply my patch? I'm not sure how to adjust the 2009-03-13-PHIElimBug.ll testcase though. I guess I can grep on the -debug output... Ciao, Duncan. declare i32 @f() define i32 @phi() { entry: %a = invoke i32 @f() to label %cont unwind label %lpad ; [#uses=1] cont: ; preds = %lpad, %entry %x = phi i32 [ %a, %entry ], [ %b, %lpad ] ; [#uses=1] ret i32 %x lpad: ; preds = %entry %b = invoke i32 @f() to label %cont unwind label %lpad2 ; [#uses=1] lpad2: ; preds = %lpad ret i32 0 } From asl at math.spbu.ru Mon Mar 16 10:14:23 2009 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Mon, 16 Mar 2009 10:14:23 -0500 Subject: [llvm-commits] CVS: llvm-www/OpenProjects.html Message-ID: <200903161514.n2GFENKI010845@zion.cs.uiuc.edu> Changes in directory llvm-www: OpenProjects.html updated: 1.44 -> 1.45 --- Log message: Add VMKit 'OpenProjects' page --- Diffs of the changes: (+9 -4) OpenProjects.html | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) Index: llvm-www/OpenProjects.html diff -u llvm-www/OpenProjects.html:1.44 llvm-www/OpenProjects.html:1.45 --- llvm-www/OpenProjects.html:1.44 Fri Mar 13 10:36:35 2009 +++ llvm-www/OpenProjects.html Mon Mar 16 10:12:27 2009 @@ -4,7 +4,7 @@ + + @@ -496,7 +501,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"> LLVM Compiler Infrastructure
- Last modified: $Date: 2009/03/13 15:36:35 $ + Last modified: $Date: 2009/03/16 15:12:27 $ From asl at math.spbu.ru Mon Mar 16 10:22:58 2009 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Mon, 16 Mar 2009 10:22:58 -0500 Subject: [llvm-commits] CVS: llvm-www/OpenProjects.html Message-ID: <200903161522.n2GFMwlb011348@zion.cs.uiuc.edu> Changes in directory llvm-www: OpenProjects.html updated: 1.45 -> 1.46 --- Log message: More crazy ideas --- Diffs of the changes: (+6 -1) OpenProjects.html | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletion(-) Index: llvm-www/OpenProjects.html diff -u llvm-www/OpenProjects.html:1.45 llvm-www/OpenProjects.html:1.46 --- llvm-www/OpenProjects.html:1.45 Mon Mar 16 10:12:27 2009 +++ llvm-www/OpenProjects.html Mon Mar 16 10:19:44 2009 @@ -487,6 +487,11 @@ href="/docs/CommandGuide/html/bugpoint.html">bugpoint to reduce the test case and post it to a website or mailing list. Repeat ad infinitum.
  • Design a simple, recognizable logo.
  • +
  • Add sandbox features to the Interpreter: catch invalid memory accesses, + potentially unsafe operations (access via arbitrary memory pointer) etc. +
  • +
  • Port Valgrind to use LLVM codegeneration + and optimization passes instead of its own.
  • @@ -501,7 +506,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"> LLVM Compiler Infrastructure
    - Last modified: $Date: 2009/03/16 15:12:27 $ + Last modified: $Date: 2009/03/16 15:19:44 $ From dgregor at apple.com Mon Mar 16 12:04:15 2009 From: dgregor at apple.com (Douglas Gregor) Date: Mon, 16 Mar 2009 17:04:15 -0000 Subject: [llvm-commits] [llvm] r67042 - /llvm/trunk/utils/TableGen/CMakeLists.txt Message-ID: <200903161704.n2GH4Fgp015797@zion.cs.uiuc.edu> Author: dgregor Date: Mon Mar 16 12:04:14 2009 New Revision: 67042 URL: http://llvm.org/viewvc/llvm-project?rev=67042&view=rev Log: Add TGSourceMgr.cpp to CMake build, sort lines Modified: llvm/trunk/utils/TableGen/CMakeLists.txt Modified: llvm/trunk/utils/TableGen/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CMakeLists.txt?rev=67042&r1=67041&r2=67042&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/CMakeLists.txt (original) +++ llvm/trunk/utils/TableGen/CMakeLists.txt Mon Mar 16 12:04:14 2009 @@ -1,11 +1,13 @@ add_executable(tblgen AsmWriterEmitter.cpp CallingConvEmitter.cpp + ClangDiagnosticsEmitter.cpp CodeEmitterGen.cpp CodeGenDAGPatterns.cpp CodeGenInstruction.cpp CodeGenTarget.cpp DAGISelEmitter.cpp + FastISelEmitter.cpp InstrEnumEmitter.cpp InstrInfoEmitter.cpp IntrinsicEmitter.cpp @@ -15,11 +17,10 @@ SubtargetEmitter.cpp TGLexer.cpp TGParser.cpp + TGSourceMgr.cpp TGValueTypes.cpp TableGen.cpp TableGenBackend.cpp - FastISelEmitter.cpp - ClangDiagnosticsEmitter.cpp ) target_link_libraries(tblgen LLVMSupport LLVMSystem) From isanbard at gmail.com Mon Mar 16 13:08:54 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 16 Mar 2009 18:08:54 -0000 Subject: [llvm-commits] [llvm] r67044 - in /llvm/branches/Apple/Dib: include/llvm/CodeGen/FastISel.h lib/CodeGen/SelectionDAG/FastISel.cpp lib/Target/X86/X86FastISel.cpp test/CodeGen/X86/fast-isel-i1.ll test/CodeGen/X86/fast-isel-phys.ll test/CodeGen/X86/fast-isel-trunc.ll test/CodeGen/X86/fast-isel.ll Message-ID: <200903161808.n2GI8sJN018071@zion.cs.uiuc.edu> Author: void Date: Mon Mar 16 13:08:53 2009 New Revision: 67044 URL: http://llvm.org/viewvc/llvm-project?rev=67044&view=rev Log: --- Merging (from foreign repository) r66941 into '.': A test/CodeGen/X86/fast-isel-i1.ll U include/llvm/CodeGen/FastISel.h U lib/CodeGen/SelectionDAG/FastISel.cpp U lib/Target/X86/X86FastISel.cpp --- Merging (from foreign repository) r66988 into '.': U test/CodeGen/X86/fast-isel-phys.ll U test/CodeGen/X86/fast-isel.ll U test/CodeGen/X86/fast-isel-trunc.ll G lib/CodeGen/SelectionDAG/FastISel.cpp G lib/Target/X86/X86FastISel.cpp Added: llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-i1.ll Modified: llvm/branches/Apple/Dib/include/llvm/CodeGen/FastISel.h llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/FastISel.cpp llvm/branches/Apple/Dib/lib/Target/X86/X86FastISel.cpp llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-phys.ll llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-trunc.ll llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel.ll Modified: llvm/branches/Apple/Dib/include/llvm/CodeGen/FastISel.h URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/include/llvm/CodeGen/FastISel.h?rev=67044&r1=67043&r2=67044&view=diff ============================================================================== --- llvm/branches/Apple/Dib/include/llvm/CodeGen/FastISel.h (original) +++ llvm/branches/Apple/Dib/include/llvm/CodeGen/FastISel.h Mon Mar 16 13:08:53 2009 @@ -269,6 +269,11 @@ unsigned FastEmitInst_extractsubreg(MVT::SimpleValueType RetVT, unsigned Op0, uint32_t Idx); + /// FastEmitZExtFromI1 - Emit MachineInstrs to compute the value of Op + /// with all but the least significant bit set to zero. + unsigned FastEmitZExtFromI1(MVT::SimpleValueType VT, + unsigned Op); + /// FastEmitBranch - Emit an unconditional branch to the given block, /// unless it is the immediate (fall-through) successor, and update /// the CFG. Modified: llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/FastISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/FastISel.cpp?rev=67044&r1=67043&r2=67044&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/FastISel.cpp (original) +++ llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/FastISel.cpp Mon Mar 16 13:08:53 2009 @@ -477,27 +477,42 @@ MVT DstVT = TLI.getValueType(I->getType()); if (SrcVT == MVT::Other || !SrcVT.isSimple() || - DstVT == MVT::Other || !DstVT.isSimple() || - !TLI.isTypeLegal(DstVT)) + DstVT == MVT::Other || !DstVT.isSimple()) // Unhandled type. Halt "fast" selection and bail. return false; + // Check if the destination type is legal. Or as a special case, + // it may be i1 if we're doing a truncate because that's + // easy and somewhat common. + if (!TLI.isTypeLegal(DstVT)) + if (DstVT != MVT::i1 || Opcode != ISD::TRUNCATE) + // Unhandled type. Halt "fast" selection and bail. + return false; + // Check if the source operand is legal. Or as a special case, // it may be i1 if we're doing zero-extension because that's - // trivially easy and somewhat common. - if (!TLI.isTypeLegal(SrcVT)) { - if (SrcVT == MVT::i1 && Opcode == ISD::ZERO_EXTEND) - SrcVT = TLI.getTypeToTransformTo(SrcVT); - else + // easy and somewhat common. + if (!TLI.isTypeLegal(SrcVT)) + if (SrcVT != MVT::i1 || Opcode != ISD::ZERO_EXTEND) // Unhandled type. Halt "fast" selection and bail. return false; - } - + unsigned InputReg = getRegForValue(I->getOperand(0)); if (!InputReg) // Unhandled operand. Halt "fast" selection and bail. return false; - + + // If the operand is i1, arrange for the high bits in the register to be zero. + if (SrcVT == MVT::i1) { + SrcVT = TLI.getTypeToTransformTo(SrcVT); + InputReg = FastEmitZExtFromI1(SrcVT.getSimpleVT(), InputReg); + if (!InputReg) + return false; + } + // If the result is i1, truncate to the target's type for i1 first. + if (DstVT == MVT::i1) + DstVT = TLI.getTypeToTransformTo(DstVT); + unsigned ResultReg = FastEmit_r(SrcVT.getSimpleVT(), DstVT.getSimpleVT(), Opcode, @@ -970,3 +985,9 @@ } return ResultReg; } + +/// FastEmitZExtFromI1 - Emit MachineInstrs to compute the value of Op +/// with all but the least significant bit set to zero. +unsigned FastISel::FastEmitZExtFromI1(MVT::SimpleValueType VT, unsigned Op) { + return FastEmit_ri(VT, VT, ISD::AND, Op, 1); +} Modified: llvm/branches/Apple/Dib/lib/Target/X86/X86FastISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Target/X86/X86FastISel.cpp?rev=67044&r1=67043&r2=67044&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Target/X86/X86FastISel.cpp (original) +++ llvm/branches/Apple/Dib/lib/Target/X86/X86FastISel.cpp Mon Mar 16 13:08:53 2009 @@ -662,12 +662,14 @@ } bool X86FastISel::X86SelectZExt(Instruction *I) { - // Special-case hack: The only i1 values we know how to produce currently - // set the upper bits of an i8 value to zero. + // Handle zero-extension from i1 to i8, which is common. if (I->getType() == Type::Int8Ty && I->getOperand(0)->getType() == Type::Int1Ty) { unsigned ResultReg = getRegForValue(I->getOperand(0)); if (ResultReg == 0) return false; + // Set the high bits to zero. + ResultReg = FastEmitZExtFromI1(MVT::i8, ResultReg); + if (ResultReg == 0) return false; UpdateValueMap(I, ResultReg); return true; } @@ -1402,6 +1404,19 @@ return X86SelectFPTrunc(I); case Instruction::ExtractValue: return X86SelectExtractValue(I); + case Instruction::IntToPtr: // Deliberate fall-through. + case Instruction::PtrToInt: { + MVT SrcVT = TLI.getValueType(I->getOperand(0)->getType()); + MVT DstVT = TLI.getValueType(I->getType()); + if (DstVT.bitsGT(SrcVT)) + return X86SelectZExt(I); + if (DstVT.bitsLT(SrcVT)) + return X86SelectTrunc(I); + unsigned Reg = getRegForValue(I->getOperand(0)); + if (Reg == 0) return false; + UpdateValueMap(I, Reg); + return true; + } } return false; Added: llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-i1.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-i1.ll?rev=67044&view=auto ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-i1.ll (added) +++ llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-i1.ll Mon Mar 16 13:08:53 2009 @@ -0,0 +1,19 @@ +; RUN: llvm-as < %s | llc -march=x86 -fast-isel | grep {andb \$1, %} + +declare i64 @bar(i64) + +define i32 @foo(i64 %x) nounwind { + %y = add i64 %x, -3 ; [#uses=1] + %t = call i64 @bar(i64 %y) ; [#uses=1] + %s = mul i64 %t, 77 ; [#uses=1] + %z = trunc i64 %s to i1 ; [#uses=1] + br label %next + +next: ; preds = %0 + %u = zext i1 %z to i32 ; [#uses=1] + %v = add i32 %u, 1999 ; [#uses=1] + br label %exit + +exit: ; preds = %next + ret i32 %v +} Modified: llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-phys.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-phys.ll?rev=67044&r1=67043&r2=67044&view=diff ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-phys.ll (original) +++ llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-phys.ll Mon Mar 16 13:08:53 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -fast-isel -march=x86 +; RUN: llvm-as < %s | llc -fast-isel -fast-isel-abort -march=x86 define i8 @t2(i8 %a, i8 %c) nounwind { %tmp = shl i8 %a, %c Modified: llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-trunc.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-trunc.ll?rev=67044&r1=67043&r2=67044&view=diff ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-trunc.ll (original) +++ llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel-trunc.ll Mon Mar 16 13:08:53 2009 @@ -1,5 +1,5 @@ -; RUN: llvm-as < %s | llc -march=x86 -fast-isel -; RUN: llvm-as < %s | llc -march=x86-64 -fast-isel +; RUN: llvm-as < %s | llc -march=x86 -fast-isel -fast-isel-abort +; RUN: llvm-as < %s | llc -march=x86-64 -fast-isel -fast-isel-abort define i8 @t1(i32 %x) signext nounwind { %tmp1 = trunc i32 %x to i8 Modified: llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel.ll?rev=67044&r1=67043&r2=67044&view=diff ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel.ll (original) +++ llvm/branches/Apple/Dib/test/CodeGen/X86/fast-isel.ll Mon Mar 16 13:08:53 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -fast-isel -march=x86 -mattr=sse2 +; RUN: llvm-as < %s | llc -fast-isel -fast-isel-abort -march=x86 -mattr=sse2 ; This tests very minimal fast-isel functionality. @@ -47,3 +47,12 @@ %tmp2 = bitcast i32 0 to i32 ret i32 %tmp2 } + +define i1 @ptrtoint(i8* %p) nounwind { + %t = ptrtoint i8* %p to i1 + ret i1 %t +} +define i8* @inttoptr(i1 %p) nounwind { + %t = inttoptr i1 %p to i8* + ret i8* %t +} From sabre at nondot.org Mon Mar 16 13:28:28 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 16 Mar 2009 18:28:28 -0000 Subject: [llvm-commits] [llvm] r67046 - /llvm/trunk/test/Analysis/BasicAA/2009-03-04-GEPNoalias.ll Message-ID: <200903161828.n2GISSTi018952@zion.cs.uiuc.edu> Author: lattner Date: Mon Mar 16 13:28:27 2009 New Revision: 67046 URL: http://llvm.org/viewvc/llvm-project?rev=67046&view=rev Log: change this to test for an alias result more directly. Modified: llvm/trunk/test/Analysis/BasicAA/2009-03-04-GEPNoalias.ll Modified: llvm/trunk/test/Analysis/BasicAA/2009-03-04-GEPNoalias.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/2009-03-04-GEPNoalias.ll?rev=67046&r1=67045&r2=67046&view=diff ============================================================================== --- llvm/trunk/test/Analysis/BasicAA/2009-03-04-GEPNoalias.ll (original) +++ llvm/trunk/test/Analysis/BasicAA/2009-03-04-GEPNoalias.ll Mon Mar 16 13:28:27 2009 @@ -1,9 +1,13 @@ -; RUN: llvm-as < %s | opt -aa-eval -basicaa |& grep {0 no alias} +; RUN: llvm-as < %s | opt -basicaa -gvn | llvm-dis | grep load declare noalias i32* @noalias() -define void @test(i32 %x) { +define i32 @test(i32 %x) { %a = call i32* @noalias() + store i32 1, i32* %a %b = getelementptr i32* %a, i32 %x - ret void + store i32 2, i32* %b + + %c = load i32* %a + ret i32 %c } From scottm at aero.org Mon Mar 16 13:47:25 2009 From: scottm at aero.org (Scott Michel) Date: Mon, 16 Mar 2009 18:47:25 -0000 Subject: [llvm-commits] [llvm] r67048 - in /llvm/trunk: lib/Target/CellSPU/SPUISelLowering.cpp lib/Target/CellSPU/SPUInstrInfo.cpp lib/Target/CellSPU/SPUInstrInfo.td test/CodeGen/CellSPU/trunc.ll Message-ID: <200903161847.n2GIlPBU019873@zion.cs.uiuc.edu> Author: pingbak Date: Mon Mar 16 13:47:25 2009 New Revision: 67048 URL: http://llvm.org/viewvc/llvm-project?rev=67048&view=rev Log: CellSPU: Incorporate Tilmann's 128-bit operation patch. Evidently, it gets the llvm-gcc bootstrap a bit further along. Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td llvm/trunk/test/CodeGen/CellSPU/trunc.ll Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp?rev=67048&r1=67047&r2=67048&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp Mon Mar 16 13:47:25 2009 @@ -779,7 +779,7 @@ result = DAG.getNode(SPUISD::SHUFB, dl, vecVT, vectorizeOp, alignLoadVec, - DAG.getNode(ISD::BIT_CONVERT, dl, + DAG.getNode(ISD::BIT_CONVERT, dl, MVT::v4i32, insertEltOp)); result = DAG.getStore(the_chain, dl, result, basePtr, @@ -1035,7 +1035,7 @@ ArgOffset += StackSlotSize; } if (!MemOps.empty()) - Root = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, + Root = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, &MemOps[0], MemOps.size()); } @@ -1156,7 +1156,7 @@ // and flag operands which copy the outgoing args into the appropriate regs. SDValue InFlag; for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) { - Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first, + Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first, RegsToPass[i].second, InFlag); InFlag = Chain.getValue(1); } @@ -1239,7 +1239,7 @@ case MVT::Other: break; case MVT::i32: if (TheCall->getValueType(1) == MVT::i32) { - Chain = DAG.getCopyFromReg(Chain, dl, SPU::R4, + Chain = DAG.getCopyFromReg(Chain, dl, SPU::R4, MVT::i32, InFlag).getValue(1); ResultVals[0] = Chain.getValue(0); Chain = DAG.getCopyFromReg(Chain, dl, SPU::R3, MVT::i32, @@ -1247,20 +1247,20 @@ ResultVals[1] = Chain.getValue(0); NumResults = 2; } else { - Chain = DAG.getCopyFromReg(Chain, dl, SPU::R3, MVT::i32, + Chain = DAG.getCopyFromReg(Chain, dl, SPU::R3, MVT::i32, InFlag).getValue(1); ResultVals[0] = Chain.getValue(0); NumResults = 1; } break; case MVT::i64: - Chain = DAG.getCopyFromReg(Chain, dl, SPU::R3, MVT::i64, + Chain = DAG.getCopyFromReg(Chain, dl, SPU::R3, MVT::i64, InFlag).getValue(1); ResultVals[0] = Chain.getValue(0); NumResults = 1; break; case MVT::i128: - Chain = DAG.getCopyFromReg(Chain, dl, SPU::R3, MVT::i128, + Chain = DAG.getCopyFromReg(Chain, dl, SPU::R3, MVT::i128, InFlag).getValue(1); ResultVals[0] = Chain.getValue(0); NumResults = 1; @@ -1860,7 +1860,7 @@ DAG.getTargetConstant(V2Elt, MVT::i32), DAG.getCopyFromReg(InitTempReg, dl, VReg, PtrVT)); // Use shuffle mask in SHUFB synthetic instruction: - return DAG.getNode(SPUISD::SHUFB, dl, V1.getValueType(), V2, V1, + return DAG.getNode(SPUISD::SHUFB, dl, V1.getValueType(), V2, V1, ShufMaskOp); } else if (rotate) { int rotamt = (MaxElts - V0Elt) * EltVT.getSizeInBits()/8; @@ -2401,7 +2401,7 @@ SDValue Comp1 = DAG.getNode(ISD::SRL, dl, MVT::i32, - DAG.getCopyFromReg(CNTB_rescopy, dl, CNTB_reg, MVT::i32), + DAG.getCopyFromReg(CNTB_rescopy, dl, CNTB_reg, MVT::i32), Shift1); SDValue Sum1 = @@ -2588,7 +2588,7 @@ } SDValue result = - DAG.getSetCC(dl, ccResultVT, lhsSelect, rhsSelect, + DAG.getSetCC(dl, ccResultVT, lhsSelect, rhsSelect, (ISD::CondCode) compareOp); if ((CC->get() & 0x8) == 0) { @@ -2649,14 +2649,15 @@ //! Custom lower ISD::TRUNCATE static SDValue LowerTRUNCATE(SDValue Op, SelectionDAG &DAG) { + // Type to truncate to MVT VT = Op.getValueType(); MVT::SimpleValueType simpleVT = VT.getSimpleVT(); MVT VecVT = MVT::getVectorVT(VT, (128 / VT.getSizeInBits())); DebugLoc dl = Op.getDebugLoc(); + // Type to truncate from SDValue Op0 = Op.getOperand(0); MVT Op0VT = Op0.getValueType(); - MVT Op0VecVT = MVT::getVectorVT(Op0VT, (128 / Op0VT.getSizeInBits())); if (Op0VT.getSimpleVT() == MVT::i128 && simpleVT == MVT::i64) { // Create shuffle mask, least significant doubleword of quadword @@ -2669,15 +2670,10 @@ DAG.getConstant(maskHigh, MVT::i32), DAG.getConstant(maskLow, MVT::i32)); + SDValue truncShuffle = DAG.getNode(SPUISD::SHUFB, dl, VecVT, + Op0, Op0, shufMask); - SDValue PromoteScalar = DAG.getNode(SPUISD::PREFSLOT2VEC, dl, - Op0VecVT, Op0); - - SDValue truncShuffle = DAG.getNode(SPUISD::SHUFB, dl, Op0VecVT, - PromoteScalar, PromoteScalar, shufMask); - - return DAG.getNode(SPUISD::VEC2PREFSLOT, dl, VT, - DAG.getNode(ISD::BIT_CONVERT, dl, VecVT, truncShuffle)); + return DAG.getNode(SPUISD::VEC2PREFSLOT, dl, VT, truncShuffle); } return SDValue(); // Leave the truncate unmolested Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp?rev=67048&r1=67047&r2=67048&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp Mon Mar 16 13:47:25 2009 @@ -133,18 +133,22 @@ case SPU::ORi128_f32: case SPU::ORi128_r16: case SPU::ORi128_r8: +*/ case SPU::ORi128_vec: +/* case SPU::ORr64_i128: case SPU::ORf64_i128: case SPU::ORr32_i128: case SPU::ORf32_i128: case SPU::ORr16_i128: case SPU::ORr8_i128: - case SPU::ORvec_i128: */ + case SPU::ORvec_i128: /* case SPU::ORr16_r32: case SPU::ORr8_r32: + case SPU::ORf32_r32: + case SPU::ORr32_f32: case SPU::ORr32_r16: case SPU::ORr32_r8: case SPU::ORr16_r64: @@ -177,6 +181,7 @@ case SPU::ORr16: case SPU::ORr32: case SPU::ORr64: + case SPU::ORr128: case SPU::ORf32: case SPU::ORf64: assert(MI.getNumOperands() == 3 && Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td?rev=67048&r1=67047&r2=67048&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Mon Mar 16 13:47:25 2009 @@ -1429,9 +1429,6 @@ /* class ORCvtRegGPRC: ORCvtForm<(outs GPRC:$rT), (ins rclass:$rA)>; */ -/* class ORCvtVecGPRC: - ORCvtForm<(outs GPRC:$rT), (ins VECREG:$rA)>; */ - /* class ORCvtGPRCReg: ORCvtForm<(outs rclass:$rT), (ins GPRC:$rA)>; */ @@ -1447,8 +1444,11 @@ class ORCvtFormRegR64 pattern = [ ]>: ORCvtForm<(outs R64C:$rT), (ins rclass:$rA), pattern>; -/* class ORCvtGPRCVec: - ORCvtForm<(outs VECREG:$rT), (ins GPRC:$rA)>; */ +class ORCvtGPRCVec: + ORCvtForm<(outs VECREG:$rT), (ins GPRC:$rA)>; + +class ORCvtVecGPRC: + ORCvtForm<(outs GPRC:$rT), (ins VECREG:$rA)>; multiclass BitwiseOr { @@ -1496,8 +1496,14 @@ def f32_v4f32: ORExtractElt; def f64_v2f64: ORExtractElt; + // Conversion from vector to GPRC + def i128_vec: ORCvtVecGPRC; + + // Conversion from GPRC to vector + def vec_i128: ORCvtGPRCVec; + /* - // Conversion from GPRC to register + // Conversion from register to GPRC def i128_r64: ORCvtRegGPRC; def i128_f64: ORCvtRegGPRC; def i128_r32: ORCvtRegGPRC; @@ -1505,36 +1511,30 @@ def i128_r16: ORCvtRegGPRC; def i128_r8: ORCvtRegGPRC; - // Conversion from GPRC to vector - def i128_vec: ORCvtVecGPRC; - - // Conversion from register to GPRC + // Conversion from GPRC to register def r64_i128: ORCvtGPRCReg; def f64_i128: ORCvtGPRCReg; def r32_i128: ORCvtGPRCReg; def f32_i128: ORCvtGPRCReg; def r16_i128: ORCvtGPRCReg; def r8_i128: ORCvtGPRCReg; - - // Conversion from vector to GPRC - def vec_i128: ORCvtGPRCVec; */ /* // Conversion from register to R32C: - def r16_r32: ORCvtFormRegR32; - def r8_r32: ORCvtFormRegR32; + def r32_r16: ORCvtFormRegR32; + def r32_r8: ORCvtFormRegR32; // Conversion from R32C to register def r32_r16: ORCvtFormR32Reg; def r32_r8: ORCvtFormR32Reg; */ - // Conversion to register from R64C: + // Conversion from R64C to register: def r32_r64: ORCvtFormR64Reg; // def r16_r64: ORCvtFormR64Reg; // def r8_r64: ORCvtFormR64Reg; - // Conversion to R64C from register + // Conversion to R64C from register: def r64_r32: ORCvtFormRegR64; // def r64_r16: ORCvtFormRegR64; // def r64_r8: ORCvtFormRegR64; @@ -1659,6 +1659,7 @@ def v4i32: ORCVecInst; def v2i64: ORCVecInst; + def r128: ORCRegInst; def r64: ORCRegInst; def r32: ORCRegInst; def r16: ORCRegInst; @@ -1840,72 +1841,64 @@ [(set R32C:$rT, (xor R32C:$rA, i32ImmSExt10:$val))]>; // NAND: -def NANDv16i8: - RRForm<0b10010010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - "nand\t$rT, $rA, $rB", IntegerOp, - [(set (v16i8 VECREG:$rT), (vnot (and (v16i8 VECREG:$rA), - (v16i8 VECREG:$rB))))]>; -def NANDv8i16: - RRForm<0b10010010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - "nand\t$rT, $rA, $rB", IntegerOp, - [(set (v8i16 VECREG:$rT), (vnot (and (v8i16 VECREG:$rA), - (v8i16 VECREG:$rB))))]>; +class NANDInst pattern>: + RRForm<0b10010011000, OOL, IOL, "nand\t$rT, $rA, $rB", + IntegerOp, pattern>; -def NANDv4i32: - RRForm<0b10010010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - "nand\t$rT, $rA, $rB", IntegerOp, - [(set (v4i32 VECREG:$rT), (vnot (and (v4i32 VECREG:$rA), - (v4i32 VECREG:$rB))))]>; - -def NANDr32: - RRForm<0b10010010000, (outs R32C:$rT), (ins R32C:$rA, R32C:$rB), - "nand\t$rT, $rA, $rB", IntegerOp, - [(set R32C:$rT, (not (and R32C:$rA, R32C:$rB)))]>; - -def NANDr16: - RRForm<0b10010010000, (outs R16C:$rT), (ins R16C:$rA, R16C:$rB), - "nand\t$rT, $rA, $rB", IntegerOp, - [(set R16C:$rT, (not (and R16C:$rA, R16C:$rB)))]>; - -def NANDr8: - RRForm<0b10010010000, (outs R8C:$rT), (ins R8C:$rA, R8C:$rB), - "nand\t$rT, $rA, $rB", IntegerOp, - [(set R8C:$rT, (not (and R8C:$rA, R8C:$rB)))]>; +class NANDVecInst: + NANDInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), + [(set (vectype VECREG:$rT), (vnot (and (vectype VECREG:$rA), + (vectype VECREG:$rB))))]>; +class NANDRegInst: + NANDInst<(outs rclass:$rT), (ins rclass:$rA, rclass:$rB), + [(set rclass:$rT, (not (and rclass:$rA, rclass:$rB)))]>; + +multiclass BitwiseNand +{ + def v16i8: NANDVecInst; + def v8i16: NANDVecInst; + def v4i32: NANDVecInst; + def v2i64: NANDVecInst; + + def r128: NANDRegInst; + def r64: NANDRegInst; + def r32: NANDRegInst; + def r16: NANDRegInst; + def r8: NANDRegInst; +} + +defm NAND : BitwiseNand; // NOR: -def NORv16i8: - RRForm<0b10010010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - "nor\t$rT, $rA, $rB", IntegerOp, - [(set (v16i8 VECREG:$rT), (vnot (or (v16i8 VECREG:$rA), - (v16i8 VECREG:$rB))))]>; -def NORv8i16: - RRForm<0b10010010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - "nor\t$rT, $rA, $rB", IntegerOp, - [(set (v8i16 VECREG:$rT), (vnot (or (v8i16 VECREG:$rA), - (v8i16 VECREG:$rB))))]>; +class NORInst pattern>: + RRForm<0b10010010000, OOL, IOL, "nor\t$rT, $rA, $rB", + IntegerOp, pattern>; -def NORv4i32: - RRForm<0b10010010000, (outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - "nor\t$rT, $rA, $rB", IntegerOp, - [(set (v4i32 VECREG:$rT), (vnot (or (v4i32 VECREG:$rA), - (v4i32 VECREG:$rB))))]>; - -def NORr32: - RRForm<0b10010010000, (outs R32C:$rT), (ins R32C:$rA, R32C:$rB), - "nor\t$rT, $rA, $rB", IntegerOp, - [(set R32C:$rT, (not (or R32C:$rA, R32C:$rB)))]>; - -def NORr16: - RRForm<0b10010010000, (outs R16C:$rT), (ins R16C:$rA, R16C:$rB), - "nor\t$rT, $rA, $rB", IntegerOp, - [(set R16C:$rT, (not (or R16C:$rA, R16C:$rB)))]>; - -def NORr8: - RRForm<0b10010010000, (outs R8C:$rT), (ins R8C:$rA, R8C:$rB), - "nor\t$rT, $rA, $rB", IntegerOp, - [(set R8C:$rT, (not (or R8C:$rA, R8C:$rB)))]>; +class NORVecInst: + NORInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), + [(set (vectype VECREG:$rT), (vnot (or (vectype VECREG:$rA), + (vectype VECREG:$rB))))]>; +class NORRegInst: + NORInst<(outs rclass:$rT), (ins rclass:$rA, rclass:$rB), + [(set rclass:$rT, (not (or rclass:$rA, rclass:$rB)))]>; + +multiclass BitwiseNor +{ + def v16i8: NORVecInst; + def v8i16: NORVecInst; + def v4i32: NORVecInst; + def v2i64: NORVecInst; + + def r128: NORRegInst; + def r64: NORRegInst; + def r32: NORRegInst; + def r16: NORRegInst; + def r8: NORRegInst; +} + +defm NOR : BitwiseNor; // Select bits: class SELBInst pattern>: @@ -4361,8 +4354,7 @@ //===----------------------------------------------------------------------===// // Bit conversions (type conversions between vector/packed types) -// NOTE: Promotions are handled using the XS* instructions. Truncation -// is not handled. +// NOTE: Promotions are handled using the XS* instructions. //===----------------------------------------------------------------------===// def : Pat<(v16i8 (bitconvert (v8i16 VECREG:$src))), (v16i8 VECREG:$src)>; def : Pat<(v16i8 (bitconvert (v4i32 VECREG:$src))), (v16i8 VECREG:$src)>; @@ -4400,8 +4392,31 @@ def : Pat<(v2f64 (bitconvert (v2i64 VECREG:$src))), (v2f64 VECREG:$src)>; def : Pat<(v2f64 (bitconvert (v2f64 VECREG:$src))), (v2f64 VECREG:$src)>; -def : Pat<(f32 (bitconvert (i32 R32C:$src))), (f32 R32FP:$src)>; -def : Pat<(f64 (bitconvert (i64 R64C:$src))), (f64 R64FP:$src)>; +def : Pat<(i128 (bitconvert (v16i8 VECREG:$src))), + (ORi128_vec VECREG:$src)>; +def : Pat<(i128 (bitconvert (v8i16 VECREG:$src))), + (ORi128_vec VECREG:$src)>; +def : Pat<(i128 (bitconvert (v4i32 VECREG:$src))), + (ORi128_vec VECREG:$src)>; +def : Pat<(i128 (bitconvert (v2i64 VECREG:$src))), + (ORi128_vec VECREG:$src)>; +def : Pat<(i128 (bitconvert (v4f32 VECREG:$src))), + (ORi128_vec VECREG:$src)>; +def : Pat<(i128 (bitconvert (v2f64 VECREG:$src))), + (ORi128_vec VECREG:$src)>; + +def : Pat<(v16i8 (bitconvert (i128 GPRC:$src))), + (v16i8 (ORvec_i128 GPRC:$src))>; +def : Pat<(v8i16 (bitconvert (i128 GPRC:$src))), + (v8i16 (ORvec_i128 GPRC:$src))>; +def : Pat<(v4i32 (bitconvert (i128 GPRC:$src))), + (v4i32 (ORvec_i128 GPRC:$src))>; +def : Pat<(v2i64 (bitconvert (i128 GPRC:$src))), + (v2i64 (ORvec_i128 GPRC:$src))>; +def : Pat<(v4f32 (bitconvert (i128 GPRC:$src))), + (v4f32 (ORvec_i128 GPRC:$src))>; +def : Pat<(v2f64 (bitconvert (i128 GPRC:$src))), + (v2f64 (ORvec_i128 GPRC:$src))>; //===----------------------------------------------------------------------===// // Instruction patterns: @@ -4598,7 +4613,7 @@ def : Pat<(add (SPUhi tconstpool:$in, 0), (SPUlo tconstpool:$in, 0)), (IOHLlo (ILHUhi tconstpool:$in), tconstpool:$in)>; -// Instrinsics: +// Intrinsics: include "CellSDKIntrinsics.td" // Various math operator instruction sequences include "SPUMathInstr.td" Modified: llvm/trunk/test/CodeGen/CellSPU/trunc.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/trunc.ll?rev=67048&r1=67047&r2=67048&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/trunc.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/trunc.ll Mon Mar 16 13:47:25 2009 @@ -1,76 +1,94 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s -; RUN: grep shufb %t1.s | count 10 +; RUN: grep shufb %t1.s | count 19 ; RUN: grep {ilhu.*1799} %t1.s | count 1 -; RUN: grep {ilhu.*771} %t1.s | count 1 +; RUN: grep {ilhu.*771} %t1.s | count 2 ; RUN: grep {ilhu.*1543} %t1.s | count 1 ; RUN: grep {ilhu.*1029} %t1.s | count 1 -; RUN: grep {ilhu.*515} %t1.s | count 2 -; RUN: grep xsbh %t1.s | count 2 -; RUN: grep sfh %t1.s | count 1 +; RUN: grep {ilhu.*515} %t1.s | count 1 +; RUN: grep {ilhu.*3855} %t1.s | count 1 +; RUN: grep {ilhu.*3599} %t1.s | count 1 +; RUN: grep {ilhu.*3085} %t1.s | count 1 +; RUN: grep {iohl.*3855} %t1.s | count 1 +; RUN: grep {iohl.*3599} %t1.s | count 2 +; RUN: grep {iohl.*1543} %t1.s | count 2 +; RUN: grep {iohl.*771} %t1.s | count 2 +; RUN: grep {iohl.*515} %t1.s | count 1 +; RUN: grep {iohl.*1799} %t1.s | count 1 +; RUN: grep lqa %t1.s | count 1 +; RUN: grep cbd %t1.s | count 4 +; RUN: grep chd %t1.s | count 3 +; RUN: grep cwd %t1.s | count 1 +; RUN: grep cdd %t1.s | count 1 ; ModuleID = 'trunc.bc' target datalayout = "E-p:32:32:128-i1:8:128-i8:8:128-i16:16:128-i32:32:128-i64:32:128-f32:32:128-f64:64:128-v64:64:64-v128:128:128-a0:0:128-s0:128:128" target triple = "spu" -; codegen for i128 arguments is not implemented yet on CellSPU -; once this changes uncomment the functions below -; and update the expected results accordingly - -;define i8 @trunc_i128_i8(i128 %u) nounwind readnone { -;entry: -; %0 = trunc i128 %u to i8 -; ret i8 %0 -;} -;define i16 @trunc_i128_i16(i128 %u) nounwind readnone { -;entry: -; %0 = trunc i128 %u to i16 -; ret i16 %0 -;} -;define i32 @trunc_i128_i32(i128 %u) nounwind readnone { -;entry: -; %0 = trunc i128 %u to i32 -; ret i32 %0 -;} -;define i64 @trunc_i128_i64(i128 %u) nounwind readnone { -;entry: -; %0 = trunc i128 %u to i64 -; ret i64 %0 -;} - -define <16 x i8> @trunc_i64_i8(i64 %u, <16 x i8> %v) nounwind readnone { -entry: - %0 = trunc i64 %u to i8 - %tmp1 = insertelement <16 x i8> %v, i8 %0, i32 10 - ret <16 x i8> %tmp1 -} -define <8 x i16> @trunc_i64_i16(i64 %u, <8 x i16> %v) nounwind readnone { -entry: - %0 = trunc i64 %u to i16 - %tmp1 = insertelement <8 x i16> %v, i16 %0, i32 6 - ret <8 x i16> %tmp1 -} -define i32 @trunc_i64_i32(i64 %u, i32 %v) nounwind readnone { -entry: - %0 = trunc i64 %u to i32 - ret i32 %0 -} - -define i8 @trunc_i32_i8(i32 %u, i8 %v) nounwind readnone { -entry: - %0 = trunc i32 %u to i8 - %1 = sub i8 %0, %v - ret i8 %1 -} -define <8 x i16> @trunc_i32_i16(i32 %u, <8 x i16> %v) nounwind readnone { -entry: - %0 = trunc i32 %u to i16 - %tmp1 = insertelement <8 x i16> %v, i16 %0, i32 3 - ret <8 x i16> %tmp1 -} - -define <16 x i8> @trunc_i16_i8(i16 %u, <16 x i8> %v) nounwind readnone { -entry: - %0 = trunc i16 %u to i8 - %tmp1 = insertelement <16 x i8> %v, i8 %0, i32 5 - ret <16 x i8> %tmp1 +define <16 x i8> @trunc_i128_i8(i128 %u, <16 x i8> %v) { +entry: + %0 = trunc i128 %u to i8 + %tmp1 = insertelement <16 x i8> %v, i8 %0, i32 15 + ret <16 x i8> %tmp1 +} + +define <8 x i16> @trunc_i128_i16(i128 %u, <8 x i16> %v) { +entry: + %0 = trunc i128 %u to i16 + %tmp1 = insertelement <8 x i16> %v, i16 %0, i32 8 + ret <8 x i16> %tmp1 +} + +define <4 x i32> @trunc_i128_i32(i128 %u, <4 x i32> %v) { +entry: + %0 = trunc i128 %u to i32 + %tmp1 = insertelement <4 x i32> %v, i32 %0, i32 2 + ret <4 x i32> %tmp1 +} + +define <2 x i64> @trunc_i128_i64(i128 %u, <2 x i64> %v) { +entry: + %0 = trunc i128 %u to i64 + %tmp1 = insertelement <2 x i64> %v, i64 %0, i32 1 + ret <2 x i64> %tmp1 +} + +define <16 x i8> @trunc_i64_i8(i64 %u, <16 x i8> %v) { +entry: + %0 = trunc i64 %u to i8 + %tmp1 = insertelement <16 x i8> %v, i8 %0, i32 10 + ret <16 x i8> %tmp1 +} + +define <8 x i16> @trunc_i64_i16(i64 %u, <8 x i16> %v) { +entry: + %0 = trunc i64 %u to i16 + %tmp1 = insertelement <8 x i16> %v, i16 %0, i32 6 + ret <8 x i16> %tmp1 +} + +define i32 @trunc_i64_i32(i64 %u) { +entry: + %0 = trunc i64 %u to i32 + ret i32 %0 +} + +define <16 x i8> @trunc_i32_i8(i32 %u, <16 x i8> %v) { +entry: + %0 = trunc i32 %u to i8 + %tmp1 = insertelement <16 x i8> %v, i8 %0, i32 7 + ret <16 x i8> %tmp1 +} + +define <8 x i16> @trunc_i32_i16(i32 %u, <8 x i16> %v) { +entry: + %0 = trunc i32 %u to i16 + %tmp1 = insertelement <8 x i16> %v, i16 %0, i32 3 + ret <8 x i16> %tmp1 +} + +define <16 x i8> @trunc_i16_i8(i16 %u, <16 x i8> %v) { +entry: + %0 = trunc i16 %u to i8 + %tmp1 = insertelement <16 x i8> %v, i8 %0, i32 5 + ret <16 x i8> %tmp1 } From echeng at apple.com Mon Mar 16 13:57:50 2009 From: echeng at apple.com (Evan Cheng) Date: Mon, 16 Mar 2009 11:57:50 -0700 Subject: [llvm-commits] [llvm] r66976 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/split-eh-lpad-edges.ll In-Reply-To: <200903160839.48588.baldrick@free.fr> References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <200903141140.49101.baldrick@free.fr> <200903160839.48588.baldrick@free.fr> Message-ID: <71169C44-EE22-4514-BE6B-088598194AE3@apple.com> On Mar 16, 2009, at 12:39 AM, Duncan Sands wrote: > Hi Evan, > >>> %reg1031 = MOV32rr %EAX >>> EH_LABEL 2 >>> %reg1025 = MOV32rr %reg1031 <= Invoke result, not an >>> EH_LABEL >>> JMP mbb >>> >>> So in this case the logic bails out, putting the copy at the end of >>> the BB, >>> even though it might still need to be before the invoke. >> >> Something seems wrong with this. Who inserted the copy? The copy from >> EAX to reg1031 is the copy lowered by isel. Is PHI elimination >> inserting the copy from reg1031 to reg1025? Then it should have done >> the right thing. > > I'm not sure where it's coming from (see testcase below). By the > way, what > do you think of the patch I sent? It's more efficient in the common > case of > an invoke with one def/use of SrcReg in the basic block, but less > efficient > when there is more than one def/use because it has to walk more of > the basic > block. That looks good unless there is some assumptions of placement of copies introduced by PHI elim (I surely hope not). This needs to go through lots of testing. Also, I really want to know where the above mentioned copy copies from. But I haven't found the time to look at it. Evan > > Ciao, > > Duncan. > > Run: llc -march=x86 -f phi.bc > > If I break on WalkPassEHTryRange, then the first time I hit the > breakpoint > I see such a register copy after the EH_LABEL. This is the MBB for > "cont", > and it is trying to find a place to put the copy for the phi node in > the > landing pad. > > declare i32 @f() > > declare i32 @g() > > define i32 @phi() { > entry: > %a = call i32 @f() ; [#uses=1] > %b = invoke i32 @g() > to label %cont unwind label %lpad ; [#uses=1] > > cont: ; preds = %entry > %x = phi i32 [ %b, %entry ] ; [#uses=0] > %aa = call i32 @f() ; [#uses=1] > %bb = invoke i32 @g() > to label %cont2 unwind label %lpad ; [#uses=1] > > cont2: ; preds = %cont > %xx = phi i32 [ %bb, %cont ] ; [#uses=1] > ret i32 %xx > > lpad: ; preds = %cont, %entry > %y = phi i32 [ %a, %entry ], [ %aa, %cont ] ; [#uses=1] > ret i32 %y > } From baldrick at free.fr Mon Mar 16 14:58:39 2009 From: baldrick at free.fr (Duncan Sands) Date: Mon, 16 Mar 2009 19:58:39 -0000 Subject: [llvm-commits] [llvm] r67049 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Message-ID: <200903161958.n2GJwdD6022601@zion.cs.uiuc.edu> Author: baldrick Date: Mon Mar 16 14:58:38 2009 New Revision: 67049 URL: http://llvm.org/viewvc/llvm-project?rev=67049&view=rev Log: Tweak the fix for PR3784: be less sensitive about just how invokes are set up. The fix could be disturbed by register copies coming after the EH_LABEL, and also didn't behave quite right when it was the invoke result that was used in a phi node. Also (see new testcase) fix another phi elimination bug while there: register copies in the landing pad need to come after the EH_LABEL, because that's where execution branches to when unwinding. If they come before the EH_LABEL then they will never be executed... Also tweak the original testcase so it doesn't use a no-longer existing counter. The accumulated phi elimination changes fix two of seven Ada testsuite failures that turned up after landing pad critical edge splitting was turned off. So there's probably more to come. Added: llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PHIElimination.cpp?rev=67049&r1=67048&r2=67049&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PHIElimination.cpp (original) +++ llvm/trunk/lib/CodeGen/PHIElimination.cpp Mon Mar 16 14:58:38 2009 @@ -14,6 +14,8 @@ //===----------------------------------------------------------------------===// #define DEBUG_TYPE "phielim" +#include "llvm/BasicBlock.h" +#include "llvm/Instructions.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/MachineFunctionPass.h" @@ -31,7 +33,6 @@ using namespace llvm; STATISTIC(NumAtomic, "Number of atomic phis lowered"); -STATISTIC(NumEH, "Number of EH try blocks skipped"); namespace { class VISIBILITY_HIDDEN PNE : public MachineFunctionPass { @@ -66,8 +67,25 @@ /// void analyzePHINodes(const MachineFunction& Fn); - void WalkPassEHTryRange(MachineBasicBlock &MBB, - MachineBasicBlock::iterator &I, unsigned SrcReg); + // FindCopyInsertPoint - Find a safe place in MBB to insert a copy from + // SrcReg. This needs to be after any def or uses of SrcReg, but before + // any subsequent point where control flow might jump out of the basic + // block. + MachineBasicBlock::iterator FindCopyInsertPoint(MachineBasicBlock &MBB, + unsigned SrcReg); + + // SkipPHIsAndLabels - Copies need to be inserted after phi nodes and + // also after any exception handling labels: in landing pads execution + // starts at the label, so any copies placed before it won't be executed! + MachineBasicBlock::iterator SkipPHIsAndLabels(MachineBasicBlock &MBB, + MachineBasicBlock::iterator I) { + // Rather than assuming that EH labels come before other kinds of labels, + // just skip all labels. + while (I != MBB.end() && + (I->getOpcode() == TargetInstrInfo::PHI || I->isLabel())) + ++I; + return I; + } typedef std::pair BBVRegPair; typedef std::map VRegPHIUse; @@ -120,10 +138,7 @@ // Get an iterator to the first instruction after the last PHI node (this may // also be the end of the basic block). - MachineBasicBlock::iterator AfterPHIsIt = MBB.begin(); - while (AfterPHIsIt != MBB.end() && - AfterPHIsIt->getOpcode() == TargetInstrInfo::PHI) - ++AfterPHIsIt; // Skip over all of the PHI nodes... + MachineBasicBlock::iterator AfterPHIsIt = SkipPHIsAndLabels(MBB, MBB.begin()); while (MBB.front().getOpcode() == TargetInstrInfo::PHI) LowerAtomicPHINode(MBB, AfterPHIsIt); @@ -144,37 +159,47 @@ return true; } -void PNE::WalkPassEHTryRange(MachineBasicBlock &MBB, - MachineBasicBlock::iterator &I, unsigned SrcReg) { - if (I == MBB.begin()) - return; - MachineBasicBlock::iterator PI = prior(I); - if (PI->getOpcode() != TargetInstrInfo::EH_LABEL) - return; - - // Trying to walk pass the EH try range. If we run into a use instruction, - // we want to insert the copy there. - SmallPtrSet UsesInMBB; - for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(SrcReg), - UE = MRI->use_end(); UI != UE; ++UI) { - MachineInstr *UseMI = &*UI; - if (UseMI->getParent() == &MBB) - UsesInMBB.insert(UseMI); +// FindCopyInsertPoint - Find a safe place in MBB to insert a copy from SrcReg. +// This needs to be after any def or uses of SrcReg, but before any subsequent +// point where control flow might jump out of the basic block. +MachineBasicBlock::iterator PNE::FindCopyInsertPoint(MachineBasicBlock &MBB, + unsigned SrcReg) { + // Handle the trivial case trivially. + if (MBB.empty()) + return MBB.begin(); + + // If this basic block does not contain an invoke, then control flow always + // reaches the end of it, so place the copy there. The logic below works in + // this case too, but is more expensive. + if (!isa(MBB.getBasicBlock()->getTerminator())) + return MBB.getFirstTerminator(); + + // Discover any definition/uses in this basic block. + SmallPtrSet DefUsesInMBB; + for (MachineRegisterInfo::reg_iterator RI = MRI->reg_begin(SrcReg), + RE = MRI->reg_end(); RI != RE; ++RI) { + MachineInstr *DefUseMI = &*RI; + if (DefUseMI->getParent() == &MBB) + DefUsesInMBB.insert(DefUseMI); } - while (PI != MBB.begin()) { - --PI; - if (PI->getOpcode() == TargetInstrInfo::EH_LABEL) { - ++NumEH; - I = PI; - return; - } else if (UsesInMBB.count(&*PI)) { - ++NumEH; - I = next(PI); - return; - } + MachineBasicBlock::iterator InsertPoint; + if (DefUsesInMBB.empty()) { + // No def/uses. Insert the copy at the start of the basic block. + InsertPoint = MBB.begin(); + } else if (DefUsesInMBB.size() == 1) { + // Insert the copy immediately after the definition/use. + InsertPoint = *DefUsesInMBB.begin(); + ++InsertPoint; + } else { + // Insert the copy immediately after the last definition/use. + InsertPoint = MBB.end(); + while (!DefUsesInMBB.count(&*--InsertPoint)) {} + ++InsertPoint; } - return; + + // Make sure the copy goes after any phi nodes however. + return SkipPHIsAndLabels(MBB, InsertPoint); } /// LowerAtomicPHINode - Lower the PHI node at the top of the specified block, @@ -273,10 +298,7 @@ // Find a safe location to insert the copy, this may be the first terminator // in the block (or end()). - MachineBasicBlock::iterator InsertPos = opBlock.getFirstTerminator(); - - // Walk pass EH try range if needed. - WalkPassEHTryRange(opBlock, InsertPos, SrcReg); + MachineBasicBlock::iterator InsertPos = FindCopyInsertPoint(opBlock, SrcReg); // Insert the copy. TII->copyRegToReg(opBlock, InsertPos, IncomingReg, SrcReg, RC, RC); Modified: llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll?rev=67049&r1=67048&r2=67049&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll (original) +++ llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll Mon Mar 16 14:58:38 2009 @@ -1,37 +1,28 @@ -; RUN: llvm-as < %s | llc -mtriple=i386-pc-linux-gnu -stats |& grep phielim | grep {Number of EH try blocks skipped} | grep 4 +; RUN: llvm-as < %s | llc -march=x86 | grep -A 2 {call f} | grep movl +; Check the register copy comes after the call to f and before the call to g ; PR3784 - %struct.c38002a__arr___XUB = type { i32, i32 } - %struct.c38002a__arr_name = type { [0 x i32]*, %struct.c38002a__arr___XUB* } - %struct.c38002a__rec = type { i32, %struct.c38002a__arr_name } +declare i32 @f() -define void @_ada_c38002a() { -entry: - %0 = invoke i8* @__gnat_malloc(i32 12) - to label %invcont unwind label %lpad ; [#uses=0] +declare i32 @g() -invcont: ; preds = %entry - %1 = invoke i8* @__gnat_malloc(i32 20) - to label %invcont1 unwind label %lpad ; [#uses=0] - -invcont1: ; preds = %invcont - %2 = invoke i32 @report__ident_int(i32 2) - to label %.noexc unwind label %lpad ; [#uses=0] - -.noexc: ; preds = %invcont1 - %3 = invoke i32 @report__ident_int(i32 3) - to label %.noexc88 unwind label %lpad ; [#uses=0] - -.noexc88: ; preds = %.noexc - unreachable - -lpad: ; preds = %.noexc, %invcont1, %invcont, %entry - %r.0 = phi %struct.c38002a__rec* [ null, %entry ], [ null, %invcont ], [ null, %invcont1 ], [ null, %.noexc ] ; <%struct.c38002a__rec*> [#uses=1] - %4 = getelementptr %struct.c38002a__rec* %r.0, i32 0, i32 0 ; [#uses=1] - %5 = load i32* %4, align 4 ; [#uses=0] - ret void +define i32 @phi() { +entry: + %a = call i32 @f() ; [#uses=1] + %b = invoke i32 @g() + to label %cont unwind label %lpad ; [#uses=1] + +cont: ; preds = %entry + %x = phi i32 [ %b, %entry ] ; [#uses=0] + %aa = call i32 @g() ; [#uses=1] + %bb = invoke i32 @g() + to label %cont2 unwind label %lpad ; [#uses=1] + +cont2: ; preds = %cont + %xx = phi i32 [ %bb, %cont ] ; [#uses=1] + ret i32 %xx + +lpad: ; preds = %cont, %entry + %y = phi i32 [ %a, %entry ], [ %aa, %cont ] ; [#uses=1] + ret i32 %y } - -declare i32 @report__ident_int(i32) - -declare i8* @__gnat_malloc(i32) Added: llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll?rev=67049&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll (added) +++ llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Mon Mar 16 14:58:38 2009 @@ -0,0 +1,21 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep -A 1 lpad | grep Llabel +; Check that register copies in the landing pad come after the EH_LABEL + +declare i32 @f() + +define i32 @phi(i32 %x) { +entry: + %a = invoke i32 @f() + to label %cont unwind label %lpad ; [#uses=1] + +cont: ; preds = %entry + %b = invoke i32 @f() + to label %cont2 unwind label %lpad ; [#uses=1] + +cont2: ; preds = %cont + ret i32 %b + +lpad: ; preds = %cont, %entry + %v = phi i32 [ %x, %entry ], [ %a, %cont ] ; [#uses=1] + ret i32 %v +} From isanbard at gmail.com Mon Mar 16 15:23:40 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 16 Mar 2009 12:23:40 -0800 Subject: [llvm-commits] [llvm] r67049 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll In-Reply-To: <200903161958.n2GJwdD6022601@zion.cs.uiuc.edu> References: <200903161958.n2GJwdD6022601@zion.cs.uiuc.edu> Message-ID: <16e5fdf90903161323r3ea5f54l4384f6265dc261f4@mail.gmail.com> Duncan, This test failed because of this patch. I'm going to temporarily revert it. Please investigate it. Thanks! -bw Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/dg.exp ... FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/2009-03-13-PHIElimBug.ll for PR3784 Failed with exit(1) at line 1 while running: llvm-as < /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/2009-03-13-PHIElimBug.ll | llc -march=x86 | /usr/bin/grep -A 2 {call f} | /usr/bin/grep movl child process exited abnormally On Mon, Mar 16, 2009 at 11:58 AM, Duncan Sands wrote: > Author: baldrick > Date: Mon Mar 16 14:58:38 2009 > New Revision: 67049 > > URL: http://llvm.org/viewvc/llvm-project?rev=67049&view=rev > Log: > Tweak the fix for PR3784: be less sensitive about just > how invokes are set up. ?The fix could be disturbed by > register copies coming after the EH_LABEL, and also didn't > behave quite right when it was the invoke result that > was used in a phi node. ?Also (see new testcase) fix > another phi elimination bug while there: register copies > in the landing pad need to come after the EH_LABEL, because > that's where execution branches to when unwinding. ?If they > come before the EH_LABEL then they will never be executed... > Also tweak the original testcase so it doesn't use a no-longer > existing counter. > The accumulated phi elimination changes fix two of seven Ada > testsuite failures that turned up after landing pad critical > edge splitting was turned off. ?So there's probably more to come. > > Added: > ? ?llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll > Modified: > ? ?llvm/trunk/lib/CodeGen/PHIElimination.cpp > ? ?llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll > > Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PHIElimination.cpp?rev=67049&r1=67048&r2=67049&view=diff > > ============================================================================== > --- llvm/trunk/lib/CodeGen/PHIElimination.cpp (original) > +++ llvm/trunk/lib/CodeGen/PHIElimination.cpp Mon Mar 16 14:58:38 2009 > @@ -14,6 +14,8 @@ > ?//===----------------------------------------------------------------------===// > > ?#define DEBUG_TYPE "phielim" > +#include "llvm/BasicBlock.h" > +#include "llvm/Instructions.h" > ?#include "llvm/CodeGen/LiveVariables.h" > ?#include "llvm/CodeGen/Passes.h" > ?#include "llvm/CodeGen/MachineFunctionPass.h" > @@ -31,7 +33,6 @@ > ?using namespace llvm; > > ?STATISTIC(NumAtomic, "Number of atomic phis lowered"); > -STATISTIC(NumEH, ? ? "Number of EH try blocks skipped"); > > ?namespace { > ? class VISIBILITY_HIDDEN PNE : public MachineFunctionPass { > @@ -66,8 +67,25 @@ > ? ? /// > ? ? void analyzePHINodes(const MachineFunction& Fn); > > - ? ?void WalkPassEHTryRange(MachineBasicBlock &MBB, > - ? ? ? ? ? ? ? ? ? ? ? ? ? ?MachineBasicBlock::iterator &I, unsigned SrcReg); > + ? ?// FindCopyInsertPoint - Find a safe place in MBB to insert a copy from > + ? ?// SrcReg. ?This needs to be after any def or uses of SrcReg, but before > + ? ?// any subsequent point where control flow might jump out of the basic > + ? ?// block. > + ? ?MachineBasicBlock::iterator FindCopyInsertPoint(MachineBasicBlock &MBB, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?unsigned SrcReg); > + > + ? ?// SkipPHIsAndLabels - Copies need to be inserted after phi nodes and > + ? ?// also after any exception handling labels: in landing pads execution > + ? ?// starts at the label, so any copies placed before it won't be executed! > + ? ?MachineBasicBlock::iterator SkipPHIsAndLabels(MachineBasicBlock &MBB, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MachineBasicBlock::iterator I) { > + ? ? ?// Rather than assuming that EH labels come before other kinds of labels, > + ? ? ?// just skip all labels. > + ? ? ?while (I != MBB.end() && > + ? ? ? ? ? ? (I->getOpcode() == TargetInstrInfo::PHI || I->isLabel())) > + ? ? ? ?++I; > + ? ? ?return I; > + ? ?} > > ? ? typedef std::pair BBVRegPair; > ? ? typedef std::map VRegPHIUse; > @@ -120,10 +138,7 @@ > > ? // Get an iterator to the first instruction after the last PHI node (this may > ? // also be the end of the basic block). > - ?MachineBasicBlock::iterator AfterPHIsIt = MBB.begin(); > - ?while (AfterPHIsIt != MBB.end() && > - ? ? ? ? AfterPHIsIt->getOpcode() == TargetInstrInfo::PHI) > - ? ?++AfterPHIsIt; ? ?// Skip over all of the PHI nodes... > + ?MachineBasicBlock::iterator AfterPHIsIt = SkipPHIsAndLabels(MBB, MBB.begin()); > > ? while (MBB.front().getOpcode() == TargetInstrInfo::PHI) > ? ? LowerAtomicPHINode(MBB, AfterPHIsIt); > @@ -144,37 +159,47 @@ > ? return true; > ?} > > -void PNE::WalkPassEHTryRange(MachineBasicBlock &MBB, > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? MachineBasicBlock::iterator &I, unsigned SrcReg) { > - ?if (I == MBB.begin()) > - ? ?return; > - ?MachineBasicBlock::iterator PI = prior(I); > - ?if (PI->getOpcode() != TargetInstrInfo::EH_LABEL) > - ? ?return; > - > - ?// Trying to walk pass the EH try range. If we run into a use instruction, > - ?// we want to insert the copy there. > - ?SmallPtrSet UsesInMBB; > - ?for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(SrcReg), > - ? ? ? ? UE = MRI->use_end(); UI != UE; ++UI) { > - ? ?MachineInstr *UseMI = &*UI; > - ? ?if (UseMI->getParent() == &MBB) > - ? ? ?UsesInMBB.insert(UseMI); > +// FindCopyInsertPoint - Find a safe place in MBB to insert a copy from SrcReg. > +// This needs to be after any def or uses of SrcReg, but before any subsequent > +// point where control flow might jump out of the basic block. > +MachineBasicBlock::iterator PNE::FindCopyInsertPoint(MachineBasicBlock &MBB, > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned SrcReg) { > + ?// Handle the trivial case trivially. > + ?if (MBB.empty()) > + ? ?return MBB.begin(); > + > + ?// If this basic block does not contain an invoke, then control flow always > + ?// reaches the end of it, so place the copy there. ?The logic below works in > + ?// this case too, but is more expensive. > + ?if (!isa(MBB.getBasicBlock()->getTerminator())) > + ? ?return MBB.getFirstTerminator(); > + > + ?// Discover any definition/uses in this basic block. > + ?SmallPtrSet DefUsesInMBB; > + ?for (MachineRegisterInfo::reg_iterator RI = MRI->reg_begin(SrcReg), > + ? ? ? RE = MRI->reg_end(); RI != RE; ++RI) { > + ? ?MachineInstr *DefUseMI = &*RI; > + ? ?if (DefUseMI->getParent() == &MBB) > + ? ? ?DefUsesInMBB.insert(DefUseMI); > ? } > > - ?while (PI != MBB.begin()) { > - ? ?--PI; > - ? ?if (PI->getOpcode() == TargetInstrInfo::EH_LABEL) { > - ? ? ?++NumEH; > - ? ? ?I = PI; > - ? ? ?return; > - ? ?} else if (UsesInMBB.count(&*PI)) { > - ? ? ?++NumEH; > - ? ? ?I = next(PI); > - ? ? ?return; > - ? ?} > + ?MachineBasicBlock::iterator InsertPoint; > + ?if (DefUsesInMBB.empty()) { > + ? ?// No def/uses. ?Insert the copy at the start of the basic block. > + ? ?InsertPoint = MBB.begin(); > + ?} else if (DefUsesInMBB.size() == 1) { > + ? ?// Insert the copy immediately after the definition/use. > + ? ?InsertPoint = *DefUsesInMBB.begin(); > + ? ?++InsertPoint; > + ?} else { > + ? ?// Insert the copy immediately after the last definition/use. > + ? ?InsertPoint = MBB.end(); > + ? ?while (!DefUsesInMBB.count(&*--InsertPoint)) {} > + ? ?++InsertPoint; > ? } > - ?return; > + > + ?// Make sure the copy goes after any phi nodes however. > + ?return SkipPHIsAndLabels(MBB, InsertPoint); > ?} > > ?/// LowerAtomicPHINode - Lower the PHI node at the top of the specified block, > @@ -273,10 +298,7 @@ > > ? ? // Find a safe location to insert the copy, this may be the first terminator > ? ? // in the block (or end()). > - ? ?MachineBasicBlock::iterator InsertPos = opBlock.getFirstTerminator(); > - > - ? ?// Walk pass EH try range if needed. > - ? ?WalkPassEHTryRange(opBlock, InsertPos, SrcReg); > + ? ?MachineBasicBlock::iterator InsertPos = FindCopyInsertPoint(opBlock, SrcReg); > > ? ? // Insert the copy. > ? ? TII->copyRegToReg(opBlock, InsertPos, IncomingReg, SrcReg, RC, RC); > > Modified: llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll?rev=67049&r1=67048&r2=67049&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll (original) > +++ llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll Mon Mar 16 14:58:38 2009 > @@ -1,37 +1,28 @@ > -; RUN: llvm-as < %s | llc -mtriple=i386-pc-linux-gnu -stats |& grep phielim | grep {Number of EH try blocks skipped} | grep 4 > +; RUN: llvm-as < %s | llc -march=x86 | grep -A 2 {call f} | grep movl > +; Check the register copy comes after the call to f and before the call to g > ?; PR3784 > > - ? ? ? %struct.c38002a__arr___XUB = type { i32, i32 } > - ? ? ? %struct.c38002a__arr_name = type { [0 x i32]*, %struct.c38002a__arr___XUB* } > - ? ? ? %struct.c38002a__rec = type { i32, %struct.c38002a__arr_name } > +declare i32 @f() > > -define void @_ada_c38002a() { > -entry: > - ? ? ? %0 = invoke i8* @__gnat_malloc(i32 12) > - ? ? ? ? ? ? ? ? ? ? ? to label %invcont unwind label %lpad ? ? ? ? ? ?; [#uses=0] > +declare i32 @g() > > -invcont: ? ? ? ? ? ? ? ; preds = %entry > - ? ? ? %1 = invoke i8* @__gnat_malloc(i32 20) > - ? ? ? ? ? ? ? ? ? ? ? to label %invcont1 unwind label %lpad ? ? ? ? ? ; [#uses=0] > - > -invcont1: ? ? ? ? ? ? ?; preds = %invcont > - ? ? ? %2 = invoke i32 @report__ident_int(i32 2) > - ? ? ? ? ? ? ? ? ? ? ? to label %.noexc unwind label %lpad ? ? ? ? ? ? ; [#uses=0] > - > -.noexc: ? ? ? ? ? ? ? ?; preds = %invcont1 > - ? ? ? %3 = invoke i32 @report__ident_int(i32 3) > - ? ? ? ? ? ? ? ? ? ? ? to label %.noexc88 unwind label %lpad ? ? ? ? ? ; [#uses=0] > - > -.noexc88: ? ? ? ? ? ? ?; preds = %.noexc > - ? ? ? unreachable > - > -lpad: ? ? ? ? ?; preds = %.noexc, %invcont1, %invcont, %entry > - ? ? ? %r.0 = phi %struct.c38002a__rec* [ null, %entry ], [ null, %invcont ], [ null, %invcont1 ], [ null, %.noexc ] ? ? ? ? ? ; <%struct.c38002a__rec*> [#uses=1] > - ? ? ? %4 = getelementptr %struct.c38002a__rec* %r.0, i32 0, i32 0 ? ? ? ? ? ? ; [#uses=1] > - ? ? ? %5 = load i32* %4, align 4 ? ? ? ? ? ? ?; [#uses=0] > - ? ? ? ret void > +define i32 @phi() { > +entry: > + ? ? ? %a = call i32 @f() ? ? ? ? ? ? ?; [#uses=1] > + ? ? ? %b = invoke i32 @g() > + ? ? ? ? ? ? ? ? ? ? ? to label %cont unwind label %lpad ? ? ? ? ? ? ? ; [#uses=1] > + > +cont: ? ? ? ? ?; preds = %entry > + ? ? ? %x = phi i32 [ %b, %entry ] ? ? ? ? ? ? ; [#uses=0] > + ? ? ? %aa = call i32 @g() ? ? ? ? ? ? ; [#uses=1] > + ? ? ? %bb = invoke i32 @g() > + ? ? ? ? ? ? ? ? ? ? ? to label %cont2 unwind label %lpad ? ? ? ? ? ? ?; [#uses=1] > + > +cont2: ? ? ? ? ; preds = %cont > + ? ? ? %xx = phi i32 [ %bb, %cont ] ? ? ? ? ? ?; [#uses=1] > + ? ? ? ret i32 %xx > + > +lpad: ? ? ? ? ?; preds = %cont, %entry > + ? ? ? %y = phi i32 [ %a, %entry ], [ %aa, %cont ] ? ? ? ? ? ? ; [#uses=1] > + ? ? ? ret i32 %y > ?} > - > -declare i32 @report__ident_int(i32) > - > -declare i8* @__gnat_malloc(i32) > > Added: llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll?rev=67049&view=auto > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll (added) > +++ llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Mon Mar 16 14:58:38 2009 > @@ -0,0 +1,21 @@ > +; RUN: llvm-as < %s | llc -march=x86 | grep -A 1 lpad | grep Llabel > +; Check that register copies in the landing pad come after the EH_LABEL > + > +declare i32 @f() > + > +define i32 @phi(i32 %x) { > +entry: > + ? ? ? %a = invoke i32 @f() > + ? ? ? ? ? ? ? ? ? ? ? to label %cont unwind label %lpad ? ? ? ? ? ? ? ; [#uses=1] > + > +cont: ? ? ? ? ?; preds = %entry > + ? ? ? %b = invoke i32 @f() > + ? ? ? ? ? ? ? ? ? ? ? to label %cont2 unwind label %lpad ? ? ? ? ? ? ?; [#uses=1] > + > +cont2: ? ? ? ? ; preds = %cont > + ? ? ? ret i32 %b > + > +lpad: ? ? ? ? ?; preds = %cont, %entry > + ? ? ? %v = phi i32 [ %x, %entry ], [ %a, %cont ] ? ? ? ? ? ? ?; [#uses=1] > + ? ? ? ret i32 %v > +} > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From isanbard at gmail.com Mon Mar 16 15:27:21 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 16 Mar 2009 20:27:21 -0000 Subject: [llvm-commits] [llvm] r67051 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Message-ID: <200903162027.n2GKRLTi023588@zion.cs.uiuc.edu> Author: void Date: Mon Mar 16 15:27:20 2009 New Revision: 67051 URL: http://llvm.org/viewvc/llvm-project?rev=67051&view=rev Log: --- Reverse-merging (from foreign repository) r67049 into '.': U test/CodeGen/X86/2009-03-13-PHIElimBug.ll D test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll U lib/CodeGen/PHIElimination.cpp r67049 was causing this failure: Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/dg.exp ... FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/2009-03-13-PHIElimBug.ll for PR3784 Failed with exit(1) at line 1 while running: llvm-as < /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/2009-03-13-PHIElimBug.ll | llc -march=x86 | /usr/bin/grep -A 2 {call f} | /usr/bin/grep movl child process exited abnormally Removed: llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PHIElimination.cpp?rev=67051&r1=67050&r2=67051&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PHIElimination.cpp (original) +++ llvm/trunk/lib/CodeGen/PHIElimination.cpp Mon Mar 16 15:27:20 2009 @@ -14,8 +14,6 @@ //===----------------------------------------------------------------------===// #define DEBUG_TYPE "phielim" -#include "llvm/BasicBlock.h" -#include "llvm/Instructions.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/MachineFunctionPass.h" @@ -33,6 +31,7 @@ using namespace llvm; STATISTIC(NumAtomic, "Number of atomic phis lowered"); +STATISTIC(NumEH, "Number of EH try blocks skipped"); namespace { class VISIBILITY_HIDDEN PNE : public MachineFunctionPass { @@ -67,25 +66,8 @@ /// void analyzePHINodes(const MachineFunction& Fn); - // FindCopyInsertPoint - Find a safe place in MBB to insert a copy from - // SrcReg. This needs to be after any def or uses of SrcReg, but before - // any subsequent point where control flow might jump out of the basic - // block. - MachineBasicBlock::iterator FindCopyInsertPoint(MachineBasicBlock &MBB, - unsigned SrcReg); - - // SkipPHIsAndLabels - Copies need to be inserted after phi nodes and - // also after any exception handling labels: in landing pads execution - // starts at the label, so any copies placed before it won't be executed! - MachineBasicBlock::iterator SkipPHIsAndLabels(MachineBasicBlock &MBB, - MachineBasicBlock::iterator I) { - // Rather than assuming that EH labels come before other kinds of labels, - // just skip all labels. - while (I != MBB.end() && - (I->getOpcode() == TargetInstrInfo::PHI || I->isLabel())) - ++I; - return I; - } + void WalkPassEHTryRange(MachineBasicBlock &MBB, + MachineBasicBlock::iterator &I, unsigned SrcReg); typedef std::pair BBVRegPair; typedef std::map VRegPHIUse; @@ -138,7 +120,10 @@ // Get an iterator to the first instruction after the last PHI node (this may // also be the end of the basic block). - MachineBasicBlock::iterator AfterPHIsIt = SkipPHIsAndLabels(MBB, MBB.begin()); + MachineBasicBlock::iterator AfterPHIsIt = MBB.begin(); + while (AfterPHIsIt != MBB.end() && + AfterPHIsIt->getOpcode() == TargetInstrInfo::PHI) + ++AfterPHIsIt; // Skip over all of the PHI nodes... while (MBB.front().getOpcode() == TargetInstrInfo::PHI) LowerAtomicPHINode(MBB, AfterPHIsIt); @@ -159,47 +144,37 @@ return true; } -// FindCopyInsertPoint - Find a safe place in MBB to insert a copy from SrcReg. -// This needs to be after any def or uses of SrcReg, but before any subsequent -// point where control flow might jump out of the basic block. -MachineBasicBlock::iterator PNE::FindCopyInsertPoint(MachineBasicBlock &MBB, - unsigned SrcReg) { - // Handle the trivial case trivially. - if (MBB.empty()) - return MBB.begin(); - - // If this basic block does not contain an invoke, then control flow always - // reaches the end of it, so place the copy there. The logic below works in - // this case too, but is more expensive. - if (!isa(MBB.getBasicBlock()->getTerminator())) - return MBB.getFirstTerminator(); - - // Discover any definition/uses in this basic block. - SmallPtrSet DefUsesInMBB; - for (MachineRegisterInfo::reg_iterator RI = MRI->reg_begin(SrcReg), - RE = MRI->reg_end(); RI != RE; ++RI) { - MachineInstr *DefUseMI = &*RI; - if (DefUseMI->getParent() == &MBB) - DefUsesInMBB.insert(DefUseMI); +void PNE::WalkPassEHTryRange(MachineBasicBlock &MBB, + MachineBasicBlock::iterator &I, unsigned SrcReg) { + if (I == MBB.begin()) + return; + MachineBasicBlock::iterator PI = prior(I); + if (PI->getOpcode() != TargetInstrInfo::EH_LABEL) + return; + + // Trying to walk pass the EH try range. If we run into a use instruction, + // we want to insert the copy there. + SmallPtrSet UsesInMBB; + for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(SrcReg), + UE = MRI->use_end(); UI != UE; ++UI) { + MachineInstr *UseMI = &*UI; + if (UseMI->getParent() == &MBB) + UsesInMBB.insert(UseMI); } - MachineBasicBlock::iterator InsertPoint; - if (DefUsesInMBB.empty()) { - // No def/uses. Insert the copy at the start of the basic block. - InsertPoint = MBB.begin(); - } else if (DefUsesInMBB.size() == 1) { - // Insert the copy immediately after the definition/use. - InsertPoint = *DefUsesInMBB.begin(); - ++InsertPoint; - } else { - // Insert the copy immediately after the last definition/use. - InsertPoint = MBB.end(); - while (!DefUsesInMBB.count(&*--InsertPoint)) {} - ++InsertPoint; + while (PI != MBB.begin()) { + --PI; + if (PI->getOpcode() == TargetInstrInfo::EH_LABEL) { + ++NumEH; + I = PI; + return; + } else if (UsesInMBB.count(&*PI)) { + ++NumEH; + I = next(PI); + return; + } } - - // Make sure the copy goes after any phi nodes however. - return SkipPHIsAndLabels(MBB, InsertPoint); + return; } /// LowerAtomicPHINode - Lower the PHI node at the top of the specified block, @@ -298,7 +273,10 @@ // Find a safe location to insert the copy, this may be the first terminator // in the block (or end()). - MachineBasicBlock::iterator InsertPos = FindCopyInsertPoint(opBlock, SrcReg); + MachineBasicBlock::iterator InsertPos = opBlock.getFirstTerminator(); + + // Walk pass EH try range if needed. + WalkPassEHTryRange(opBlock, InsertPos, SrcReg); // Insert the copy. TII->copyRegToReg(opBlock, InsertPos, IncomingReg, SrcReg, RC, RC); Modified: llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll?rev=67051&r1=67050&r2=67051&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll (original) +++ llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll Mon Mar 16 15:27:20 2009 @@ -1,28 +1,37 @@ -; RUN: llvm-as < %s | llc -march=x86 | grep -A 2 {call f} | grep movl -; Check the register copy comes after the call to f and before the call to g +; RUN: llvm-as < %s | llc -mtriple=i386-pc-linux-gnu -stats |& grep phielim | grep {Number of EH try blocks skipped} | grep 4 ; PR3784 -declare i32 @f() + %struct.c38002a__arr___XUB = type { i32, i32 } + %struct.c38002a__arr_name = type { [0 x i32]*, %struct.c38002a__arr___XUB* } + %struct.c38002a__rec = type { i32, %struct.c38002a__arr_name } -declare i32 @g() - -define i32 @phi() { +define void @_ada_c38002a() { entry: - %a = call i32 @f() ; [#uses=1] - %b = invoke i32 @g() - to label %cont unwind label %lpad ; [#uses=1] - -cont: ; preds = %entry - %x = phi i32 [ %b, %entry ] ; [#uses=0] - %aa = call i32 @g() ; [#uses=1] - %bb = invoke i32 @g() - to label %cont2 unwind label %lpad ; [#uses=1] - -cont2: ; preds = %cont - %xx = phi i32 [ %bb, %cont ] ; [#uses=1] - ret i32 %xx - -lpad: ; preds = %cont, %entry - %y = phi i32 [ %a, %entry ], [ %aa, %cont ] ; [#uses=1] - ret i32 %y + %0 = invoke i8* @__gnat_malloc(i32 12) + to label %invcont unwind label %lpad ; [#uses=0] + +invcont: ; preds = %entry + %1 = invoke i8* @__gnat_malloc(i32 20) + to label %invcont1 unwind label %lpad ; [#uses=0] + +invcont1: ; preds = %invcont + %2 = invoke i32 @report__ident_int(i32 2) + to label %.noexc unwind label %lpad ; [#uses=0] + +.noexc: ; preds = %invcont1 + %3 = invoke i32 @report__ident_int(i32 3) + to label %.noexc88 unwind label %lpad ; [#uses=0] + +.noexc88: ; preds = %.noexc + unreachable + +lpad: ; preds = %.noexc, %invcont1, %invcont, %entry + %r.0 = phi %struct.c38002a__rec* [ null, %entry ], [ null, %invcont ], [ null, %invcont1 ], [ null, %.noexc ] ; <%struct.c38002a__rec*> [#uses=1] + %4 = getelementptr %struct.c38002a__rec* %r.0, i32 0, i32 0 ; [#uses=1] + %5 = load i32* %4, align 4 ; [#uses=0] + ret void } + +declare i32 @report__ident_int(i32) + +declare i8* @__gnat_malloc(i32) Removed: llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll?rev=67050&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll (original) +++ llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll (removed) @@ -1,21 +0,0 @@ -; RUN: llvm-as < %s | llc -march=x86 | grep -A 1 lpad | grep Llabel -; Check that register copies in the landing pad come after the EH_LABEL - -declare i32 @f() - -define i32 @phi(i32 %x) { -entry: - %a = invoke i32 @f() - to label %cont unwind label %lpad ; [#uses=1] - -cont: ; preds = %entry - %b = invoke i32 @f() - to label %cont2 unwind label %lpad ; [#uses=1] - -cont2: ; preds = %cont - ret i32 %b - -lpad: ; preds = %cont, %entry - %v = phi i32 [ %x, %entry ], [ %a, %cont ] ; [#uses=1] - ret i32 %v -} From dgregor at apple.com Mon Mar 16 16:35:18 2009 From: dgregor at apple.com (Douglas Gregor) Date: Mon, 16 Mar 2009 21:35:18 -0000 Subject: [llvm-commits] [llvm] r67052 - /llvm/trunk/cmake/modules/TableGen.cmake Message-ID: <200903162135.n2GLZIC7025906@zion.cs.uiuc.edu> Author: dgregor Date: Mon Mar 16 16:35:18 2009 New Revision: 67052 URL: http://llvm.org/viewvc/llvm-project?rev=67052&view=rev Log: CMake: Make sure to build TableGen'd files in the binary directory Modified: llvm/trunk/cmake/modules/TableGen.cmake Modified: llvm/trunk/cmake/modules/TableGen.cmake URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/TableGen.cmake?rev=67052&r1=67051&r2=67052&view=diff ============================================================================== --- llvm/trunk/cmake/modules/TableGen.cmake (original) +++ llvm/trunk/cmake/modules/TableGen.cmake Mon Mar 16 16:35:18 2009 @@ -4,15 +4,18 @@ macro(tablegen ofn) file(GLOB all_tds "*.td") + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp COMMAND ${LLVM_TABLEGEN} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${LLVM_MAIN_SRC_DIR}/lib/Target -I ${LLVM_MAIN_INCLUDE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS} -o ${ofn}.tmp + ${CMAKE_CURRENT_SOURCE_DIR}/${LLVM_TARGET_DEFINITIONS} + -o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp DEPENDS ${LLVM_TABLEGEN} ${all_tds} COMMENT "Building ${ofn}.tmp..." ) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ofn}.tmp ${ofn} + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp ${CMAKE_CURRENT_BINARY_DIR}/${ofn} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp COMMENT "Building ${ofn}..." ) From daniel at zuster.org Mon Mar 16 17:00:17 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 16 Mar 2009 22:00:17 -0000 Subject: [llvm-commits] [llvm] r67053 - in /llvm/trunk: include/llvm/Support/raw_ostream.h lib/Support/raw_ostream.cpp Message-ID: <200903162200.n2GM0HKJ026916@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Mar 16 17:00:17 2009 New Revision: 67053 URL: http://llvm.org/viewvc/llvm-project?rev=67053&view=rev Log: Add slow path for single character write, and use exclusively for single characters writes outside of the fast path in raw_ostream.h Modified: llvm/trunk/include/llvm/Support/raw_ostream.h llvm/trunk/lib/Support/raw_ostream.cpp Modified: llvm/trunk/include/llvm/Support/raw_ostream.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=67053&r1=67052&r2=67053&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/raw_ostream.h (original) +++ llvm/trunk/include/llvm/Support/raw_ostream.h Mon Mar 16 17:00:17 2009 @@ -82,7 +82,7 @@ raw_ostream &operator<<(char C) { if (OutBufCur >= OutBufEnd) - flush_impl(); + return write(C); *OutBufCur++ = C; if (Unbuffered) flush_impl(); @@ -91,7 +91,7 @@ raw_ostream &operator<<(unsigned char C) { if (OutBufCur >= OutBufEnd) - flush_impl(); + return write(C); *OutBufCur++ = C; if (Unbuffered) flush_impl(); @@ -100,7 +100,7 @@ raw_ostream &operator<<(signed char C) { if (OutBufCur >= OutBufEnd) - flush_impl(); + return write(C); *OutBufCur++ = C; if (Unbuffered) flush_impl(); @@ -132,6 +132,7 @@ return this->operator<<(ftostr(N)); } + raw_ostream &write(unsigned char C); raw_ostream &write(const char *Ptr, unsigned Size); // Formatted output, see the format() function in Support/Format.h. Modified: llvm/trunk/lib/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=67053&r1=67052&r2=67053&view=diff ============================================================================== --- llvm/trunk/lib/Support/raw_ostream.cpp (original) +++ llvm/trunk/lib/Support/raw_ostream.cpp Mon Mar 16 17:00:17 2009 @@ -63,10 +63,7 @@ raw_ostream &raw_ostream::operator<<(long N) { if (N < 0) { - if (OutBufCur >= OutBufEnd) - flush_impl(); - *OutBufCur++ = '-'; - + *this << '-'; N = -N; } @@ -91,10 +88,7 @@ raw_ostream &raw_ostream::operator<<(long long N) { if (N < 0) { - if (OutBufCur >= OutBufEnd) - flush_impl(); - *OutBufCur++ = '-'; - + *this << '-'; N = -N; } @@ -106,6 +100,12 @@ return *this << format("%p", P); } +raw_ostream &raw_ostream::write(unsigned char C) { + if (OutBufCur >= OutBufEnd) + flush_impl(); + + *OutBufCur++ = C; +} raw_ostream &raw_ostream::write(const char *Ptr, unsigned Size) { if (OutBufCur+Size > OutBufEnd) From daniel at zuster.org Mon Mar 16 17:08:44 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 16 Mar 2009 22:08:44 -0000 Subject: [llvm-commits] [llvm] r67054 - /llvm/trunk/lib/Support/raw_ostream.cpp Message-ID: <200903162208.n2GM8iRP027219@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Mar 16 17:08:44 2009 New Revision: 67054 URL: http://llvm.org/viewvc/llvm-project?rev=67054&view=rev Log: Make raw_ostream::operator<<(const void *) fast; it doesn't matter but it is easy. Modified: llvm/trunk/lib/Support/raw_ostream.cpp Modified: llvm/trunk/lib/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=67054&r1=67053&r2=67054&view=diff ============================================================================== --- llvm/trunk/lib/Support/raw_ostream.cpp (original) +++ llvm/trunk/lib/Support/raw_ostream.cpp Mon Mar 16 17:08:44 2009 @@ -96,8 +96,24 @@ } raw_ostream &raw_ostream::operator<<(const void *P) { - // FIXME: This could be much faster if it matters. - return *this << format("%p", P); + uintptr_t N = (uintptr_t) P; + *this << '0' << 'x'; + + // Zero is a special case. + if (N == 0) + return *this << '0'; + + char NumberBuffer[20]; + char *EndPtr = NumberBuffer+sizeof(NumberBuffer); + char *CurPtr = EndPtr; + + while (N) { + unsigned x = N % 16; + *--CurPtr = (x < 10 ? '0' + x : 'a' + x - 10); + N /= 16; + } + + return write(CurPtr, EndPtr-CurPtr); } raw_ostream &raw_ostream::write(unsigned char C) { @@ -105,6 +121,7 @@ flush_impl(); *OutBufCur++ = C; + return *this; } raw_ostream &raw_ostream::write(const char *Ptr, unsigned Size) { From gohman at apple.com Mon Mar 16 17:22:33 2009 From: gohman at apple.com (Dan Gohman) Date: Mon, 16 Mar 2009 15:22:33 -0700 Subject: [llvm-commits] embedded metadata preview In-Reply-To: <49BB6E93.9050802@mxc.ca> References: <49BB6E93.9050802@mxc.ca> Message-ID: Hi Nick, Here are a few review comments. > Index: lib/Bitcode/Writer/BitcodeWriter.cpp > =================================================================== > --- lib/Bitcode/Writer/BitcodeWriter.cpp (revision 66999) > +++ lib/Bitcode/Writer/BitcodeWriter.cpp (working copy) > @@ -677,6 +677,17 @@ > Record.push_back(CE->getPredicate()); > break; > } > + } else if (const MDString *S = dyn_cast(C)) { > + Code = bitc::CST_CODE_MDSTRING; > + Record.push_back(S->length()); > + for (unsigned i = 0, e = S->length(); i != e; ++i) > + Record.push_back(S->begin()[i]); It seems pretty inefficient to put each char in a uint64_t. Forgive me for prematurely optimizing :-). > Index: lib/Bitcode/Reader/BitcodeReader.cpp > =================================================================== > --- lib/Bitcode/Reader/BitcodeReader.cpp (revision 66999) > +++ lib/Bitcode/Reader/BitcodeReader.cpp (working copy) > @@ -283,10 +283,12 @@ > UserCS->getType()->isPacked()); > } else if (isa(UserC)) { > NewC = ConstantVector::get(&NewOps[0], NewOps.size()); > - } else { > - // Must be a constant expression. > + } else if (isa(UserC)) { > NewC = cast(UserC)- >getWithOperands(&NewOps[0], > NewOps.size()); > + } else { > + // Must be a metadata node. > + NewC = MDNode::get(&NewOps[0], NewOps.size()); > } > Can you add an assert(isa) here to verify the assertion in the comment? > Index: docs/LangRef.html > =================================================================== > --- docs/LangRef.html (revision 66999) > +++ docs/LangRef.html (working copy) > @@ -1847,6 +1848,14 @@ > large arrays) and is always exactly equivalent to using explicit zero > initializers. > > + > +
    Metadata node
    > + > +
    A metadata node is a structure-like constant with the type of an empty > + struct. For example: "{ } !{ i32 0, { } !"test" }". Unlike other > + constants that are meant to be interpreted as part of the instruction stream, > + metadata is a place to attach additional information such as debug info. It would be helpful to mention that this is also expected to be used for encoding information that will be used by optimizations. MDString and MDNode have protected constructors. Do you anticipate these classes having subclasses? If so, what would they be like? Why do MDString and MDNode inherit from Constant instead of, say, User? I see that ConstantLastVal is moved to include MDStringVal and MDNodeVal, presumably for the same reason. Dan On Mar 14, 2009, at 1:45 AM, Nick Lewycky wrote: > I took a stab at implementing embedded metadata. The idea is to > allow LLVM's user to attach meaningful data to the instruction > stream that isn't really relevant to the execution of the > instructions. This comes from Chris' notes: > > http://nondot.org/sabre/LLVMNotes/EmbeddedMetadata.txt > > which I deviated a little. The major thing missing from this patch > is any verifier support. My current plan is to add support to the > verifier for ensuring that MDNode and MDString are only used from a) > initializers to globals named starting with "llvm." b) calls to > intrinsic functions, then commit it. > > The attached patch implements MDString and MDNode as new types of > Constant, .ll/.bc reader/writer support and a LangRef update. I'd > appreciate any review comments! > > Nick > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From isanbard at gmail.com Mon Mar 16 17:45:55 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 16 Mar 2009 22:45:55 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67055 - in /llvm-gcc-4.2/branches/Apple/Dib/gcc: llvm-convert.cpp llvm-debug.cpp llvm-debug.h Message-ID: <200903162245.n2GMjtEr028771@zion.cs.uiuc.edu> Author: void Date: Mon Mar 16 17:45:54 2009 New Revision: 67055 URL: http://llvm.org/viewvc/llvm-project?rev=67055&view=rev Log: --- Reverse-merging (from foreign repository) r66919 into '.': U gcc/llvm-convert.cpp U gcc/llvm-debug.cpp U gcc/llvm-debug.h Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-convert.cpp llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.cpp llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.h Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-convert.cpp?rev=67055&r1=67054&r2=67055&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-convert.cpp Mon Mar 16 17:45:54 2009 @@ -898,9 +898,6 @@ } Function *TreeToLLVM::EmitFunction() { - if (TheDebugInfo) - TheDebugInfo->ClearVarCache(); - // Set up parameters and prepare for return, for the function. StartFunctionBody(); @@ -908,41 +905,12 @@ basic_block bb; edge e; edge_iterator ei; - tree stmt_block = NULL_TREE; FOR_EACH_BB (bb) { for (block_stmt_iterator bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) { MemRef DestLoc; tree stmt = bsi_stmt (bsi); - // FIXME : Optimizer and code generator are not doing the right thing yet - // while dealing with variable's debug info locations. - tree new_stmt_block = TREE_BLOCK (stmt); - if (TheDebugInfo && new_stmt_block && !optimize) { - if (stmt_block == NULL_TREE) - // This is beginning of function. llvm.dbg.func.start is emitted so - // no need to emit llvm.dbg.region.start here. - stmt_block = new_stmt_block; - else { - if (stmt_block != new_stmt_block) { - if (BLOCK_SUPERCONTEXT (new_stmt_block) == stmt_block) - // Entering new scope. Emit llvm.dbg.func.start. - TheDebugInfo->EmitRegionStart(Builder.GetInsertBlock()); - else if (BLOCK_SUPERCONTEXT (new_stmt_block) == - BLOCK_SUPERCONTEXT (stmt_block)) { - // Entering new scope at the same level. End previous current - // region by emitting llvm.dbg.region.end. And emit - // llvm.dbg.region.start to start new region. - TheDebugInfo->EmitRegionEnd(Builder.GetInsertBlock()); - TheDebugInfo->EmitRegionStart(Builder.GetInsertBlock()); - } else - // Leaving current scop.e Emit llvm.dbg.region.end. - TheDebugInfo->EmitRegionEnd(Builder.GetInsertBlock()); - - stmt_block = new_stmt_block; - } - } - } - + // If this stmt returns an aggregate value (e.g. a call whose result is // ignored), create a temporary to receive the value. Note that we don't // do this for MODIFY_EXPRs as an efficiency hack. @@ -1779,6 +1747,17 @@ Builder.CreateStore(Constant::getNullValue(T), AI); } + if (TheDebugInfo) { + if (DECL_NAME(decl)) { + TheDebugInfo->EmitDeclare(decl, dwarf::DW_TAG_auto_variable, + Name, TREE_TYPE(decl), AI, + Builder.GetInsertBlock()); + } else if (TREE_CODE(decl) == RESULT_DECL) { + TheDebugInfo->EmitDeclare(decl, dwarf::DW_TAG_return_variable, + Name, TREE_TYPE(decl), AI, + Builder.GetInsertBlock()); + } + } } //===----------------------------------------------------------------------===// @@ -5892,7 +5871,6 @@ //===----------------------------------------------------------------------===// LValue TreeToLLVM::EmitLV_DECL(tree exp) { - if (TREE_CODE(exp) == PARM_DECL || TREE_CODE(exp) == VAR_DECL || TREE_CODE(exp) == CONST_DECL) { // If a static var's type was incomplete when the decl was written, @@ -5970,14 +5948,6 @@ Alignment = DECL_ALIGN(exp) / 8; } - if (TheDebugInfo) { - if (DECL_NAME(exp)) - TheDebugInfo->EmitDeclare(exp, dwarf::DW_TAG_auto_variable, - IDENTIFIER_POINTER (DECL_NAME (exp)), - TREE_TYPE(exp), Decl, - Builder.GetInsertBlock()); - } - return LValue(BitCastToType(Decl, PTy), Alignment); } Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.cpp?rev=67055&r1=67054&r2=67055&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.cpp (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.cpp Mon Mar 16 17:45:54 2009 @@ -293,11 +293,6 @@ assert(!RegionStack.empty() && "Region stack mismatch, stack empty!"); - // Check to see if the compile unit already has created this type. - llvm::DIVariable &Slot = VarCache[decl]; - if (!Slot.isNull()) - return; - expanded_location Loc = GetNodeLocation(decl, false); // Construct variable. @@ -306,8 +301,6 @@ getOrCreateCompileUnit(Loc.file), Loc.line, getOrCreateType(type)); - VarCache[decl] = D; - // Insert an llvm.dbg.declare into the current block. DebugFactory.InsertDeclare(AI, D, CurBB); } @@ -848,11 +841,6 @@ getOrCreateCompileUnit(main_input_filename, true); } -/// ClearDeclCache - Clear variable debug info cache. -void DebugInfo::ClearVarCache() { - VarCache.clear(); -} - /// getOrCreateCompileUnit - Get the compile unit from the cache or /// create a new one if necessary. DICompileUnit DebugInfo::getOrCreateCompileUnit(const char *FullPath, Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.h?rev=67055&r1=67054&r2=67055&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.h (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/llvm-debug.h Mon Mar 16 17:45:54 2009 @@ -63,9 +63,6 @@ std::map TypeCache; // Cache of previously constructed // Types. - std::map VarCache; - // Cache of previously constructed - // vars in this function. std::vector RegionStack; // Stack to track declarative scopes. @@ -78,9 +75,6 @@ /// initialization is done. void Initialize(); - /// ClearDeclCache - Clear variable debug info cache. - void ClearVarCache(); - // Accessors. void setLocationFile(const char *FullPath) { CurFullPath = FullPath; } void setLocationLine(int LineNo) { CurLineNo = LineNo; } From dgregor at apple.com Mon Mar 16 17:53:26 2009 From: dgregor at apple.com (Douglas Gregor) Date: Mon, 16 Mar 2009 22:53:26 -0000 Subject: [llvm-commits] [llvm] r67056 - in /llvm/trunk: cmake/modules/AddPartiallyLinkedObject.cmake cmake/modules/LLVMConfig.cmake tools/llvm-config/CMakeLists.txt Message-ID: <200903162253.n2GMrQ8J029072@zion.cs.uiuc.edu> Author: dgregor Date: Mon Mar 16 17:53:26 2009 New Revision: 67056 URL: http://llvm.org/viewvc/llvm-project?rev=67056&view=rev Log: CMake: Build system fixes for XCode. llvm-config still causes us some serious trouble, but it's less serious than it used to be Modified: llvm/trunk/cmake/modules/AddPartiallyLinkedObject.cmake llvm/trunk/cmake/modules/LLVMConfig.cmake llvm/trunk/tools/llvm-config/CMakeLists.txt Modified: llvm/trunk/cmake/modules/AddPartiallyLinkedObject.cmake URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddPartiallyLinkedObject.cmake?rev=67056&r1=67055&r2=67056&view=diff ============================================================================== --- llvm/trunk/cmake/modules/AddPartiallyLinkedObject.cmake (original) +++ llvm/trunk/cmake/modules/AddPartiallyLinkedObject.cmake Mon Mar 16 17:53:26 2009 @@ -13,7 +13,7 @@ if( MSVC ) add_llvm_library( ${lib} ${ARGN}) else( MSVC ) - set(pll ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${lib}.o) + set(pll ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${lib}.o) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/temp_lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/temp_lib) llvm_process_sources( ALL_FILES ${ARGN} ) @@ -27,7 +27,7 @@ add_custom_command(OUTPUT ${pll} COMMENT "Building ${lib}.o..." DEPENDS ${lib} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/temp_lib + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/temp_lib/${CMAKE_CFG_INTDIR} COMMAND ar x ${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX} COMMAND ${CMAKE_LINKER} "${LLVM_PLO_FLAGS}" -r "*${CMAKE_CXX_OUTPUT_EXTENSION}" -o ${pll} COMMAND ${CMAKE_COMMAND} -E remove -f *${CMAKE_CXX_OUTPUT_EXTENSION} Modified: llvm/trunk/cmake/modules/LLVMConfig.cmake URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/LLVMConfig.cmake?rev=67056&r1=67055&r2=67056&view=diff ============================================================================== --- llvm/trunk/cmake/modules/LLVMConfig.cmake (original) +++ llvm/trunk/cmake/modules/LLVMConfig.cmake Mon Mar 16 17:53:26 2009 @@ -131,7 +131,7 @@ if(c MATCHES ".*\\.o") get_filename_component(fn ${c} NAME) target_link_libraries(${executable} - ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${fn}) + ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${fn}) else(c MATCHES ".*\\.o") string(REPLACE "-l" "" fn ${c}) target_link_libraries(${executable} ${fn}) Modified: llvm/trunk/tools/llvm-config/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/CMakeLists.txt?rev=67056&r1=67055&r2=67056&view=diff ============================================================================== --- llvm/trunk/tools/llvm-config/CMakeLists.txt (original) +++ llvm/trunk/tools/llvm-config/CMakeLists.txt Mon Mar 16 17:53:26 2009 @@ -68,7 +68,7 @@ endif() add_custom_command(OUTPUT ${LIBDEPS_TMP} - COMMAND ${PERL_EXECUTABLE} ${LLVM_MAIN_SRC_DIR}/utils/GenLibDeps.pl -flat ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} ${NM_PATH} > ${LIBDEPS_TMP} + COMMAND ${PERL_EXECUTABLE} ${LLVM_MAIN_SRC_DIR}/utils/GenLibDeps.pl -flat ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR} ${NM_PATH} > ${LIBDEPS_TMP} DEPENDS ${llvm_libs} COMMENT "Regenerating ${LIBDEPS_TMP}") From daniel at zuster.org Mon Mar 16 17:55:06 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 16 Mar 2009 22:55:06 -0000 Subject: [llvm-commits] [llvm] r67057 - in /llvm/trunk: include/llvm/Support/raw_ostream.h lib/Support/raw_ostream.cpp Message-ID: <200903162255.n2GMt7B4029182@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Mar 16 17:55:06 2009 New Revision: 67057 URL: http://llvm.org/viewvc/llvm-project?rev=67057&view=rev Log: raw_ostream: Lift out flush_nonempty. - Flush a known non-empty buffers; enforces the interface to flush_impl and kills off HandleFlush (which I saw no reason to be an inline method, Chris?). - Clarify invariant that flush_impl is only called with OutBufCur > OutBufStart. - This also cleary collects all places where we have to deal with the buffer possibly not existing. - A few more comments and fixing the unbuffered behavior remain in this commit sequence. Modified: llvm/trunk/include/llvm/Support/raw_ostream.h llvm/trunk/lib/Support/raw_ostream.cpp Modified: llvm/trunk/include/llvm/Support/raw_ostream.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=67057&r1=67056&r2=67057&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/raw_ostream.h (original) +++ llvm/trunk/include/llvm/Support/raw_ostream.h Mon Mar 16 17:55:06 2009 @@ -31,6 +31,10 @@ /// a chunk at a time. class raw_ostream { protected: + /// \invariant { The buffer is uninitialized (OutBufStart, + /// OutBufEnd, and OutBufCur are non-zero), or none of them are zero + /// and there are at least 64 total bytes in the buffer. } + char *OutBufStart, *OutBufEnd, *OutBufCur; bool Unbuffered; @@ -77,7 +81,7 @@ void flush() { if (OutBufCur != OutBufStart) - flush_impl(); + flush_nonempty(); } raw_ostream &operator<<(char C) { @@ -85,7 +89,7 @@ return write(C); *OutBufCur++ = C; if (Unbuffered) - flush_impl(); + flush_nonempty(); return *this; } @@ -94,7 +98,7 @@ return write(C); *OutBufCur++ = C; if (Unbuffered) - flush_impl(); + flush_nonempty(); return *this; } @@ -103,7 +107,7 @@ return write(C); *OutBufCur++ = C; if (Unbuffered) - flush_impl(); + flush_nonempty(); return *this; } @@ -142,23 +146,25 @@ // Subclass Interface //===--------------------------------------------------------------------===// -protected: - +private: /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This outputs the currently buffered data and resets the - /// buffer to empty. + /// subclasses. This only outputs the currently buffered data. + /// + /// raw_ostream guarantees to only call this routine when there is + /// buffered data, i.e. OutBufStart != OutBufCur. virtual void flush_impl() = 0; - /// HandleFlush - A stream's implementation of flush should call this after - /// emitting the bytes to the data sink. - void HandleFlush() { - if (OutBufStart == 0) - SetBufferSize(4096); - OutBufCur = OutBufStart; - } -private: // An out of line virtual method to provide a home for the class vtable. virtual void handle(); + + //===--------------------------------------------------------------------===// + // Private Interface + //===--------------------------------------------------------------------===// +private: + /// flush_nonempty - Flush the current buffer, which is known to be + /// non-empty. This outputs the currently buffered data and resets + /// the buffer to empty. + void flush_nonempty(); }; //===----------------------------------------------------------------------===// @@ -192,8 +198,10 @@ ~raw_fd_ostream(); /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This outputs the currently buffered data and resets the - /// buffer to empty. + /// subclasses. This only outputs the currently buffered data. + /// + /// raw_ostream guarantees to only call this routine when there is + /// buffered data, i.e. OutBufStart != OutBufCur. virtual void flush_impl(); /// close - Manually flush the stream and close the file. @@ -249,8 +257,10 @@ ~raw_os_ostream(); /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This outputs the currently buffered data and resets the - /// buffer to empty. + /// subclasses. This only outputs the currently buffered data. + /// + /// raw_ostream guarantees to only call this routine when there is + /// buffered data, i.e. OutBufStart != OutBufCur. virtual void flush_impl(); }; @@ -270,8 +280,10 @@ } /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This outputs the currently buffered data and resets the - /// buffer to empty. + /// subclasses. This only outputs the currently buffered data. + /// + /// raw_ostream guarantees to only call this routine when there is + /// buffered data, i.e. OutBufStart != OutBufCur. virtual void flush_impl(); }; @@ -284,8 +296,10 @@ ~raw_svector_ostream(); /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This outputs the currently buffered data and resets the - /// buffer to empty. + /// subclasses. This only outputs the currently buffered data. + /// + /// raw_ostream guarantees to only call this routine when there is + /// buffered data, i.e. OutBufStart != OutBufCur. virtual void flush_impl(); }; Modified: llvm/trunk/lib/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=67057&r1=67056&r2=67057&view=diff ============================================================================== --- llvm/trunk/lib/Support/raw_ostream.cpp (original) +++ llvm/trunk/lib/Support/raw_ostream.cpp Mon Mar 16 17:55:06 2009 @@ -116,17 +116,27 @@ return write(CurPtr, EndPtr-CurPtr); } +void raw_ostream::flush_nonempty() { + assert(OutBufCur > OutBufStart && "Invalid call to flush_nonempty."); + flush_impl(); + OutBufCur = OutBufStart; +} + raw_ostream &raw_ostream::write(unsigned char C) { - if (OutBufCur >= OutBufEnd) - flush_impl(); + if (!OutBufStart) + SetBufferSize(4096); + else if (OutBufCur >= OutBufEnd) + flush_nonempty(); *OutBufCur++ = C; return *this; } raw_ostream &raw_ostream::write(const char *Ptr, unsigned Size) { - if (OutBufCur+Size > OutBufEnd) - flush_impl(); + if (!OutBufStart) + SetBufferSize(4096); + else if (OutBufCur+Size > OutBufEnd) + flush_nonempty(); // Handle short strings specially, memcpy isn't very good at very short // strings. @@ -153,14 +163,14 @@ Ptr += NumToEmit; Size -= NumToEmit; OutBufCur = OutBufStart + NumToEmit; - flush_impl(); + flush_nonempty(); } break; } OutBufCur += Size; if (Unbuffered) - flush_impl(); + flush(); return *this; } @@ -260,11 +270,8 @@ void raw_fd_ostream::flush_impl() { assert (FD >= 0 && "File already closed."); - if (OutBufCur-OutBufStart) { - pos += (OutBufCur - OutBufStart); - ::write(FD, OutBufStart, OutBufCur-OutBufStart); - } - HandleFlush(); + pos += (OutBufCur - OutBufStart); + ::write(FD, OutBufStart, OutBufCur-OutBufStart); } void raw_fd_ostream::close() { @@ -319,9 +326,7 @@ /// subclasses. This outputs the currently buffered data and resets the /// buffer to empty. void raw_os_ostream::flush_impl() { - if (OutBufCur-OutBufStart) - OS.write(OutBufStart, OutBufCur-OutBufStart); - HandleFlush(); + OS.write(OutBufStart, OutBufCur-OutBufStart); } //===----------------------------------------------------------------------===// @@ -336,9 +341,7 @@ /// subclasses. This outputs the currently buffered data and resets the /// buffer to empty. void raw_string_ostream::flush_impl() { - if (OutBufCur-OutBufStart) - OS.append(OutBufStart, OutBufCur-OutBufStart); - HandleFlush(); + OS.append(OutBufStart, OutBufCur-OutBufStart); } //===----------------------------------------------------------------------===// @@ -353,8 +356,6 @@ /// subclasses. This outputs the currently buffered data and resets the /// buffer to empty. void raw_svector_ostream::flush_impl() { - if (OutBufCur-OutBufStart) - OS.append(OutBufStart, OutBufCur); - HandleFlush(); + OS.append(OutBufStart, OutBufCur); } From daniel at zuster.org Mon Mar 16 18:29:32 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 16 Mar 2009 23:29:32 -0000 Subject: [llvm-commits] [llvm] r67060 - in /llvm/trunk: include/llvm/Support/raw_ostream.h lib/Support/raw_ostream.cpp Message-ID: <200903162329.n2GNTWl3030433@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Mar 16 18:29:31 2009 New Revision: 67060 URL: http://llvm.org/viewvc/llvm-project?rev=67060&view=rev Log: raw_ostream: Replace flush_impl with write_impl, which takes data to write as arguments. - Add raw_ostream::GetNumBytesInBuffer. - Privatize buffer pointers. - Get rid of slow and unnecessary code for writing out large strings. Modified: llvm/trunk/include/llvm/Support/raw_ostream.h llvm/trunk/lib/Support/raw_ostream.cpp Modified: llvm/trunk/include/llvm/Support/raw_ostream.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=67060&r1=67059&r2=67060&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/raw_ostream.h (original) +++ llvm/trunk/include/llvm/Support/raw_ostream.h Mon Mar 16 18:29:31 2009 @@ -30,7 +30,7 @@ /// rewinding, line buffered disciplines etc. It is a simple buffer that outputs /// a chunk at a time. class raw_ostream { -protected: +private: /// \invariant { The buffer is uninitialized (OutBufStart, /// OutBufEnd, and OutBufCur are non-zero), or none of them are zero /// and there are at least 64 total bytes in the buffer. } @@ -75,6 +75,10 @@ flush(); } + unsigned GetNumBytesInBuffer() const { + return OutBufCur - OutBufStart; + } + //===--------------------------------------------------------------------===// // Data Output Interface //===--------------------------------------------------------------------===// @@ -147,12 +151,12 @@ //===--------------------------------------------------------------------===// private: - /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This only outputs the currently buffered data. - /// - /// raw_ostream guarantees to only call this routine when there is - /// buffered data, i.e. OutBufStart != OutBufCur. - virtual void flush_impl() = 0; + /// write_impl - The is the piece of the class that is implemented + /// by subclasses. This writes the \args Size bytes starting at + /// \arg Ptr to the underlying stream. + /// + /// \invariant { Size > 0 } + virtual void write_impl(const char *Ptr, unsigned Size) = 0; // An out of line virtual method to provide a home for the class vtable. virtual void handle(); @@ -177,6 +181,9 @@ int FD; bool ShouldClose; uint64_t pos; + + /// write_impl - See raw_ostream::write_impl. + virtual void write_impl(const char *Ptr, unsigned Size); public: /// raw_fd_ostream - Open the specified file for writing. If an /// error occurs, information about the error is put into ErrorInfo, @@ -197,20 +204,11 @@ ~raw_fd_ostream(); - /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This only outputs the currently buffered data. - /// - /// raw_ostream guarantees to only call this routine when there is - /// buffered data, i.e. OutBufStart != OutBufCur. - virtual void flush_impl(); - /// close - Manually flush the stream and close the file. void close(); /// tell - Return the current offset with the file. - uint64_t tell() { - return pos + (OutBufCur - OutBufStart); - } + uint64_t tell() { return pos + GetNumBytesInBuffer(); } /// seek - Flushes the stream and repositions the underlying file descriptor /// positition to the offset specified from the beginning of the file. @@ -252,22 +250,21 @@ /// simple adaptor class. class raw_os_ostream : public raw_ostream { std::ostream &OS; + + /// write_impl - See raw_ostream::write_impl. + virtual void write_impl(const char *Ptr, unsigned Size); public: raw_os_ostream(std::ostream &O) : OS(O) {} ~raw_os_ostream(); - - /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This only outputs the currently buffered data. - /// - /// raw_ostream guarantees to only call this routine when there is - /// buffered data, i.e. OutBufStart != OutBufCur. - virtual void flush_impl(); }; /// raw_string_ostream - A raw_ostream that writes to an std::string. This is a /// simple adaptor class. class raw_string_ostream : public raw_ostream { std::string &OS; + + /// write_impl - See raw_ostream::write_impl. + virtual void write_impl(const char *Ptr, unsigned Size); public: raw_string_ostream(std::string &O) : OS(O) {} ~raw_string_ostream(); @@ -278,29 +275,18 @@ flush(); return OS; } - - /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This only outputs the currently buffered data. - /// - /// raw_ostream guarantees to only call this routine when there is - /// buffered data, i.e. OutBufStart != OutBufCur. - virtual void flush_impl(); }; /// raw_svector_ostream - A raw_ostream that writes to an SmallVector or /// SmallString. This is a simple adaptor class. class raw_svector_ostream : public raw_ostream { SmallVectorImpl &OS; + + /// write_impl - See raw_ostream::write_impl. + virtual void write_impl(const char *Ptr, unsigned Size); public: raw_svector_ostream(SmallVectorImpl &O) : OS(O) {} ~raw_svector_ostream(); - - /// flush_impl - The is the piece of the class that is implemented by - /// subclasses. This only outputs the currently buffered data. - /// - /// raw_ostream guarantees to only call this routine when there is - /// buffered data, i.e. OutBufStart != OutBufCur. - virtual void flush_impl(); }; } // end llvm namespace Modified: llvm/trunk/lib/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=67060&r1=67059&r2=67060&view=diff ============================================================================== --- llvm/trunk/lib/Support/raw_ostream.cpp (original) +++ llvm/trunk/lib/Support/raw_ostream.cpp Mon Mar 16 18:29:31 2009 @@ -118,7 +118,7 @@ void raw_ostream::flush_nonempty() { assert(OutBufCur > OutBufStart && "Invalid call to flush_nonempty."); - flush_impl(); + write_impl(OutBufStart, OutBufCur - OutBufStart); OutBufCur = OutBufStart; } @@ -151,20 +151,12 @@ if (Size <= unsigned(OutBufEnd-OutBufStart)) { memcpy(OutBufCur, Ptr, Size); break; - } + } - // If emitting a string larger than our buffer, emit in chunks. In this - // case we know that we just flushed the buffer. - while (Size) { - unsigned NumToEmit = OutBufEnd-OutBufStart; - if (Size < NumToEmit) NumToEmit = Size; - assert(OutBufCur == OutBufStart); - memcpy(OutBufStart, Ptr, NumToEmit); - Ptr += NumToEmit; - Size -= NumToEmit; - OutBufCur = OutBufStart + NumToEmit; - flush_nonempty(); - } + // Otherwise we are emitting a string larger than our buffer. We + // know we already flushed, so just write it out directly. + write_impl(Ptr, Size); + Size = 0; break; } OutBufCur += Size; @@ -268,10 +260,10 @@ } } -void raw_fd_ostream::flush_impl() { +void raw_fd_ostream::write_impl(const char *Ptr, unsigned Size) { assert (FD >= 0 && "File already closed."); - pos += (OutBufCur - OutBufStart); - ::write(FD, OutBufStart, OutBufCur-OutBufStart); + pos += Size; + ::write(FD, Ptr, Size); } void raw_fd_ostream::close() { @@ -322,11 +314,8 @@ flush(); } -/// flush_impl - The is the piece of the class that is implemented by -/// subclasses. This outputs the currently buffered data and resets the -/// buffer to empty. -void raw_os_ostream::flush_impl() { - OS.write(OutBufStart, OutBufCur-OutBufStart); +void raw_os_ostream::write_impl(const char *Ptr, unsigned Size) { + OS.write(Ptr, Size); } //===----------------------------------------------------------------------===// @@ -337,11 +326,8 @@ flush(); } -/// flush_impl - The is the piece of the class that is implemented by -/// subclasses. This outputs the currently buffered data and resets the -/// buffer to empty. -void raw_string_ostream::flush_impl() { - OS.append(OutBufStart, OutBufCur-OutBufStart); +void raw_string_ostream::write_impl(const char *Ptr, unsigned Size) { + OS.append(Ptr, Size); } //===----------------------------------------------------------------------===// @@ -352,10 +338,7 @@ flush(); } -/// flush_impl - The is the piece of the class that is implemented by -/// subclasses. This outputs the currently buffered data and resets the -/// buffer to empty. -void raw_svector_ostream::flush_impl() { - OS.append(OutBufStart, OutBufCur); +void raw_svector_ostream::write_impl(const char *Ptr, unsigned Size) { + OS.append(Ptr, Ptr + Size); } From dalej at apple.com Mon Mar 16 19:38:25 2009 From: dalej at apple.com (Dale Johannesen) Date: Tue, 17 Mar 2009 00:38:25 -0000 Subject: [llvm-commits] [llvm] r67064 - /llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Message-ID: <200903170038.n2H0cPnf000398@zion.cs.uiuc.edu> Author: johannes Date: Mon Mar 16 19:38:24 2009 New Revision: 67064 URL: http://llvm.org/viewvc/llvm-project?rev=67064&view=rev Log: Fix a debug info dependency in jump threading. Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=67064&r1=67063&r2=67064&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Mon Mar 16 19:38:24 2009 @@ -432,10 +432,13 @@ // If DESTBB *just* contains the switch, then we can forward edges from PREDBB // directly to their destination. This does not introduce *any* code size - // growth. + // growth. Skip debug info first. + BasicBlock::iterator BBI = DestBB->begin(); + while (isa(BBI)) + BBI++; // FIXME: Thread if it just contains a PHI. - if (isa(DestBB->begin())) { + if (isa(BBI)) { bool MadeChange = false; // Ignore the default edge for now. for (unsigned i = 1, e = DestSI->getNumSuccessors(); i != e; ++i) { From isanbard at gmail.com Mon Mar 16 19:48:33 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 00:48:33 -0000 Subject: [llvm-commits] [llvm] r67065 - /llvm/branches/Apple/Dib/lib/Transforms/Scalar/JumpThreading.cpp Message-ID: <200903170048.n2H0mXfg000853@zion.cs.uiuc.edu> Author: void Date: Mon Mar 16 19:48:33 2009 New Revision: 67065 URL: http://llvm.org/viewvc/llvm-project?rev=67065&view=rev Log: --- Merging (from foreign repository) r67064 into '.': U lib/Transforms/Scalar/JumpThreading.cpp Fix a debug info dependency in jump threading. Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/JumpThreading.cpp Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/JumpThreading.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/Scalar/JumpThreading.cpp?rev=67065&r1=67064&r2=67065&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Transforms/Scalar/JumpThreading.cpp (original) +++ llvm/branches/Apple/Dib/lib/Transforms/Scalar/JumpThreading.cpp Mon Mar 16 19:48:33 2009 @@ -432,10 +432,13 @@ // If DESTBB *just* contains the switch, then we can forward edges from PREDBB // directly to their destination. This does not introduce *any* code size - // growth. + // growth. Skip debug info first. + BasicBlock::iterator BBI = DestBB->begin(); + while (isa(BBI)) + BBI++; // FIXME: Thread if it just contains a PHI. - if (isa(DestBB->begin())) { + if (isa(BBI)) { bool MadeChange = false; // Ignore the default edge for now. for (unsigned i = 1, e = DestSI->getNumSuccessors(); i != e; ++i) { From daniel at zuster.org Mon Mar 16 20:13:35 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Tue, 17 Mar 2009 01:13:35 -0000 Subject: [llvm-commits] [llvm] r67066 - in /llvm/trunk: include/llvm/Support/raw_ostream.h lib/Support/raw_ostream.cpp Message-ID: <200903170113.n2H1DaUH001958@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Mar 16 20:13:35 2009 New Revision: 67066 URL: http://llvm.org/viewvc/llvm-project?rev=67066&view=rev Log: raw_ostream: Rework implementation of unbuffered streams so outputting a single character requires only one branch to follow slow path. - Never use a buffer when writing on an unbuffered stream. - Move default buffer size to header. Modified: llvm/trunk/include/llvm/Support/raw_ostream.h llvm/trunk/lib/Support/raw_ostream.cpp Modified: llvm/trunk/include/llvm/Support/raw_ostream.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=67066&r1=67065&r2=67066&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/raw_ostream.h (original) +++ llvm/trunk/include/llvm/Support/raw_ostream.h Mon Mar 16 20:13:35 2009 @@ -31,10 +31,16 @@ /// a chunk at a time. class raw_ostream { private: - /// \invariant { The buffer is uninitialized (OutBufStart, - /// OutBufEnd, and OutBufCur are non-zero), or none of them are zero - /// and there are at least 64 total bytes in the buffer. } - + /// The buffer is handled in such a way that the buffer is + /// uninitialized, unbuffered, or out of space when OutBufCur >= + /// OutBufEnd. Thus a single comparison suffices to determine if we + /// need to take the slow path to write a single character. + /// + /// The buffer is in one of three states: + /// 1. Unbuffered (Unbuffered == true) + /// 1. Uninitialized (Unbuffered == false && OutBufStart == 0). + /// 2. Buffered (Unbuffered == false && OutBufStart != 0 && + /// OutBufEnd - OutBufStart >= 64). char *OutBufStart, *OutBufEnd, *OutBufCur; bool Unbuffered; @@ -54,7 +60,7 @@ /// SetBufferSize - Set the internal buffer size to the specified amount /// instead of the default. - void SetBufferSize(unsigned Size) { + void SetBufferSize(unsigned Size=4096) { assert(Size >= 64 && "Buffer size must be somewhat large for invariants to hold"); flush(); @@ -63,16 +69,19 @@ OutBufStart = new char[Size]; OutBufEnd = OutBufStart+Size; OutBufCur = OutBufStart; + Unbuffered = false; } /// SetUnbuffered - Set the streams buffering status. When /// unbuffered the stream will flush after every write. This routine /// will also flush the buffer immediately when the stream is being /// set to unbuffered. - void SetUnbuffered(bool unbuffered) { - Unbuffered = unbuffered; - if (Unbuffered) - flush(); + void SetUnbuffered() { + flush(); + + delete [] OutBufStart; + OutBufStart = OutBufEnd = OutBufCur = 0; + Unbuffered = true; } unsigned GetNumBytesInBuffer() const { @@ -92,8 +101,6 @@ if (OutBufCur >= OutBufEnd) return write(C); *OutBufCur++ = C; - if (Unbuffered) - flush_nonempty(); return *this; } @@ -101,8 +108,6 @@ if (OutBufCur >= OutBufEnd) return write(C); *OutBufCur++ = C; - if (Unbuffered) - flush_nonempty(); return *this; } @@ -110,8 +115,6 @@ if (OutBufCur >= OutBufEnd) return write(C); *OutBufCur++ = C; - if (Unbuffered) - flush_nonempty(); return *this; } Modified: llvm/trunk/lib/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=67066&r1=67065&r2=67066&view=diff ============================================================================== --- llvm/trunk/lib/Support/raw_ostream.cpp (original) +++ llvm/trunk/lib/Support/raw_ostream.cpp Mon Mar 16 20:13:35 2009 @@ -123,8 +123,13 @@ } raw_ostream &raw_ostream::write(unsigned char C) { + if (Unbuffered) { + write_impl(reinterpret_cast(&C), 1); + return *this; + } + if (!OutBufStart) - SetBufferSize(4096); + SetBufferSize(); else if (OutBufCur >= OutBufEnd) flush_nonempty(); @@ -133,8 +138,13 @@ } raw_ostream &raw_ostream::write(const char *Ptr, unsigned Size) { + if (Unbuffered) { + write_impl(Ptr, Size); + return *this; + } + if (!OutBufStart) - SetBufferSize(4096); + SetBufferSize(); else if (OutBufCur+Size > OutBufEnd) flush_nonempty(); @@ -161,8 +171,6 @@ } OutBufCur += Size; - if (Unbuffered) - flush(); return *this; } From scottm at aero.org Mon Mar 16 20:15:46 2009 From: scottm at aero.org (Scott Michel) Date: Tue, 17 Mar 2009 01:15:46 -0000 Subject: [llvm-commits] [llvm] r67067 - in /llvm/trunk: lib/Target/CellSPU/SPUISelDAGToDAG.cpp lib/Target/CellSPU/SPUISelLowering.cpp lib/Target/CellSPU/SPUISelLowering.h lib/Target/CellSPU/SPUInstrInfo.cpp lib/Target/CellSPU/SPUInstrInfo.td test/CodeGen/CellSPU/2009-01-01-BrCond.ll test/CodeGen/CellSPU/fneg-fabs.ll Message-ID: <200903170115.n2H1Fkfp002036@zion.cs.uiuc.edu> Author: pingbak Date: Mon Mar 16 20:15:45 2009 New Revision: 67067 URL: http://llvm.org/viewvc/llvm-project?rev=67067&view=rev Log: CellSPU: - Fix fabs, fneg for f32 and f64. - Use BuildVectorSDNode.isConstantSplat, now that the functionality exists - Continue to improve i64 constant lowering. Lower certain special constants to the constant pool when they correspond to SPU's shufb instruction's special mask values. This avoids the overhead of performing a shuffle on a zero-filled vector just to get the special constant when the memory load suffices. Modified: llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td llvm/trunk/test/CodeGen/CellSPU/2009-01-01-BrCond.ll llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll Modified: llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp?rev=67067&r1=67066&r2=67067&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp Mon Mar 16 20:15:45 2009 @@ -200,182 +200,212 @@ return retval; } -} -namespace { + //! Generate the carry-generate shuffle mask. + SDValue getCarryGenerateShufMask(SelectionDAG &DAG, DebugLoc dl) { + SmallVector ShufBytes; + + // Create the shuffle mask for "rotating" the borrow up one register slot + // once the borrow is generated. + ShufBytes.push_back(DAG.getConstant(0x04050607, MVT::i32)); + ShufBytes.push_back(DAG.getConstant(0x80808080, MVT::i32)); + ShufBytes.push_back(DAG.getConstant(0x0c0d0e0f, MVT::i32)); + ShufBytes.push_back(DAG.getConstant(0x80808080, MVT::i32)); -//===--------------------------------------------------------------------===// -/// SPUDAGToDAGISel - Cell SPU-specific code to select SPU machine -/// instructions for SelectionDAG operations. -/// -class SPUDAGToDAGISel : - public SelectionDAGISel -{ - SPUTargetMachine &TM; - SPUTargetLowering &SPUtli; - unsigned GlobalBaseReg; - -public: - explicit SPUDAGToDAGISel(SPUTargetMachine &tm) : - SelectionDAGISel(tm), - TM(tm), - SPUtli(*tm.getTargetLowering()) - { } - - virtual bool runOnFunction(Function &Fn) { - // Make sure we re-emit a set of the global base reg if necessary - GlobalBaseReg = 0; - SelectionDAGISel::runOnFunction(Fn); - return true; + return DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, + &ShufBytes[0], ShufBytes.size()); } - /// getI32Imm - Return a target constant with the specified value, of type - /// i32. - inline SDValue getI32Imm(uint32_t Imm) { - return CurDAG->getTargetConstant(Imm, MVT::i32); - } - - /// getI64Imm - Return a target constant with the specified value, of type - /// i64. - inline SDValue getI64Imm(uint64_t Imm) { - return CurDAG->getTargetConstant(Imm, MVT::i64); - } - - /// getSmallIPtrImm - Return a target constant of pointer type. - inline SDValue getSmallIPtrImm(unsigned Imm) { - return CurDAG->getTargetConstant(Imm, SPUtli.getPointerTy()); - } - - SDNode *emitBuildVector(SDValue build_vec) { - MVT vecVT = build_vec.getValueType(); - SDNode *bvNode = build_vec.getNode(); - DebugLoc dl = bvNode->getDebugLoc(); - - // Check to see if this vector can be represented as a CellSPU immediate - // constant by invoking all of the instruction selection predicates: - if (((vecVT == MVT::v8i16) && - (SPU::get_vec_i16imm(bvNode, *CurDAG, MVT::i16).getNode() != 0)) || - ((vecVT == MVT::v4i32) && - ((SPU::get_vec_i16imm(bvNode, *CurDAG, MVT::i32).getNode() != 0) || - (SPU::get_ILHUvec_imm(bvNode, *CurDAG, MVT::i32).getNode() != 0) || - (SPU::get_vec_u18imm(bvNode, *CurDAG, MVT::i32).getNode() != 0) || - (SPU::get_v4i32_imm(bvNode, *CurDAG).getNode() != 0))) || - ((vecVT == MVT::v2i64) && - ((SPU::get_vec_i16imm(bvNode, *CurDAG, MVT::i64).getNode() != 0) || - (SPU::get_ILHUvec_imm(bvNode, *CurDAG, MVT::i64).getNode() != 0) || - (SPU::get_vec_u18imm(bvNode, *CurDAG, MVT::i64).getNode() != 0)))) - return Select(build_vec); - - // No, need to emit a constant pool spill: - std::vector CV; - - for (size_t i = 0; i < build_vec.getNumOperands(); ++i) { - ConstantSDNode *V = dyn_cast (build_vec.getOperand(i)); - CV.push_back(const_cast (V->getConstantIntValue())); - } - - Constant *CP = ConstantVector::get(CV); - SDValue CPIdx = CurDAG->getConstantPool(CP, SPUtli.getPointerTy()); - unsigned Alignment = cast(CPIdx)->getAlignment(); - SDValue CGPoolOffset = - SPU::LowerConstantPool(CPIdx, *CurDAG, - SPUtli.getSPUTargetMachine()); - return SelectCode(CurDAG->getLoad(build_vec.getValueType(), dl, - CurDAG->getEntryNode(), CGPoolOffset, - PseudoSourceValue::getConstantPool(), 0, - false, Alignment)); - } - - /// Select - Convert the specified operand from a target-independent to a - /// target-specific node if it hasn't already been changed. - SDNode *Select(SDValue Op); - - //! Emit the instruction sequence for i64 shl - SDNode *SelectSHLi64(SDValue &Op, MVT OpVT); - - //! Emit the instruction sequence for i64 srl - SDNode *SelectSRLi64(SDValue &Op, MVT OpVT); - - //! Emit the instruction sequence for i64 sra - SDNode *SelectSRAi64(SDValue &Op, MVT OpVT); - - //! Emit the necessary sequence for loading i64 constants: - SDNode *SelectI64Constant(SDValue &Op, MVT OpVT); - - //! Returns true if the address N is an A-form (local store) address - bool SelectAFormAddr(SDValue Op, SDValue N, SDValue &Base, - SDValue &Index); - - //! D-form address predicate - bool SelectDFormAddr(SDValue Op, SDValue N, SDValue &Base, - SDValue &Index); - - /// Alternate D-form address using i7 offset predicate - bool SelectDForm2Addr(SDValue Op, SDValue N, SDValue &Disp, - SDValue &Base); - - /// D-form address selection workhorse - bool DFormAddressPredicate(SDValue Op, SDValue N, SDValue &Disp, - SDValue &Base, int minOffset, int maxOffset); - - //! Address predicate if N can be expressed as an indexed [r+r] operation. - bool SelectXFormAddr(SDValue Op, SDValue N, SDValue &Base, - SDValue &Index); - - /// SelectInlineAsmMemoryOperand - Implement addressing mode selection for - /// inline asm expressions. - virtual bool SelectInlineAsmMemoryOperand(const SDValue &Op, - char ConstraintCode, - std::vector &OutOps) { - SDValue Op0, Op1; - switch (ConstraintCode) { - default: return true; - case 'm': // memory - if (!SelectDFormAddr(Op, Op, Op0, Op1) - && !SelectAFormAddr(Op, Op, Op0, Op1)) - SelectXFormAddr(Op, Op, Op0, Op1); - break; - case 'o': // offsetable - if (!SelectDFormAddr(Op, Op, Op0, Op1) - && !SelectAFormAddr(Op, Op, Op0, Op1)) { - Op0 = Op; - Op1 = getSmallIPtrImm(0); + //! Generate the borrow-generate shuffle mask + SDValue getBorrowGenerateShufMask(SelectionDAG &DAG, DebugLoc dl) { + SmallVector ShufBytes; + + // Create the shuffle mask for "rotating" the borrow up one register slot + // once the borrow is generated. + ShufBytes.push_back(DAG.getConstant(0x04050607, MVT::i32)); + ShufBytes.push_back(DAG.getConstant(0xc0c0c0c0, MVT::i32)); + ShufBytes.push_back(DAG.getConstant(0x0c0d0e0f, MVT::i32)); + ShufBytes.push_back(DAG.getConstant(0xc0c0c0c0, MVT::i32)); + + return DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, + &ShufBytes[0], ShufBytes.size()); + } + + //===------------------------------------------------------------------===// + /// SPUDAGToDAGISel - Cell SPU-specific code to select SPU machine + /// instructions for SelectionDAG operations. + /// + class SPUDAGToDAGISel : + public SelectionDAGISel + { + SPUTargetMachine &TM; + SPUTargetLowering &SPUtli; + unsigned GlobalBaseReg; + + public: + explicit SPUDAGToDAGISel(SPUTargetMachine &tm) : + SelectionDAGISel(tm), + TM(tm), + SPUtli(*tm.getTargetLowering()) + { } + + virtual bool runOnFunction(Function &Fn) { + // Make sure we re-emit a set of the global base reg if necessary + GlobalBaseReg = 0; + SelectionDAGISel::runOnFunction(Fn); + return true; + } + + /// getI32Imm - Return a target constant with the specified value, of type + /// i32. + inline SDValue getI32Imm(uint32_t Imm) { + return CurDAG->getTargetConstant(Imm, MVT::i32); + } + + /// getI64Imm - Return a target constant with the specified value, of type + /// i64. + inline SDValue getI64Imm(uint64_t Imm) { + return CurDAG->getTargetConstant(Imm, MVT::i64); + } + + /// getSmallIPtrImm - Return a target constant of pointer type. + inline SDValue getSmallIPtrImm(unsigned Imm) { + return CurDAG->getTargetConstant(Imm, SPUtli.getPointerTy()); } - break; - case 'v': // not offsetable + + SDNode *emitBuildVector(SDValue build_vec) { + MVT vecVT = build_vec.getValueType(); + MVT eltVT = vecVT.getVectorElementType(); + SDNode *bvNode = build_vec.getNode(); + DebugLoc dl = bvNode->getDebugLoc(); + + // Check to see if this vector can be represented as a CellSPU immediate + // constant by invoking all of the instruction selection predicates: + if (((vecVT == MVT::v8i16) && + (SPU::get_vec_i16imm(bvNode, *CurDAG, MVT::i16).getNode() != 0)) || + ((vecVT == MVT::v4i32) && + ((SPU::get_vec_i16imm(bvNode, *CurDAG, MVT::i32).getNode() != 0) || + (SPU::get_ILHUvec_imm(bvNode, *CurDAG, MVT::i32).getNode() != 0) || + (SPU::get_vec_u18imm(bvNode, *CurDAG, MVT::i32).getNode() != 0) || + (SPU::get_v4i32_imm(bvNode, *CurDAG).getNode() != 0))) || + ((vecVT == MVT::v2i64) && + ((SPU::get_vec_i16imm(bvNode, *CurDAG, MVT::i64).getNode() != 0) || + (SPU::get_ILHUvec_imm(bvNode, *CurDAG, MVT::i64).getNode() != 0) || + (SPU::get_vec_u18imm(bvNode, *CurDAG, MVT::i64).getNode() != 0)))) + return Select(build_vec); + + // No, need to emit a constant pool spill: + std::vector CV; + + for (size_t i = 0; i < build_vec.getNumOperands(); ++i) { + ConstantSDNode *V = dyn_cast (build_vec.getOperand(i)); + CV.push_back(const_cast (V->getConstantIntValue())); + } + + Constant *CP = ConstantVector::get(CV); + SDValue CPIdx = CurDAG->getConstantPool(CP, SPUtli.getPointerTy()); + unsigned Alignment = cast(CPIdx)->getAlignment(); + SDValue CGPoolOffset = + SPU::LowerConstantPool(CPIdx, *CurDAG, + SPUtli.getSPUTargetMachine()); + return SelectCode(CurDAG->getLoad(build_vec.getValueType(), dl, + CurDAG->getEntryNode(), CGPoolOffset, + PseudoSourceValue::getConstantPool(), 0, + false, Alignment)); + } + + /// Select - Convert the specified operand from a target-independent to a + /// target-specific node if it hasn't already been changed. + SDNode *Select(SDValue Op); + + //! Emit the instruction sequence for i64 shl + SDNode *SelectSHLi64(SDValue &Op, MVT OpVT); + + //! Emit the instruction sequence for i64 srl + SDNode *SelectSRLi64(SDValue &Op, MVT OpVT); + + //! Emit the instruction sequence for i64 sra + SDNode *SelectSRAi64(SDValue &Op, MVT OpVT); + + //! Emit the necessary sequence for loading i64 constants: + SDNode *SelectI64Constant(SDValue &Op, MVT OpVT, DebugLoc dl); + + //! Alternate instruction emit sequence for loading i64 constants + SDNode *SelectI64Constant(uint64_t i64const, MVT OpVT, DebugLoc dl); + + //! Returns true if the address N is an A-form (local store) address + bool SelectAFormAddr(SDValue Op, SDValue N, SDValue &Base, + SDValue &Index); + + //! D-form address predicate + bool SelectDFormAddr(SDValue Op, SDValue N, SDValue &Base, + SDValue &Index); + + /// Alternate D-form address using i7 offset predicate + bool SelectDForm2Addr(SDValue Op, SDValue N, SDValue &Disp, + SDValue &Base); + + /// D-form address selection workhorse + bool DFormAddressPredicate(SDValue Op, SDValue N, SDValue &Disp, + SDValue &Base, int minOffset, int maxOffset); + + //! Address predicate if N can be expressed as an indexed [r+r] operation. + bool SelectXFormAddr(SDValue Op, SDValue N, SDValue &Base, + SDValue &Index); + + /// SelectInlineAsmMemoryOperand - Implement addressing mode selection for + /// inline asm expressions. + virtual bool SelectInlineAsmMemoryOperand(const SDValue &Op, + char ConstraintCode, + std::vector &OutOps) { + SDValue Op0, Op1; + switch (ConstraintCode) { + default: return true; + case 'm': // memory + if (!SelectDFormAddr(Op, Op, Op0, Op1) + && !SelectAFormAddr(Op, Op, Op0, Op1)) + SelectXFormAddr(Op, Op, Op0, Op1); + break; + case 'o': // offsetable + if (!SelectDFormAddr(Op, Op, Op0, Op1) + && !SelectAFormAddr(Op, Op, Op0, Op1)) { + Op0 = Op; + Op1 = getSmallIPtrImm(0); + } + break; + case 'v': // not offsetable #if 1 - assert(0 && "InlineAsmMemoryOperand 'v' constraint not handled."); + assert(0 && "InlineAsmMemoryOperand 'v' constraint not handled."); #else - SelectAddrIdxOnly(Op, Op, Op0, Op1); + SelectAddrIdxOnly(Op, Op, Op0, Op1); #endif - break; - } + break; + } - OutOps.push_back(Op0); - OutOps.push_back(Op1); - return false; - } + OutOps.push_back(Op0); + OutOps.push_back(Op1); + return false; + } - /// InstructionSelect - This callback is invoked by - /// SelectionDAGISel when it has created a SelectionDAG for us to codegen. - virtual void InstructionSelect(); + /// InstructionSelect - This callback is invoked by + /// SelectionDAGISel when it has created a SelectionDAG for us to codegen. + virtual void InstructionSelect(); - virtual const char *getPassName() const { - return "Cell SPU DAG->DAG Pattern Instruction Selection"; - } + virtual const char *getPassName() const { + return "Cell SPU DAG->DAG Pattern Instruction Selection"; + } - /// CreateTargetHazardRecognizer - Return the hazard recognizer to use for - /// this target when scheduling the DAG. - virtual ScheduleHazardRecognizer *CreateTargetHazardRecognizer() { - const TargetInstrInfo *II = TM.getInstrInfo(); - assert(II && "No InstrInfo?"); - return new SPUHazardRecognizer(*II); - } + /// CreateTargetHazardRecognizer - Return the hazard recognizer to use for + /// this target when scheduling the DAG. + virtual ScheduleHazardRecognizer *CreateTargetHazardRecognizer() { + const TargetInstrInfo *II = TM.getInstrInfo(); + assert(II && "No InstrInfo?"); + return new SPUHazardRecognizer(*II); + } - // Include the pieces autogenerated from the target description. + // Include the pieces autogenerated from the target description. #include "SPUGenDAGISel.inc" -}; - + }; } /// InstructionSelect - This callback is invoked by @@ -689,7 +719,7 @@ // Catch the i64 constants that end up here. Note: The backend doesn't // attempt to legalize the constant (it's useless because DAGCombiner // will insert 64-bit constants and we can't stop it). - return SelectI64Constant(Op, OpVT); + return SelectI64Constant(Op, OpVT, Op.getDebugLoc()); } else if ((Opc == ISD::ZERO_EXTEND || Opc == ISD::ANY_EXTEND) && OpVT == MVT::i64) { SDValue Op0 = Op.getOperand(0); @@ -747,21 +777,21 @@ zextShuffle)); } else if (Opc == ISD::ADD && (OpVT == MVT::i64 || OpVT == MVT::v2i64)) { SDNode *CGLoad = - emitBuildVector(SPU::getCarryGenerateShufMask(*CurDAG, dl)); + emitBuildVector(getCarryGenerateShufMask(*CurDAG, dl)); return SelectCode(CurDAG->getNode(SPUISD::ADD64_MARKER, dl, OpVT, Op.getOperand(0), Op.getOperand(1), SDValue(CGLoad, 0))); } else if (Opc == ISD::SUB && (OpVT == MVT::i64 || OpVT == MVT::v2i64)) { SDNode *CGLoad = - emitBuildVector(SPU::getBorrowGenerateShufMask(*CurDAG, dl)); + emitBuildVector(getBorrowGenerateShufMask(*CurDAG, dl)); return SelectCode(CurDAG->getNode(SPUISD::SUB64_MARKER, dl, OpVT, Op.getOperand(0), Op.getOperand(1), SDValue(CGLoad, 0))); } else if (Opc == ISD::MUL && (OpVT == MVT::i64 || OpVT == MVT::v2i64)) { SDNode *CGLoad = - emitBuildVector(SPU::getCarryGenerateShufMask(*CurDAG, dl)); + emitBuildVector(getCarryGenerateShufMask(*CurDAG, dl)); return SelectCode(CurDAG->getNode(SPUISD::MUL64_MARKER, dl, OpVT, Op.getOperand(0), Op.getOperand(1), @@ -813,6 +843,54 @@ if (OpVT == MVT::i64) { return SelectSRAi64(Op, OpVT); } + } else if (Opc == ISD::FNEG + && (OpVT == MVT::f64 || OpVT == MVT::v2f64)) { + DebugLoc dl = Op.getDebugLoc(); + // Check if the pattern is a special form of DFNMS: + // (fneg (fsub (fmul R64FP:$rA, R64FP:$rB), R64FP:$rC)) + SDValue Op0 = Op.getOperand(0); + if (Op0.getOpcode() == ISD::FSUB) { + SDValue Op00 = Op0.getOperand(0); + if (Op00.getOpcode() == ISD::FMUL) { + unsigned Opc = SPU::DFNMSf64; + if (OpVT == MVT::v2f64) + Opc = SPU::DFNMSv2f64; + + return CurDAG->getTargetNode(Opc, dl, OpVT, + Op00.getOperand(0), + Op00.getOperand(1), + Op0.getOperand(1)); + } + } + + SDValue negConst = CurDAG->getConstant(0x8000000000000000ULL, MVT::i64); + SDNode *signMask = 0; + unsigned Opc = SPU::ORfneg64; + + if (OpVT == MVT::f64) { + signMask = SelectI64Constant(negConst, MVT::i64, dl); + } else if (OpVT == MVT::v2f64) { + Opc = SPU::ORfnegvec; + signMask = emitBuildVector(CurDAG->getNode(ISD::BUILD_VECTOR, dl, + MVT::v2i64, + negConst, negConst)); + } + + return CurDAG->getTargetNode(Opc, dl, OpVT, + Op.getOperand(0), SDValue(signMask, 0)); + } else if (Opc == ISD::FABS) { + if (OpVT == MVT::f64) { + SDNode *signMask = SelectI64Constant(0x7fffffffffffffffULL, MVT::i64, dl); + return CurDAG->getTargetNode(SPU::ANDfabs64, dl, OpVT, + Op.getOperand(0), SDValue(signMask, 0)); + } else if (OpVT == MVT::v2f64) { + SDValue absConst = CurDAG->getConstant(0x7fffffffffffffffULL, MVT::i64); + SDValue absVec = CurDAG->getNode(ISD::BUILD_VECTOR, dl, MVT::v2i64, + absConst, absConst); + SDNode *signMask = emitBuildVector(absVec); + return CurDAG->getTargetNode(SPU::ANDfabsvec, dl, OpVT, + Op.getOperand(0), SDValue(signMask, 0)); + } } else if (Opc == SPUISD::LDRESULT) { // Custom select instructions for LDRESULT MVT VT = N->getValueType(0); @@ -1087,13 +1165,17 @@ /*! Do the necessary magic necessary to load a i64 constant */ -SDNode *SPUDAGToDAGISel::SelectI64Constant(SDValue& Op, MVT OpVT) { +SDNode *SPUDAGToDAGISel::SelectI64Constant(SDValue& Op, MVT OpVT, + DebugLoc dl) { ConstantSDNode *CN = cast(Op.getNode()); - // Currently there's no DL on the input, but won't hurt to pretend. - DebugLoc dl = Op.getDebugLoc(); + return SelectI64Constant(CN->getZExtValue(), OpVT, dl); +} + +SDNode *SPUDAGToDAGISel::SelectI64Constant(uint64_t Value64, MVT OpVT, + DebugLoc dl) { MVT OpVecVT = MVT::getVectorVT(OpVT, 2); SDValue i64vec = - SPU::LowerSplat_v2i64(OpVecVT, *CurDAG, CN->getZExtValue(), dl); + SPU::LowerV2I64Splat(OpVecVT, *CurDAG, Value64, dl); // Here's where it gets interesting, because we have to parse out the // subtree handed back in i64vec: @@ -1143,8 +1225,11 @@ SDValue(lhsNode, 0), SDValue(rhsNode, 0), SDValue(shufMaskNode, 0))); - return CurDAG->getTargetNode(SPU::ORi64_v2i64, dl, OpVT, + return CurDAG->getTargetNode(SPU::ORi64_v2i64, dl, OpVT, SDValue(shufNode, 0)); + } else if (i64vec.getOpcode() == ISD::BUILD_VECTOR) { + return CurDAG->getTargetNode(SPU::ORi64_v2i64, dl, OpVT, + SDValue(emitBuildVector(i64vec), 0)); } else { cerr << "SPUDAGToDAGISel::SelectI64Constant: Unhandled i64vec condition\n"; abort(); Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp?rev=67067&r1=67066&r2=67067&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.cpp Mon Mar 16 20:15:45 2009 @@ -1,5 +1,5 @@ -//===-- SPUISelLowering.cpp - Cell SPU DAG Lowering Implementation --------===// // +//===-- SPUISelLowering.cpp - Cell SPU DAG Lowering Implementation --------===// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source @@ -1353,7 +1353,7 @@ } } - return 0; // All UNDEF: use implicit def.; not Constant node + return 0; } /// get_vec_i18imm - Test if this vector is a vector filled with the same value @@ -1480,131 +1480,30 @@ return SDValue(); } -// If this is a vector of constants or undefs, get the bits. A bit in -// UndefBits is set if the corresponding element of the vector is an -// ISD::UNDEF value. For undefs, the corresponding VectorBits values are -// zero. Return true if this is not an array of constants, false if it is. -// -static bool GetConstantBuildVectorBits(SDNode *BV, uint64_t VectorBits[2], - uint64_t UndefBits[2]) { - // Start with zero'd results. - VectorBits[0] = VectorBits[1] = UndefBits[0] = UndefBits[1] = 0; - - unsigned EltBitSize = BV->getOperand(0).getValueType().getSizeInBits(); - for (unsigned i = 0, e = BV->getNumOperands(); i != e; ++i) { - SDValue OpVal = BV->getOperand(i); - - unsigned PartNo = i >= e/2; // In the upper 128 bits? - unsigned SlotNo = e/2 - (i & (e/2-1))-1; // Which subpiece of the uint64_t. - - uint64_t EltBits = 0; - if (OpVal.getOpcode() == ISD::UNDEF) { - uint64_t EltUndefBits = ~0ULL >> (64-EltBitSize); - UndefBits[PartNo] |= EltUndefBits << (SlotNo*EltBitSize); - continue; - } else if (ConstantSDNode *CN = dyn_cast(OpVal)) { - EltBits = CN->getZExtValue() & (~0ULL >> (64-EltBitSize)); - } else if (ConstantFPSDNode *CN = dyn_cast(OpVal)) { - const APFloat &apf = CN->getValueAPF(); - EltBits = (CN->getValueType(0) == MVT::f32 - ? FloatToBits(apf.convertToFloat()) - : DoubleToBits(apf.convertToDouble())); - } else { - // Nonconstant element. - return true; - } - - VectorBits[PartNo] |= EltBits << (SlotNo*EltBitSize); - } - - //printf("%llx %llx %llx %llx\n", - // VectorBits[0], VectorBits[1], UndefBits[0], UndefBits[1]); - return false; -} - -/// If this is a splat (repetition) of a value across the whole vector, return -/// the smallest size that splats it. For example, "0x01010101010101..." is a -/// splat of 0x01, 0x0101, and 0x01010101. We return SplatBits = 0x01 and -/// SplatSize = 1 byte. -static bool isConstantSplat(const uint64_t Bits128[2], - const uint64_t Undef128[2], - int MinSplatBits, - uint64_t &SplatBits, uint64_t &SplatUndef, - int &SplatSize) { - // Don't let undefs prevent splats from matching. See if the top 64-bits are - // the same as the lower 64-bits, ignoring undefs. - uint64_t Bits64 = Bits128[0] | Bits128[1]; - uint64_t Undef64 = Undef128[0] & Undef128[1]; - uint32_t Bits32 = uint32_t(Bits64) | uint32_t(Bits64 >> 32); - uint32_t Undef32 = uint32_t(Undef64) & uint32_t(Undef64 >> 32); - uint16_t Bits16 = uint16_t(Bits32) | uint16_t(Bits32 >> 16); - uint16_t Undef16 = uint16_t(Undef32) & uint16_t(Undef32 >> 16); - - if ((Bits128[0] & ~Undef128[1]) == (Bits128[1] & ~Undef128[0])) { - if (MinSplatBits < 64) { - - // Check that the top 32-bits are the same as the lower 32-bits, ignoring - // undefs. - if ((Bits64 & (~Undef64 >> 32)) == ((Bits64 >> 32) & ~Undef64)) { - if (MinSplatBits < 32) { - - // If the top 16-bits are different than the lower 16-bits, ignoring - // undefs, we have an i32 splat. - if ((Bits32 & (~Undef32 >> 16)) == ((Bits32 >> 16) & ~Undef32)) { - if (MinSplatBits < 16) { - // If the top 8-bits are different than the lower 8-bits, ignoring - // undefs, we have an i16 splat. - if ((Bits16 & (uint16_t(~Undef16) >> 8)) - == ((Bits16 >> 8) & ~Undef16)) { - // Otherwise, we have an 8-bit splat. - SplatBits = uint8_t(Bits16) | uint8_t(Bits16 >> 8); - SplatUndef = uint8_t(Undef16) & uint8_t(Undef16 >> 8); - SplatSize = 1; - return true; - } - } else { - SplatBits = Bits16; - SplatUndef = Undef16; - SplatSize = 2; - return true; - } - } - } else { - SplatBits = Bits32; - SplatUndef = Undef32; - SplatSize = 4; - return true; - } - } - } else { - SplatBits = Bits128[0]; - SplatUndef = Undef128[0]; - SplatSize = 8; - return true; - } - } - - return false; // Can't be a splat if two pieces don't match. -} - //! Lower a BUILD_VECTOR instruction creatively: SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) { MVT VT = Op.getValueType(); + MVT EltVT = VT.getVectorElementType(); DebugLoc dl = Op.getDebugLoc(); - // If this is a vector of constants or undefs, get the bits. A bit in - // UndefBits is set if the corresponding element of the vector is an - // ISD::UNDEF value. For undefs, the corresponding VectorBits values are - // zero. - uint64_t VectorBits[2]; - uint64_t UndefBits[2]; - uint64_t SplatBits, SplatUndef; - int SplatSize; - if (GetConstantBuildVectorBits(Op.getNode(), VectorBits, UndefBits) - || !isConstantSplat(VectorBits, UndefBits, - VT.getVectorElementType().getSizeInBits(), - SplatBits, SplatUndef, SplatSize)) - return SDValue(); // Not a constant vector, not a splat. + BuildVectorSDNode *BCN = dyn_cast(Op.getNode()); + assert(BCN != 0 && "Expected BuildVectorSDNode in SPU LowerBUILD_VECTOR"); + unsigned minSplatBits = EltVT.getSizeInBits(); + + if (minSplatBits < 16) + minSplatBits = 16; + + APInt APSplatBits, APSplatUndef; + unsigned SplatBitSize; + bool HasAnyUndefs; + + if (!BCN->isConstantSplat(APSplatBits, APSplatUndef, SplatBitSize, + HasAnyUndefs, minSplatBits) + || minSplatBits < SplatBitSize) + return SDValue(); // Wasn't a constant vector or splat exceeded min + + uint64_t SplatBits = APSplatBits.getZExtValue(); + unsigned SplatSize = SplatBitSize / 8; switch (VT.getSimpleVT()) { default: @@ -1620,8 +1519,7 @@ // NOTE: pretend the constant is an integer. LLVM won't load FP constants SDValue T = DAG.getConstant(Value32, MVT::i32); return DAG.getNode(ISD::BIT_CONVERT, dl, MVT::v4f32, - DAG.getNode(ISD::BUILD_VECTOR, dl, - MVT::v4i32, T, T, T, T)); + DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, T, T, T, T)); break; } case MVT::v2f64: { @@ -1636,45 +1534,42 @@ } case MVT::v16i8: { // 8-bit constants have to be expanded to 16-bits - unsigned short Value16 = SplatBits | (SplatBits << 8); - SDValue Ops[8]; - for (int i = 0; i < 8; ++i) - Ops[i] = DAG.getConstant(Value16, MVT::i16); + unsigned short Value16 = SplatBits /* | (SplatBits << 8) */; + SmallVector Ops; + + Ops.assign(8, DAG.getConstant(Value16, MVT::i16)); return DAG.getNode(ISD::BIT_CONVERT, dl, VT, - DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v8i16, Ops, 8)); + DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v8i16, &Ops[0], Ops.size())); } case MVT::v8i16: { - unsigned short Value16; - if (SplatSize == 2) - Value16 = (unsigned short) (SplatBits & 0xffff); - else - Value16 = (unsigned short) (SplatBits | (SplatBits << 8)); - SDValue T = DAG.getConstant(Value16, VT.getVectorElementType()); - SDValue Ops[8]; - for (int i = 0; i < 8; ++i) Ops[i] = T; - return DAG.getNode(ISD::BUILD_VECTOR, dl, VT, Ops, 8); + unsigned short Value16 = SplatBits; + SDValue T = DAG.getConstant(Value16, EltVT); + SmallVector Ops; + + Ops.assign(8, T); + return DAG.getNode(ISD::BUILD_VECTOR, dl, VT, &Ops[0], Ops.size()); } case MVT::v4i32: { - unsigned int Value = SplatBits; - SDValue T = DAG.getConstant(Value, VT.getVectorElementType()); + SDValue T = DAG.getConstant(unsigned(SplatBits), VT.getVectorElementType()); return DAG.getNode(ISD::BUILD_VECTOR, dl, VT, T, T, T, T); } case MVT::v2i32: { - unsigned int Value = SplatBits; - SDValue T = DAG.getConstant(Value, VT.getVectorElementType()); + SDValue T = DAG.getConstant(unsigned(SplatBits), VT.getVectorElementType()); return DAG.getNode(ISD::BUILD_VECTOR, dl, VT, T, T); } case MVT::v2i64: { - return SPU::LowerSplat_v2i64(VT, DAG, SplatBits, dl); + return SPU::LowerV2I64Splat(VT, DAG, SplatBits, dl); } } return SDValue(); } +/*! + */ SDValue -SPU::LowerSplat_v2i64(MVT OpVT, SelectionDAG& DAG, uint64_t SplatVal, - DebugLoc dl) { +SPU::LowerV2I64Splat(MVT OpVT, SelectionDAG& DAG, uint64_t SplatVal, + DebugLoc dl) { uint32_t upper = uint32_t(SplatVal >> 32); uint32_t lower = uint32_t(SplatVal); @@ -1685,10 +1580,6 @@ DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, Val, Val, Val, Val)); } else { - SDValue LO32; - SDValue HI32; - SmallVector ShufBytes; - SDValue Result; bool upper_special, lower_special; // NOTE: This code creates common-case shuffle masks that can be easily @@ -1699,6 +1590,18 @@ upper_special = (upper == 0 || upper == 0xffffffff || upper == 0x80000000); lower_special = (lower == 0 || lower == 0xffffffff || lower == 0x80000000); + // Both upper and lower are special, lower to a constant pool load: + if (lower_special && upper_special) { + SDValue SplatValCN = DAG.getConstant(SplatVal, MVT::i64); + return DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v2i64, + SplatValCN, SplatValCN); + } + + SDValue LO32; + SDValue HI32; + SmallVector ShufBytes; + SDValue Result; + // Create lower vector if not a special pattern if (!lower_special) { SDValue LO32C = DAG.getConstant(lower, MVT::i32); @@ -1721,13 +1624,6 @@ LO32 = HI32; if (upper_special) HI32 = LO32; - if (lower_special && upper_special) { - // Unhappy situation... both upper and lower are special, so punt with - // a target constant: - SDValue Zero = DAG.getConstant(0, MVT::i32); - HI32 = LO32 = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, Zero, Zero, - Zero, Zero); - } for (int i = 0; i < 4; ++i) { uint64_t val = 0; @@ -2022,9 +1918,9 @@ ShufMask[i] = DAG.getConstant(bits, MVT::i32); } - SDValue ShufMaskVec = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, - &ShufMask[0], - sizeof(ShufMask) / sizeof(ShufMask[0])); + SDValue ShufMaskVec = + DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, + &ShufMask[0], sizeof(ShufMask)/sizeof(ShufMask[0])); retval = DAG.getNode(SPUISD::VEC2PREFSLOT, dl, VT, DAG.getNode(SPUISD::SHUFB, dl, N.getValueType(), @@ -2067,28 +1963,28 @@ /*NOTREACHED*/ case MVT::i8: { SDValue factor = DAG.getConstant(0x00000000, MVT::i32); - replicate = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, factor, factor, - factor, factor); + replicate = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, + factor, factor, factor, factor); break; } case MVT::i16: { SDValue factor = DAG.getConstant(0x00010001, MVT::i32); - replicate = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, factor, factor, - factor, factor); + replicate = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, + factor, factor, factor, factor); break; } case MVT::i32: case MVT::f32: { SDValue factor = DAG.getConstant(0x00010203, MVT::i32); - replicate = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, factor, factor, - factor, factor); + replicate = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, + factor, factor, factor, factor); break; } case MVT::i64: case MVT::f64: { SDValue loFactor = DAG.getConstant(0x00010203, MVT::i32); SDValue hiFactor = DAG.getConstant(0x04050607, MVT::i32); - replicate = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, + replicate = DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, loFactor, hiFactor, loFactor, hiFactor); break; } @@ -2164,71 +2060,65 @@ case ISD::ROTR: case ISD::ROTL: { SDValue N1 = Op.getOperand(1); - unsigned N1Opc; - N0 = (N0.getOpcode() != ISD::Constant - ? DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i16, N0) - : DAG.getConstant(cast(N0)->getZExtValue(), - MVT::i16)); - N1Opc = N1.getValueType().bitsLT(ShiftVT) - ? ISD::ZERO_EXTEND - : ISD::TRUNCATE; - N1 = (N1.getOpcode() != ISD::Constant - ? DAG.getNode(N1Opc, dl, ShiftVT, N1) - : DAG.getConstant(cast(N1)->getZExtValue(), - TLI.getShiftAmountTy())); + MVT N1VT = N1.getValueType(); + + N0 = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i16, N0); + if (!N1VT.bitsEq(ShiftVT)) { + unsigned N1Opc = N1.getValueType().bitsLT(ShiftVT) + ? ISD::ZERO_EXTEND + : ISD::TRUNCATE; + N1 = DAG.getNode(N1Opc, dl, ShiftVT, N1); + } + + // Replicate lower 8-bits into upper 8: SDValue ExpandArg = DAG.getNode(ISD::OR, dl, MVT::i16, N0, DAG.getNode(ISD::SHL, dl, MVT::i16, N0, DAG.getConstant(8, MVT::i32))); + + // Truncate back down to i8 return DAG.getNode(ISD::TRUNCATE, dl, MVT::i8, DAG.getNode(Opc, dl, MVT::i16, ExpandArg, N1)); } case ISD::SRL: case ISD::SHL: { SDValue N1 = Op.getOperand(1); - unsigned N1Opc; - N0 = (N0.getOpcode() != ISD::Constant - ? DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i16, N0) - : DAG.getConstant(cast(N0)->getZExtValue(), - MVT::i32)); - N1Opc = N1.getValueType().bitsLT(ShiftVT) - ? ISD::ZERO_EXTEND - : ISD::TRUNCATE; - N1 = (N1.getOpcode() != ISD::Constant - ? DAG.getNode(N1Opc, dl, ShiftVT, N1) - : DAG.getConstant(cast(N1)->getZExtValue(), ShiftVT)); + MVT N1VT = N1.getValueType(); + + N0 = DAG.getNode(ISD::ZERO_EXTEND, dl, MVT::i16, N0); + if (!N1VT.bitsEq(ShiftVT)) { + unsigned N1Opc = ISD::ZERO_EXTEND; + + if (N1.getValueType().bitsGT(ShiftVT)) + N1Opc = ISD::TRUNCATE; + + N1 = DAG.getNode(N1Opc, dl, ShiftVT, N1); + } + return DAG.getNode(ISD::TRUNCATE, dl, MVT::i8, DAG.getNode(Opc, dl, MVT::i16, N0, N1)); } case ISD::SRA: { SDValue N1 = Op.getOperand(1); - unsigned N1Opc; - N0 = (N0.getOpcode() != ISD::Constant - ? DAG.getNode(ISD::SIGN_EXTEND, dl, MVT::i16, N0) - : DAG.getConstant(cast(N0)->getSExtValue(), - MVT::i16)); - N1Opc = N1.getValueType().bitsLT(ShiftVT) - ? ISD::SIGN_EXTEND - : ISD::TRUNCATE; - N1 = (N1.getOpcode() != ISD::Constant - ? DAG.getNode(N1Opc, dl, ShiftVT, N1) - : DAG.getConstant(cast(N1)->getZExtValue(), - ShiftVT)); + MVT N1VT = N1.getValueType(); + + N0 = DAG.getNode(ISD::SIGN_EXTEND, dl, MVT::i16, N0); + if (!N1VT.bitsEq(ShiftVT)) { + unsigned N1Opc = ISD::SIGN_EXTEND; + + if (N1VT.bitsGT(ShiftVT)) + N1Opc = ISD::TRUNCATE; + N1 = DAG.getNode(N1Opc, dl, ShiftVT, N1); + } + return DAG.getNode(ISD::TRUNCATE, dl, MVT::i8, DAG.getNode(Opc, dl, MVT::i16, N0, N1)); } case ISD::MUL: { SDValue N1 = Op.getOperand(1); - unsigned N1Opc; - N0 = (N0.getOpcode() != ISD::Constant - ? DAG.getNode(ISD::SIGN_EXTEND, dl, MVT::i16, N0) - : DAG.getConstant(cast(N0)->getZExtValue(), - MVT::i16)); - N1Opc = N1.getValueType().bitsLT(MVT::i16) ? ISD::SIGN_EXTEND : ISD::TRUNCATE; - N1 = (N1.getOpcode() != ISD::Constant - ? DAG.getNode(N1Opc, dl, MVT::i16, N1) - : DAG.getConstant(cast(N1)->getSExtValue(), - MVT::i16)); + + N0 = DAG.getNode(ISD::SIGN_EXTEND, dl, MVT::i16, N0); + N1 = DAG.getNode(ISD::SIGN_EXTEND, dl, MVT::i16, N1); return DAG.getNode(ISD::TRUNCATE, dl, MVT::i8, DAG.getNode(Opc, dl, MVT::i16, N0, N1)); break; @@ -2238,36 +2128,6 @@ return SDValue(); } -//! Generate the carry-generate shuffle mask. -SDValue SPU::getCarryGenerateShufMask(SelectionDAG &DAG, DebugLoc dl) { - SmallVector ShufBytes; - - // Create the shuffle mask for "rotating" the borrow up one register slot - // once the borrow is generated. - ShufBytes.push_back(DAG.getConstant(0x04050607, MVT::i32)); - ShufBytes.push_back(DAG.getConstant(0x80808080, MVT::i32)); - ShufBytes.push_back(DAG.getConstant(0x0c0d0e0f, MVT::i32)); - ShufBytes.push_back(DAG.getConstant(0x80808080, MVT::i32)); - - return DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, - &ShufBytes[0], ShufBytes.size()); -} - -//! Generate the borrow-generate shuffle mask -SDValue SPU::getBorrowGenerateShufMask(SelectionDAG &DAG, DebugLoc dl) { - SmallVector ShufBytes; - - // Create the shuffle mask for "rotating" the borrow up one register slot - // once the borrow is generated. - ShufBytes.push_back(DAG.getConstant(0x04050607, MVT::i32)); - ShufBytes.push_back(DAG.getConstant(0xc0c0c0c0, MVT::i32)); - ShufBytes.push_back(DAG.getConstant(0x0c0d0e0f, MVT::i32)); - ShufBytes.push_back(DAG.getConstant(0xc0c0c0c0, MVT::i32)); - - return DAG.getNode(ISD::BUILD_VECTOR, dl, MVT::v4i32, - &ShufBytes[0], ShufBytes.size()); -} - //! Lower byte immediate operations for v16i8 vectors: static SDValue LowerByteImmed(SDValue Op, SelectionDAG &DAG) { @@ -2291,26 +2151,24 @@ } if (ConstVec.getNode()->getOpcode() == ISD::BUILD_VECTOR) { - uint64_t VectorBits[2]; - uint64_t UndefBits[2]; - uint64_t SplatBits, SplatUndef; - int SplatSize; - - if (!GetConstantBuildVectorBits(ConstVec.getNode(), VectorBits, UndefBits) - && isConstantSplat(VectorBits, UndefBits, - VT.getVectorElementType().getSizeInBits(), - SplatBits, SplatUndef, SplatSize)) { - SDValue tcVec[16]; - SDValue tc = DAG.getTargetConstant(SplatBits & 0xff, MVT::i8); - const size_t tcVecSize = sizeof(tcVec) / sizeof(tcVec[0]); + BuildVectorSDNode *BCN = dyn_cast(ConstVec.getNode()); + assert(BCN != 0 && "Expected BuildVectorSDNode in SPU LowerByteImmed"); - // Turn the BUILD_VECTOR into a set of target constants: - for (size_t i = 0; i < tcVecSize; ++i) - tcVec[i] = tc; + APInt APSplatBits, APSplatUndef; + unsigned SplatBitSize; + bool HasAnyUndefs; + unsigned minSplatBits = VT.getVectorElementType().getSizeInBits(); + + if (BCN->isConstantSplat(APSplatBits, APSplatUndef, SplatBitSize, + HasAnyUndefs, minSplatBits) + && minSplatBits <= SplatBitSize) { + uint64_t SplatBits = APSplatBits.getZExtValue(); + SDValue tc = DAG.getTargetConstant(SplatBits & 0xff, MVT::i8); + SmallVector tcVec; + tcVec.assign(16, tc); return DAG.getNode(Op.getNode()->getOpcode(), dl, VT, Arg, - DAG.getNode(ISD::BUILD_VECTOR, dl, VT, - tcVec, tcVecSize)); + DAG.getNode(ISD::BUILD_VECTOR, dl, VT, &tcVec[0], tcVec.size())); } } @@ -2452,7 +2310,7 @@ return ExpandLibCall(LC, Op, DAG, false, Dummy, TLI); } - return Op; // return unmolested, legalized op + return SDValue(); } //! Lower ISD::SINT_TO_FP, ISD::UINT_TO_FP for i32 @@ -2478,7 +2336,7 @@ return ExpandLibCall(LC, Op, DAG, false, Dummy, TLI); } - return Op; // return unmolested, legalized + return SDValue(); } //! Lower ISD::SETCC Modified: llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h?rev=67067&r1=67066&r2=67067&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelLowering.h Mon Mar 16 20:15:45 2009 @@ -78,11 +78,9 @@ SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG, const SPUTargetMachine &TM); - SDValue LowerSplat_v2i64(MVT OpVT, SelectionDAG &DAG, uint64_t splat, + //! Simplify a MVT::v2i64 constant splat to CellSPU-ready form + SDValue LowerV2I64Splat(MVT OpVT, SelectionDAG &DAG, uint64_t splat, DebugLoc dl); - - SDValue getBorrowGenerateShufMask(SelectionDAG &DAG, DebugLoc dl); - SDValue getCarryGenerateShufMask(SelectionDAG &DAG, DebugLoc dl); } class SPUTargetMachine; // forward dec'l. Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp?rev=67067&r1=67066&r2=67067&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.cpp Mon Mar 16 20:15:45 2009 @@ -60,9 +60,6 @@ unsigned& SrcSR, unsigned& DstSR) const { SrcSR = DstSR = 0; // No sub-registers. - // Primarily, ORI and OR are generated by copyRegToReg. But, there are other - // cases where we can safely say that what's being done is really a move - // (see how PowerPC does this -- it's the model for this code too.) switch (MI.getOpcode()) { default: break; @@ -167,7 +164,7 @@ MI.getOperand(1).isReg() && "invalid SPU OR_ or LR instruction!"); if (MI.getOperand(0).getReg() == MI.getOperand(1).getReg()) { - sourceReg = MI.getOperand(0).getReg(); + sourceReg = MI.getOperand(1).getReg(); destReg = MI.getOperand(0).getReg(); return true; } Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td?rev=67067&r1=67066&r2=67067&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Mon Mar 16 20:15:45 2009 @@ -1258,10 +1258,9 @@ def fabs32: ANDInst<(outs R32FP:$rT), (ins R32FP:$rA, R32C:$rB), [/* Intentionally does not match a pattern */]>; - def fabs64: ANDInst<(outs R64FP:$rT), (ins R64FP:$rA, VECREG:$rB), + def fabs64: ANDInst<(outs R64FP:$rT), (ins R64FP:$rA, R64C:$rB), [/* Intentionally does not match a pattern */]>; - // Could use v4i32, but won't for clarity def fabsvec: ANDInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), [/* Intentionally does not match a pattern */]>; @@ -1288,10 +1287,11 @@ RRForm<0b10000011010, OOL, IOL, "andc\t$rT, $rA, $rB", IntegerOp, pattern>; -class ANDCVecInst: +class ANDCVecInst: ANDCInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - [(set (vectype VECREG:$rT), (and (vectype VECREG:$rA), - (vnot (vectype VECREG:$rB))))]>; + [(set (vectype VECREG:$rT), + (and (vectype VECREG:$rA), + (vnot_frag (vectype VECREG:$rB))))]>; class ANDCRegInst: ANDCInst<(outs rclass:$rT), (ins rclass:$rA, rclass:$rB), @@ -1309,6 +1309,9 @@ def r32: ANDCRegInst; def r16: ANDCRegInst; def r8: ANDCRegInst; + + // Sometimes, the xor pattern has a bitcast constant: + def v16i8_conv: ANDCVecInst; } defm ANDC : AndComplement; @@ -1480,6 +1483,17 @@ def f64: ORInst<(outs R64FP:$rT), (ins R64FP:$rA, R64FP:$rB), [/* no pattern */]>; + // OR instructions used to negate f32 and f64 quantities. + + def fneg32: ORInst<(outs R32FP:$rT), (ins R32FP:$rA, R32C:$rB), + [/* no pattern */]>; + + def fneg64: ORInst<(outs R64FP:$rT), (ins R64FP:$rA, R64C:$rB), + [/* no pattern */]>; + + def fnegvec: ORInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), + [/* no pattern, see fneg{32,64} */]>; + // scalar->vector promotion, prefslot2vec: def v16i8_i8: ORPromoteScalar; def v8i16_i16: ORPromoteScalar; @@ -1783,18 +1797,6 @@ def r32: XORRegInst; def r16: XORRegInst; def r8: XORRegInst; - - // Special forms for floating point instructions. - // fneg and fabs require bitwise logical ops to manipulate the sign bit. - - def fneg32: XORInst<(outs R32FP:$rT), (ins R32FP:$rA, R32C:$rB), - [/* no pattern */]>; - - def fneg64: XORInst<(outs R64FP:$rT), (ins R64FP:$rA, VECREG:$rB), - [/* no pattern */]>; - - def fnegvec: XORInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - [/* no pattern, see fneg{32,64} */]>; } defm XOR : BitwiseExclusiveOr; @@ -4239,33 +4241,36 @@ (fsub (fmul (v2f64 VECREG:$rA), (v2f64 VECREG:$rB)), (v2f64 VECREG:$rC)))]>; -// FNMS: - (a * b - c) +// DFNMS: - (a * b - c) // - (a * b) + c => c - (a * b) -def FNMSf64 : - RRForm<0b01111010110, (outs R64FP:$rT), - (ins R64FP:$rA, R64FP:$rB, R64FP:$rC), - "dfnms\t$rT, $rA, $rB", DPrecFP, - [(set R64FP:$rT, (fsub R64FP:$rC, (fmul R64FP:$rA, R64FP:$rB)))]>, + +class DFNMSInst pattern>: + RRForm<0b01111010110, OOL, IOL, "dfnms\t$rT, $rA, $rB", + DPrecFP, pattern>, RegConstraint<"$rC = $rT">, NoEncode<"$rC">; -def : Pat<(fneg (fsub (fmul R64FP:$rA, R64FP:$rB), R64FP:$rC)), - (FNMSf64 R64FP:$rA, R64FP:$rB, R64FP:$rC)>; +class DFNMSVecInst pattern>: + DFNMSInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB, VECREG:$rC), + pattern>; -def FNMSv2f64 : - RRForm<0b01111010110, (outs VECREG:$rT), - (ins VECREG:$rA, VECREG:$rB, VECREG:$rC), - "dfnms\t$rT, $rA, $rB", DPrecFP, - [(set (v2f64 VECREG:$rT), - (fsub (v2f64 VECREG:$rC), - (fmul (v2f64 VECREG:$rA), - (v2f64 VECREG:$rB))))]>, - RegConstraint<"$rC = $rT">, - NoEncode<"$rC">; +class DFNMSRegInst pattern>: + DFNMSInst<(outs R64FP:$rT), (ins R64FP:$rA, R64FP:$rB, R64FP:$rC), + pattern>; -def : Pat<(fneg (fsub (fmul (v2f64 VECREG:$rA), (v2f64 VECREG:$rB)), - (v2f64 VECREG:$rC))), - (FNMSv2f64 VECREG:$rA, VECREG:$rB, VECREG:$rC)>; +multiclass DFMultiplySubtract +{ + def v2f64 : DFNMSVecInst<[(set (v2f64 VECREG:$rT), + (fsub (v2f64 VECREG:$rC), + (fmul (v2f64 VECREG:$rA), + (v2f64 VECREG:$rB))))]>; + + def f64 : DFNMSRegInst<[(set R64FP:$rT, + (fsub R64FP:$rC, + (fmul R64FP:$rA, R64FP:$rB)))]>; +} + +defm DFNMS : DFMultiplySubtract; // - (a * b + c) // - (a * b) - c @@ -4293,35 +4298,21 @@ //===----------------------------------------------------------------------==// def : Pat<(fneg (v4f32 VECREG:$rA)), - (XORfnegvec (v4f32 VECREG:$rA), - (v4f32 (ILHUv4i32 0x8000)))>; + (ORfnegvec (v4f32 VECREG:$rA), + (v4f32 (ILHUv4i32 0x8000)))>; def : Pat<(fneg R32FP:$rA), - (XORfneg32 R32FP:$rA, (ILHUr32 0x8000))>; - -def : Pat<(fneg (v2f64 VECREG:$rA)), - (XORfnegvec (v2f64 VECREG:$rA), - (v2f64 (ANDBIv16i8 (FSMBIv16i8 0x8080), 0x80)))>; - -def : Pat<(fneg R64FP:$rA), - (XORfneg64 R64FP:$rA, - (ANDBIv16i8 (FSMBIv16i8 0x8080), 0x80))>; + (ORfneg32 R32FP:$rA, (ILHUr32 0x8000))>; // Floating point absolute value +// Note: f64 fabs is custom-selected. def : Pat<(fabs R32FP:$rA), (ANDfabs32 R32FP:$rA, (IOHLr32 (ILHUr32 0x7fff), 0xffff))>; def : Pat<(fabs (v4f32 VECREG:$rA)), (ANDfabsvec (v4f32 VECREG:$rA), - (v4f32 (ANDBIv16i8 (FSMBIv16i8 0xffff), 0x7f)))>; - -def : Pat<(fabs R64FP:$rA), - (ANDfabs64 R64FP:$rA, (ANDBIv16i8 (FSMBIv16i8 0xffff), 0x7f))>; - -def : Pat<(fabs (v2f64 VECREG:$rA)), - (ANDfabsvec (v2f64 VECREG:$rA), - (v2f64 (ANDBIv16i8 (FSMBIv16i8 0xffff), 0x7f)))>; + (IOHLv4i32 (ILHUv4i32 0x7fff), 0xffff))>; //===----------------------------------------------------------------------===// // Hint for branch instructions: Modified: llvm/trunk/test/CodeGen/CellSPU/2009-01-01-BrCond.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/2009-01-01-BrCond.ll?rev=67067&r1=67066&r2=67067&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/2009-01-01-BrCond.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/2009-01-01-BrCond.ll Mon Mar 16 20:15:45 2009 @@ -8,11 +8,11 @@ define double @__floatunsidf(i32 %arg_a) nounwind { entry: - %in = alloca %struct.fp_number_type, align 8 ; <%struct.fp_number_type*> [#uses=5] - %0 = getelementptr %struct.fp_number_type* %in, i32 0, i32 1 ; [#uses=1] + %in = alloca %struct.fp_number_type, align 16 + %0 = getelementptr %struct.fp_number_type* %in, i32 0, i32 1 store i32 0, i32* %0, align 4 - %1 = icmp eq i32 %arg_a, 0 ; [#uses=1] - %2 = getelementptr %struct.fp_number_type* %in, i32 0, i32 0 ; [#uses=2] + %1 = icmp eq i32 %arg_a, 0 + %2 = getelementptr %struct.fp_number_type* %in, i32 0, i32 0 br i1 %1, label %bb, label %bb1 bb: ; preds = %entry @@ -26,6 +26,6 @@ ret double 1.0 } -declare i32 @llvm.ctlz.i32(i32) nounwind readnone +; declare i32 @llvm.ctlz.i32(i32) nounwind readnone declare double @__pack_d(%struct.fp_number_type*) Modified: llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll?rev=67067&r1=67066&r2=67067&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll Mon Mar 16 20:15:45 2009 @@ -1,9 +1,7 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s -; RUN: grep fsmbi %t1.s | count 3 ; RUN: grep 32768 %t1.s | count 2 -; RUN: grep xor %t1.s | count 4 -; RUN: grep and %t1.s | count 5 -; RUN: grep andbi %t1.s | count 3 +; RUN: grep or %t1.s | count 4 +; RUN: grep and %t1.s | count 2 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128" target triple = "spu" From evan.cheng at apple.com Mon Mar 16 20:23:09 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 17 Mar 2009 01:23:09 -0000 Subject: [llvm-commits] [llvm] r67068 - in /llvm/trunk: lib/CodeGen/Spiller.cpp lib/CodeGen/Spiller.h test/CodeGen/X86/2009-03-16-SpillerBug.ll Message-ID: <200903170123.n2H1N9tX002333@zion.cs.uiuc.edu> Author: evancheng Date: Mon Mar 16 20:23:09 2009 New Revision: 67068 URL: http://llvm.org/viewvc/llvm-project?rev=67068&view=rev Log: Spiller may unfold load / mod / store instructions as an optimization when the would be loaded value is available in a register. It needs to check if it's legal to clobber the register. Also, the register can contain values of multiple spill slots, make sure to check all instead of just the one being unfolded. Added: llvm/trunk/test/CodeGen/X86/2009-03-16-SpillerBug.ll Modified: llvm/trunk/lib/CodeGen/Spiller.cpp llvm/trunk/lib/CodeGen/Spiller.h Modified: llvm/trunk/lib/CodeGen/Spiller.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Spiller.cpp?rev=67068&r1=67067&r2=67068&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/Spiller.cpp (original) +++ llvm/trunk/lib/CodeGen/Spiller.cpp Mon Mar 16 20:23:09 2009 @@ -28,6 +28,7 @@ STATISTIC(NumLoads , "Number of loads added"); STATISTIC(NumReused , "Number of values reused"); STATISTIC(NumDCE , "Number of copies elided"); +STATISTIC(NumSUnfold , "Number of stores unfolded"); namespace { enum SpillerName { simple, local }; @@ -1172,8 +1173,8 @@ // Okay, we have a two address operand. We can reuse this physreg as // long as we are allowed to clobber the value and there isn't an // earlier def that has already clobbered the physreg. - CanReuse = Spills.canClobberPhysReg(ReuseSlot) && - !ReusedOperands.isClobbered(PhysReg); + CanReuse = !ReusedOperands.isClobbered(PhysReg) && + Spills.canClobberPhysReg(PhysReg); } if (CanReuse) { @@ -1408,6 +1409,7 @@ DOUT << "Removing now-noop copy: " << MI; // Unset last kill since it's being reused. InvalidateKill(InReg, RegKills, KillOps); + Spills.disallowClobberPhysReg(InReg); } InvalidateKills(MI, RegKills, KillOps); @@ -1446,6 +1448,8 @@ // the value and there isn't an earlier def that has already clobbered // the physreg. if (PhysReg && + !ReusedOperands.isClobbered(PhysReg) && + Spills.canClobberPhysReg(PhysReg) && !TII->isStoreToStackSlot(&MI, SS)) { // Not profitable! MachineOperand *KillOpnd = DeadStore->findRegisterUseOperand(PhysReg, true); @@ -1453,7 +1457,7 @@ // super-register is needed below. if (KillOpnd && !KillOpnd->getSubReg() && TII->unfoldMemoryOperand(MF, &MI, PhysReg, false, true,NewMIs)){ - MBB.insert(MII, NewMIs[0]); + MBB.insert(MII, NewMIs[0]); NewStore = NewMIs[1]; MBB.insert(MII, NewStore); VRM.addSpillSlotUse(SS, NewStore); @@ -1465,6 +1469,7 @@ --NextMII; // backtrack to the unfolded instruction. BackTracked = true; isDead = true; + ++NumSUnfold; } } } @@ -1519,7 +1524,7 @@ // If the stack slot value was previously available in some other // register, change it now. Otherwise, make the register // available in PhysReg. - Spills.addAvailable(StackSlot, SrcReg, false/*!clobber*/); + Spills.addAvailable(StackSlot, SrcReg, MI.killsRegister(SrcReg)); } } } Modified: llvm/trunk/lib/CodeGen/Spiller.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Spiller.h?rev=67068&r1=67067&r2=67068&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/Spiller.h (original) +++ llvm/trunk/lib/CodeGen/Spiller.h Mon Mar 16 20:23:09 2009 @@ -127,15 +127,31 @@ DOUT << " in physreg " << TRI->getName(Reg) << "\n"; } - /// canClobberPhysReg - Return true if the spiller is allowed to change the - /// value of the specified stackslot register if it desires. The specified - /// stack slot must be available in a physreg for this query to make sense. - bool canClobberPhysReg(int SlotOrReMat) const { + /// canClobberPhysRegForSS - Return true if the spiller is allowed to change + /// the value of the specified stackslot register if it desires. The + /// specified stack slot must be available in a physreg for this query to + /// make sense. + bool canClobberPhysRegForSS(int SlotOrReMat) const { assert(SpillSlotsOrReMatsAvailable.count(SlotOrReMat) && "Value not available!"); return SpillSlotsOrReMatsAvailable.find(SlotOrReMat)->second & 1; } + /// canClobberPhysReg - Return true if the spiller is allowed to clobber the + /// physical register where values for some stack slot(s) might be + /// available. + bool canClobberPhysReg(unsigned PhysReg) const { + std::multimap::const_iterator I = + PhysRegsAvailable.lower_bound(PhysReg); + while (I != PhysRegsAvailable.end() && I->first == PhysReg) { + int SlotOrReMat = I->second; + I++; + if (!canClobberPhysRegForSS(SlotOrReMat)) + return false; + } + return true; + } + /// disallowClobberPhysReg - Unset the CanClobber bit of the specified /// stackslot register. The register is still available but is no longer /// allowed to be modifed. @@ -305,4 +321,4 @@ }; } -#endif \ No newline at end of file +#endif Added: llvm/trunk/test/CodeGen/X86/2009-03-16-SpillerBug.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-16-SpillerBug.ll?rev=67068&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2009-03-16-SpillerBug.ll (added) +++ llvm/trunk/test/CodeGen/X86/2009-03-16-SpillerBug.ll Mon Mar 16 20:23:09 2009 @@ -0,0 +1,167 @@ +; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin -stats |& grep spiller | not grep {stores unfolded} +; rdar://6682365 + +; Do not clobber a register if another spill slot is available in it and it's marked "do not clobber". + + %struct.CAST_KEY = type { [32 x i32], i32 } + at CAST_S_table0 = constant [2 x i32] [i32 821772500, i32 -1616838901], align 32 ; <[2 x i32]*> [#uses=0] + at CAST_S_table4 = constant [2 x i32] [i32 2127105028, i32 745436345], align 32 ; <[2 x i32]*> [#uses=6] + at CAST_S_table5 = constant [2 x i32] [i32 -151351395, i32 749497569], align 32 ; <[2 x i32]*> [#uses=5] + at CAST_S_table6 = constant [2 x i32] [i32 -2048901095, i32 858518887], align 32 ; <[2 x i32]*> [#uses=4] + at CAST_S_table7 = constant [2 x i32] [i32 -501862387, i32 -1143078916], align 32 ; <[2 x i32]*> [#uses=5] + at CAST_S_table1 = constant [2 x i32] [i32 522195092, i32 -284448933], align 32 ; <[2 x i32]*> [#uses=0] + at CAST_S_table2 = constant [2 x i32] [i32 -1913667008, i32 637164959], align 32 ; <[2 x i32]*> [#uses=0] + at CAST_S_table3 = constant [2 x i32] [i32 -1649212384, i32 532081118], align 32 ; <[2 x i32]*> [#uses=0] + +define void @CAST_set_key(%struct.CAST_KEY* nocapture %key, i32 %len, i8* nocapture %data) nounwind ssp { +bb1.thread: + %0 = getelementptr [16 x i32]* null, i32 0, i32 5 ; [#uses=1] + %1 = getelementptr [16 x i32]* null, i32 0, i32 8 ; [#uses=1] + %2 = load i32* null, align 4 ; [#uses=1] + %3 = shl i32 %2, 24 ; [#uses=1] + %4 = load i32* null, align 4 ; [#uses=1] + %5 = shl i32 %4, 16 ; [#uses=1] + %6 = load i32* null, align 4 ; [#uses=1] + %7 = or i32 %5, %3 ; [#uses=1] + %8 = or i32 %7, %6 ; [#uses=1] + %9 = or i32 %8, 0 ; [#uses=1] + %10 = load i32* null, align 4 ; [#uses=1] + %11 = shl i32 %10, 24 ; [#uses=1] + %12 = load i32* %0, align 4 ; [#uses=1] + %13 = shl i32 %12, 16 ; [#uses=1] + %14 = load i32* null, align 4 ; [#uses=1] + %15 = or i32 %13, %11 ; [#uses=1] + %16 = or i32 %15, %14 ; [#uses=1] + %17 = or i32 %16, 0 ; [#uses=1] + br label %bb11 + +bb11: ; preds = %bb11, %bb1.thread + %18 = phi i32 [ %110, %bb11 ], [ 0, %bb1.thread ] ; [#uses=1] + %19 = phi i32 [ %112, %bb11 ], [ 0, %bb1.thread ] ; [#uses=0] + %20 = phi i32 [ 0, %bb11 ], [ 0, %bb1.thread ] ; [#uses=0] + %21 = phi i32 [ %113, %bb11 ], [ 0, %bb1.thread ] ; [#uses=1] + %X.0.0 = phi i32 [ %9, %bb1.thread ], [ %92, %bb11 ] ; [#uses=0] + %X.1.0 = phi i32 [ %17, %bb1.thread ], [ 0, %bb11 ] ; [#uses=0] + %22 = getelementptr [2 x i32]* @CAST_S_table6, i32 0, i32 %21 ; [#uses=0] + %23 = getelementptr [2 x i32]* @CAST_S_table5, i32 0, i32 %18 ; [#uses=0] + %24 = load i32* null, align 4 ; [#uses=1] + %25 = xor i32 0, %24 ; [#uses=1] + %26 = xor i32 %25, 0 ; [#uses=1] + %27 = xor i32 %26, 0 ; [#uses=4] + %28 = and i32 %27, 255 ; [#uses=2] + %29 = lshr i32 %27, 8 ; [#uses=1] + %30 = and i32 %29, 255 ; [#uses=2] + %31 = lshr i32 %27, 16 ; [#uses=1] + %32 = and i32 %31, 255 ; [#uses=1] + %33 = getelementptr [2 x i32]* @CAST_S_table4, i32 0, i32 %28 ; [#uses=1] + %34 = load i32* %33, align 4 ; [#uses=2] + %35 = getelementptr [2 x i32]* @CAST_S_table5, i32 0, i32 %30 ; [#uses=1] + %36 = load i32* %35, align 4 ; [#uses=2] + %37 = xor i32 %34, 0 ; [#uses=1] + %38 = xor i32 %37, %36 ; [#uses=1] + %39 = xor i32 %38, 0 ; [#uses=1] + %40 = xor i32 %39, 0 ; [#uses=1] + %41 = xor i32 %40, 0 ; [#uses=3] + %42 = lshr i32 %41, 8 ; [#uses=1] + %43 = and i32 %42, 255 ; [#uses=2] + %44 = lshr i32 %41, 16 ; [#uses=1] + %45 = and i32 %44, 255 ; [#uses=1] + %46 = getelementptr [2 x i32]* @CAST_S_table4, i32 0, i32 %43 ; [#uses=1] + %47 = load i32* %46, align 4 ; [#uses=1] + %48 = load i32* null, align 4 ; [#uses=1] + %49 = xor i32 %47, 0 ; [#uses=1] + %50 = xor i32 %49, %48 ; [#uses=1] + %51 = xor i32 %50, 0 ; [#uses=1] + %52 = xor i32 %51, 0 ; [#uses=1] + %53 = xor i32 %52, 0 ; [#uses=2] + %54 = and i32 %53, 255 ; [#uses=1] + %55 = lshr i32 %53, 24 ; [#uses=1] + %56 = getelementptr [2 x i32]* @CAST_S_table6, i32 0, i32 %55 ; [#uses=1] + %57 = load i32* %56, align 4 ; [#uses=1] + %58 = xor i32 0, %57 ; [#uses=1] + %59 = xor i32 %58, 0 ; [#uses=1] + %60 = xor i32 %59, 0 ; [#uses=1] + store i32 %60, i32* null, align 4 + %61 = getelementptr [2 x i32]* @CAST_S_table4, i32 0, i32 0 ; [#uses=1] + %62 = load i32* %61, align 4 ; [#uses=1] + %63 = getelementptr [2 x i32]* @CAST_S_table7, i32 0, i32 %54 ; [#uses=1] + %64 = load i32* %63, align 4 ; [#uses=1] + %65 = xor i32 0, %64 ; [#uses=1] + %66 = xor i32 %65, 0 ; [#uses=1] + store i32 %66, i32* null, align 4 + %67 = getelementptr [2 x i32]* @CAST_S_table7, i32 0, i32 %45 ; [#uses=1] + %68 = load i32* %67, align 4 ; [#uses=1] + %69 = xor i32 %36, %34 ; [#uses=1] + %70 = xor i32 %69, 0 ; [#uses=1] + %71 = xor i32 %70, %68 ; [#uses=1] + %72 = xor i32 %71, 0 ; [#uses=1] + store i32 %72, i32* null, align 4 + %73 = getelementptr [2 x i32]* @CAST_S_table4, i32 0, i32 %32 ; [#uses=1] + %74 = load i32* %73, align 4 ; [#uses=2] + %75 = load i32* null, align 4 ; [#uses=1] + %76 = getelementptr [2 x i32]* @CAST_S_table6, i32 0, i32 %43 ; [#uses=1] + %77 = load i32* %76, align 4 ; [#uses=1] + %78 = getelementptr [2 x i32]* @CAST_S_table7, i32 0, i32 0 ; [#uses=1] + %79 = load i32* %78, align 4 ; [#uses=1] + %80 = getelementptr [2 x i32]* @CAST_S_table7, i32 0, i32 %30 ; [#uses=1] + %81 = load i32* %80, align 4 ; [#uses=2] + %82 = xor i32 %75, %74 ; [#uses=1] + %83 = xor i32 %82, %77 ; [#uses=1] + %84 = xor i32 %83, %79 ; [#uses=1] + %85 = xor i32 %84, %81 ; [#uses=1] + store i32 %85, i32* null, align 4 + %86 = getelementptr [2 x i32]* @CAST_S_table5, i32 0, i32 %28 ; [#uses=1] + %87 = load i32* %86, align 4 ; [#uses=1] + %88 = xor i32 %74, %41 ; [#uses=1] + %89 = xor i32 %88, %87 ; [#uses=1] + %90 = xor i32 %89, 0 ; [#uses=1] + %91 = xor i32 %90, %81 ; [#uses=1] + %92 = xor i32 %91, 0 ; [#uses=3] + %93 = lshr i32 %92, 16 ; [#uses=1] + %94 = and i32 %93, 255 ; [#uses=1] + store i32 %94, i32* null, align 4 + %95 = lshr i32 %92, 24 ; [#uses=2] + %96 = getelementptr [2 x i32]* @CAST_S_table4, i32 0, i32 %95 ; [#uses=1] + %97 = load i32* %96, align 4 ; [#uses=1] + %98 = getelementptr [2 x i32]* @CAST_S_table5, i32 0, i32 0 ; [#uses=1] + %99 = load i32* %98, align 4 ; [#uses=1] + %100 = load i32* null, align 4 ; [#uses=0] + %101 = xor i32 %97, 0 ; [#uses=1] + %102 = xor i32 %101, %99 ; [#uses=1] + %103 = xor i32 %102, 0 ; [#uses=1] + %104 = xor i32 %103, 0 ; [#uses=0] + store i32 0, i32* null, align 4 + %105 = xor i32 0, %27 ; [#uses=1] + %106 = xor i32 %105, 0 ; [#uses=1] + %107 = xor i32 %106, 0 ; [#uses=1] + %108 = xor i32 %107, 0 ; [#uses=1] + %109 = xor i32 %108, %62 ; [#uses=3] + %110 = and i32 %109, 255 ; [#uses=1] + %111 = lshr i32 %109, 16 ; [#uses=1] + %112 = and i32 %111, 255 ; [#uses=1] + %113 = lshr i32 %109, 24 ; [#uses=3] + store i32 %113, i32* %1, align 4 + %114 = load i32* null, align 4 ; [#uses=1] + %115 = xor i32 0, %114 ; [#uses=1] + %116 = xor i32 %115, 0 ; [#uses=1] + %117 = xor i32 %116, 0 ; [#uses=1] + %K.0.sum42 = or i32 0, 12 ; [#uses=1] + %118 = getelementptr [32 x i32]* null, i32 0, i32 %K.0.sum42 ; [#uses=1] + store i32 %117, i32* %118, align 4 + %119 = getelementptr [2 x i32]* @CAST_S_table5, i32 0, i32 0 ; [#uses=0] + store i32 0, i32* null, align 4 + %120 = getelementptr [2 x i32]* @CAST_S_table6, i32 0, i32 %113 ; [#uses=1] + %121 = load i32* %120, align 4 ; [#uses=1] + %122 = xor i32 0, %121 ; [#uses=1] + store i32 %122, i32* null, align 4 + %123 = getelementptr [2 x i32]* @CAST_S_table4, i32 0, i32 0 ; [#uses=1] + %124 = load i32* %123, align 4 ; [#uses=1] + %125 = getelementptr [2 x i32]* @CAST_S_table7, i32 0, i32 %95 ; [#uses=1] + %126 = load i32* %125, align 4 ; [#uses=1] + %127 = xor i32 0, %124 ; [#uses=1] + %128 = xor i32 %127, 0 ; [#uses=1] + %129 = xor i32 %128, %126 ; [#uses=1] + %130 = xor i32 %129, 0 ; [#uses=1] + store i32 %130, i32* null, align 4 + br label %bb11 +} From daniel at zuster.org Mon Mar 16 20:36:56 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Tue, 17 Mar 2009 01:36:56 -0000 Subject: [llvm-commits] [llvm] r67069 - /llvm/trunk/lib/Support/raw_ostream.cpp Message-ID: <200903170136.n2H1auhk002821@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Mar 16 20:36:56 2009 New Revision: 67069 URL: http://llvm.org/viewvc/llvm-project?rev=67069&view=rev Log: raw_ostream: Put all exceptional conditions in raw_ostream::write under a single branch. Also, add a FIXME for formatted output. Modified: llvm/trunk/lib/Support/raw_ostream.cpp Modified: llvm/trunk/lib/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=67069&r1=67068&r2=67069&view=diff ============================================================================== --- llvm/trunk/lib/Support/raw_ostream.cpp (original) +++ llvm/trunk/lib/Support/raw_ostream.cpp Mon Mar 16 20:36:56 2009 @@ -123,30 +123,36 @@ } raw_ostream &raw_ostream::write(unsigned char C) { - if (Unbuffered) { - write_impl(reinterpret_cast(&C), 1); - return *this; + // Group exceptional cases into a single branch. + if (OutBufCur >= OutBufEnd) { + if (Unbuffered) { + write_impl(reinterpret_cast(&C), 1); + return *this; + } + + if (!OutBufStart) + SetBufferSize(); + else + flush_nonempty(); } - if (!OutBufStart) - SetBufferSize(); - else if (OutBufCur >= OutBufEnd) - flush_nonempty(); - *OutBufCur++ = C; return *this; } raw_ostream &raw_ostream::write(const char *Ptr, unsigned Size) { - if (Unbuffered) { - write_impl(Ptr, Size); - return *this; - } + // Group exceptional cases into a single branch. + if (OutBufCur+Size > OutBufEnd) { + if (Unbuffered) { + write_impl(Ptr, Size); + return *this; + } - if (!OutBufStart) - SetBufferSize(); - else if (OutBufCur+Size > OutBufEnd) - flush_nonempty(); + if (!OutBufStart) + SetBufferSize(); + else + flush_nonempty(); + } // Handle short strings specially, memcpy isn't very good at very short // strings. @@ -176,8 +182,14 @@ // Formatted output. raw_ostream &raw_ostream::operator<<(const format_object_base &Fmt) { - // If we have more than a few bytes left in our output buffer, try formatting - // directly onto its end. + // If we have more than a few bytes left in our output buffer, try + // formatting directly onto its end. + // + // FIXME: This test is a bit silly, since if we don't have enough + // space in the buffer we will have to flush the formatted output + // anyway. We should just flush upfront in such cases, and use the + // whole buffer as our scratch pad. Note, however, that this case is + // also necessary for correctness on unbuffered streams. unsigned NextBufferSize = 127; if (OutBufEnd-OutBufCur > 3) { unsigned BufferBytesLeft = OutBufEnd-OutBufCur; From daniel at zuster.org Mon Mar 16 20:53:36 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Tue, 17 Mar 2009 01:53:36 -0000 Subject: [llvm-commits] [llvm] r67070 - /llvm/trunk/include/llvm/Support/raw_ostream.h Message-ID: <200903170153.n2H1rbYW003324@zion.cs.uiuc.edu> Author: ddunbar Date: Mon Mar 16 20:53:36 2009 New Revision: 67070 URL: http://llvm.org/viewvc/llvm-project?rev=67070&view=rev Log: raw_ostream: Return '*this' explicitly (instead of implicitly via write) to expose more alias information. Modified: llvm/trunk/include/llvm/Support/raw_ostream.h Modified: llvm/trunk/include/llvm/Support/raw_ostream.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=67070&r1=67069&r2=67070&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/raw_ostream.h (original) +++ llvm/trunk/include/llvm/Support/raw_ostream.h Mon Mar 16 20:53:36 2009 @@ -119,11 +119,13 @@ } raw_ostream &operator<<(const char *Str) { - return write(Str, strlen(Str)); + write(Str, strlen(Str)); + return *this; } raw_ostream &operator<<(const std::string& Str) { - return write(Str.data(), Str.length()); + write(Str.data(), Str.length()); + return *this; } raw_ostream &operator<<(unsigned long N); @@ -132,15 +134,18 @@ raw_ostream &operator<<(long long N); raw_ostream &operator<<(const void *P); raw_ostream &operator<<(unsigned int N) { - return this->operator<<(static_cast(N)); + this->operator<<(static_cast(N)); + return *this; } raw_ostream &operator<<(int N) { - return this->operator<<(static_cast(N)); + this->operator<<(static_cast(N)); + return *this; } raw_ostream &operator<<(double N) { - return this->operator<<(ftostr(N)); + this->operator<<(ftostr(N)); + return *this; } raw_ostream &write(unsigned char C); From daniel at zuster.org Mon Mar 16 21:03:09 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Mon, 16 Mar 2009 19:03:09 -0700 Subject: [llvm-commits] [llvm] r66827 - /llvm/trunk/include/llvm/Support/raw_ostream.h In-Reply-To: <39A2A5FE-B36E-4526-8588-97CA50A71553@apple.com> References: <200903122202.n2CM2kKb018031@zion.cs.uiuc.edu> <39A2A5FE-B36E-4526-8588-97CA50A71553@apple.com> Message-ID: <6a8523d60903161903v193b4f65lfff442742de940a4@mail.gmail.com> This should be addressed. Look better? - Daniel On Thu, Mar 12, 2009 at 3:50 PM, Chris Lattner wrote: > On Mar 12, 2009, at 3:02 PM, Daniel Dunbar wrote: > > URL: http://llvm.org/viewvc/llvm-project?rev=66827&view=rev > > Log: > > raw_ostream: unbuffered streams weren't being immediately flushed on > > single character writes. > > Ack, no! Please don't do this. The entire point of these is that > they are supposed to be small and inline. If you want to do this, > please use a body like: > > > if (OutBufCur >= OutBufEnd) > return output_char_slow(C); > *OutBufCur++ = C; > return *this; > } > > And arrange for the "OutBufCur >= OutBufEnd" condition to always be > true for the stderr case (by not having a buffer). > > -Chris > > > > > > > Modified: > > llvm/trunk/include/llvm/Support/raw_ostream.h > > > > Modified: llvm/trunk/include/llvm/Support/raw_ostream.h > > URL: > http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=66827&r1=66826&r2=66827&view=diff > > > > = > > = > > = > > = > > = > > = > > = > > = > > ====================================================================== > > --- llvm/trunk/include/llvm/Support/raw_ostream.h (original) > > +++ llvm/trunk/include/llvm/Support/raw_ostream.h Thu Mar 12 > > 17:02:44 2009 > > @@ -84,6 +84,8 @@ > > if (OutBufCur >= OutBufEnd) > > flush_impl(); > > *OutBufCur++ = C; > > + if (Unbuffered) > > + flush_impl(); > > return *this; > > } > > > > @@ -91,6 +93,8 @@ > > if (OutBufCur >= OutBufEnd) > > flush_impl(); > > *OutBufCur++ = C; > > + if (Unbuffered) > > + flush_impl(); > > return *this; > > } > > > > @@ -98,6 +102,8 @@ > > if (OutBufCur >= OutBufEnd) > > flush_impl(); > > *OutBufCur++ = C; > > + if (Unbuffered) > > + flush_impl(); > > return *this; > > } > > > > > > > > _______________________________________________ > > llvm-commits mailing list > > llvm-commits at cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090316/ae40f8bb/attachment.html From gohman at apple.com Mon Mar 16 21:17:27 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 17 Mar 2009 02:17:27 -0000 Subject: [llvm-commits] [llvm] r67071 - in /llvm/trunk: lib/Target/X86/X86TargetAsmInfo.cpp test/CodeGen/X86/bswap-inline-asm.ll Message-ID: <200903170217.n2H2HRrx004110@zion.cs.uiuc.edu> Author: djg Date: Mon Mar 16 21:17:27 2009 New Revision: 67071 URL: http://llvm.org/viewvc/llvm-project?rev=67071&view=rev Log: Recognize "bswapq" as an alternate spelling for the bswap instruction. Added: llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=67071&r1=67070&r2=67071&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Mar 16 21:17:27 2009 @@ -411,8 +411,8 @@ // bswap $0 if (AsmPieces.size() == 2 && - AsmPieces[0] == "bswap" && (AsmPieces[1] == "$0" || - AsmPieces[1] == "${0:q}")) { + (AsmPieces[0] == "bswap" || AsmPieces[0] == "bswapq") && + (AsmPieces[1] == "$0" || AsmPieces[1] == "${0:q}")) { // No need to check constraints, nothing other than the equivalent of // "=r,0" would be valid here. return LowerToBSwap(CI); Added: llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll?rev=67071&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll (added) +++ llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll Mon Mar 16 21:17:27 2009 @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llc -march=x86-64 > %t +; RUN: not grep APP %t +; RUN: grep bswapq %t | count 2 + +define i64 @foo(i64 %x) nounwind { + %asmtmp = tail call i64 asm "bswap $0", "=r,0,~{dirflag},~{fpsr},~{flags}"(i64 %x) nounwind + ret i64 %asmtmp +} +define i64 @bar(i64 %x) nounwind { + %asmtmp = tail call i64 asm "bswapq ${0:q}", "=r,0,~{dirflag},~{fpsr},~{flags}"(i64 %x) nounwind + ret i64 %asmtmp +} From gohman at apple.com Mon Mar 16 21:45:40 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 17 Mar 2009 02:45:40 -0000 Subject: [llvm-commits] [llvm] r67072 - in /llvm/trunk: lib/Target/X86/X86TargetAsmInfo.cpp test/CodeGen/X86/bswap-inline-asm.ll Message-ID: <200903170245.n2H2jeci005068@zion.cs.uiuc.edu> Author: djg Date: Mon Mar 16 21:45:40 2009 New Revision: 67072 URL: http://llvm.org/viewvc/llvm-project?rev=67072&view=rev Log: Recognize bswapl as bswap too. Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=67072&r1=67071&r2=67072&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Mar 16 21:45:40 2009 @@ -411,8 +411,11 @@ // bswap $0 if (AsmPieces.size() == 2 && - (AsmPieces[0] == "bswap" || AsmPieces[0] == "bswapq") && - (AsmPieces[1] == "$0" || AsmPieces[1] == "${0:q}")) { + (AsmPieces[0] == "bswap" || + AsmPieces[0] == "bswapq" || + AsmPieces[0] == "bswapl") && + (AsmPieces[1] == "$0" || + AsmPieces[1] == "${0:q}")) { // No need to check constraints, nothing other than the equivalent of // "=r,0" would be valid here. return LowerToBSwap(CI); Modified: llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll?rev=67072&r1=67071&r2=67072&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll (original) +++ llvm/trunk/test/CodeGen/X86/bswap-inline-asm.ll Mon Mar 16 21:45:40 2009 @@ -1,6 +1,7 @@ ; RUN: llvm-as < %s | llc -march=x86-64 > %t ; RUN: not grep APP %t ; RUN: grep bswapq %t | count 2 +; RUN: grep bswapl %t | count 1 define i64 @foo(i64 %x) nounwind { %asmtmp = tail call i64 asm "bswap $0", "=r,0,~{dirflag},~{fpsr},~{flags}"(i64 %x) nounwind @@ -10,3 +11,7 @@ %asmtmp = tail call i64 asm "bswapq ${0:q}", "=r,0,~{dirflag},~{fpsr},~{flags}"(i64 %x) nounwind ret i64 %asmtmp } +define i32 @pen(i32 %x) nounwind { + %asmtmp = tail call i32 asm "bswapl ${0:q}", "=r,0,~{dirflag},~{fpsr},~{flags}"(i32 %x) nounwind + ret i32 %asmtmp +} From nicholas at mxc.ca Tue Mar 17 00:29:59 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 16 Mar 2009 22:29:59 -0700 Subject: [llvm-commits] embedded metadata preview In-Reply-To: References: <49BB6E93.9050802@mxc.ca> Message-ID: <49BF3557.8050409@mxc.ca> Dan Gohman wrote: > Hi Nick, > > Here are a few review comments. > > > Index: lib/Bitcode/Writer/BitcodeWriter.cpp > > =================================================================== > > --- lib/Bitcode/Writer/BitcodeWriter.cpp (revision 66999) > > +++ lib/Bitcode/Writer/BitcodeWriter.cpp (working copy) > > @@ -677,6 +677,17 @@ > > Record.push_back(CE->getPredicate()); > > break; > > } > > + } else if (const MDString *S = dyn_cast(C)) { > > + Code = bitc::CST_CODE_MDSTRING; > > + Record.push_back(S->length()); > > + for (unsigned i = 0, e = S->length(); i != e; ++i) > > + Record.push_back(S->begin()[i]); > > It seems pretty inefficient to put each char in a uint64_t. > Forgive me for prematurely optimizing :-). No that's fine, I just copied this out of the handling for strings in inline-asm under the assumption that it must be fine. I tried adding "AbbrevToUse = String8Abbrev;" here but that causes a crash ("Invalid abbrev for record"). I'm not really familiar with this code, do you know how it's supposed to work? (If not I'm sure I can figure it out...) > > > Index: lib/Bitcode/Reader/BitcodeReader.cpp > > =================================================================== > > --- lib/Bitcode/Reader/BitcodeReader.cpp (revision 66999) > > +++ lib/Bitcode/Reader/BitcodeReader.cpp (working copy) > > @@ -283,10 +283,12 @@ > > UserCS->getType()->isPacked()); > > } else if (isa(UserC)) { > > NewC = ConstantVector::get(&NewOps[0], NewOps.size()); > > - } else { > > - // Must be a constant expression. > > + } else if (isa(UserC)) { > > NewC = cast(UserC)- > >getWithOperands(&NewOps[0], > > > NewOps.size()); > > + } else { > > + // Must be a metadata node. > > + NewC = MDNode::get(&NewOps[0], NewOps.size()); > > } > > > > Can you add an assert(isa) here to verify the assertion in > the comment? Done. > > > Index: docs/LangRef.html > > =================================================================== > > --- docs/LangRef.html (revision 66999) > > +++ docs/LangRef.html (working copy) > > > @@ -1847,6 +1848,14 @@ > > large arrays) and is always exactly equivalent to using explicit > zero > > initializers. > >
    > > + > > +
    Metadata node
    > > + > > +
    A metadata node is a structure-like constant with the type > of an empty > > + struct. For example: "{ } !{ i32 0, { } !"test" }". > Unlike other > > + constants that are meant to be interpreted as part of the > instruction stream, > > + metadata is a place to attach additional information such as > debug info. > > It would be helpful to mention that this is also expected to be used for > encoding information that will be used by optimizations. I'm actually thinking of removing any mention of them here and only talking about them under the "Embedded Metadata" section. Thoughts? I added this as the last paragraph in that section: "Optimizations may rely on metadata to provide additional information about the program that isn't available in the instructions, or that isn't easily computable. Similarly, the code generator may expect a certain metadata format to be used to express debugging information." Close enough? :) > MDString and MDNode have protected constructors. Do you anticipate > these classes having subclasses? If so, what would they be like? Nope. Again, this is just copied from other classes I see around. > Why do MDString and MDNode inherit from Constant instead of, say, > User? I > see that ConstantLastVal is moved to include MDStringVal and MDNodeVal, > presumably for the same reason. I tried that initially, where MDNode was a User and MDString was a Value. In practise, they seem to have semantics much closer to that of Constants; they're uniqued / pointer comparable and they're global. The point where it really made a difference was in the .ll parser, switching them over to being Constant made the parser changes much simpler. Nick > Dan > > On Mar 14, 2009, at 1:45 AM, Nick Lewycky wrote: > >> I took a stab at implementing embedded metadata. The idea is to >> allow LLVM's user to attach meaningful data to the instruction >> stream that isn't really relevant to the execution of the >> instructions. This comes from Chris' notes: >> >> http://nondot.org/sabre/LLVMNotes/EmbeddedMetadata.txt >> >> which I deviated a little. The major thing missing from this patch >> is any verifier support. My current plan is to add support to the >> verifier for ensuring that MDNode and MDString are only used from a) >> initializers to globals named starting with "llvm." b) calls to >> intrinsic functions, then commit it. >> >> The attached patch implements MDString and MDNode as new types of >> Constant, .ll/.bc reader/writer support and a LangRef update. I'd >> appreciate any review comments! >> >> Nick >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From wangmp at apple.com Tue Mar 17 01:33:10 2009 From: wangmp at apple.com (Mon P Wang) Date: Tue, 17 Mar 2009 06:33:10 -0000 Subject: [llvm-commits] [llvm] r67076 - in /llvm/trunk: lib/CodeGen/SelectionDAG/DAGCombiner.cpp test/CodeGen/X86/dagcombine-buildvector.ll Message-ID: <200903170633.n2H6XBJv013531@zion.cs.uiuc.edu> Author: wangmp Date: Tue Mar 17 01:33:10 2009 New Revision: 67076 URL: http://llvm.org/viewvc/llvm-project?rev=67076&view=rev Log: Fix a problem with DAGCombine where we were building an illegal build vector shuffle mask. Forced the mask to be built using i32. Note: this will be irrelevant once vector_shuffle no longer takes a build vector for the shuffle mask. Added: llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll 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=67076&r1=67075&r2=67076&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue Mar 17 01:33:10 2009 @@ -5164,30 +5164,35 @@ } // If everything is good, we can make a shuffle operation. + MVT IndexVT = MVT::i32; if (VecIn1.getNode()) { SmallVector BuildVecIndices; for (unsigned i = 0; i != NumInScalars; ++i) { if (N->getOperand(i).getOpcode() == ISD::UNDEF) { - BuildVecIndices.push_back(DAG.getUNDEF(TLI.getPointerTy())); + BuildVecIndices.push_back(DAG.getUNDEF(IndexVT)); continue; } SDValue Extract = N->getOperand(i); // If extracting from the first vector, just use the index directly. + SDValue ExtVal = Extract.getOperand(1); if (Extract.getOperand(0) == VecIn1) { - BuildVecIndices.push_back(Extract.getOperand(1)); + if (ExtVal.getValueType() == IndexVT) + BuildVecIndices.push_back(ExtVal); + else { + unsigned Idx = cast(ExtVal)->getZExtValue(); + BuildVecIndices.push_back(DAG.getConstant(Idx, IndexVT)); + } continue; } // Otherwise, use InIdx + VecSize - unsigned Idx = - cast(Extract.getOperand(1))->getZExtValue(); - BuildVecIndices.push_back(DAG.getIntPtrConstant(Idx+NumInScalars)); + unsigned Idx = cast(ExtVal)->getZExtValue(); + BuildVecIndices.push_back(DAG.getConstant(Idx+NumInScalars, IndexVT)); } // Add count and size info. - MVT IndexVT = MVT::getIntegerVT(EltType.getSizeInBits()); MVT BuildVecVT = MVT::getVectorVT(IndexVT, NumElts); if (!TLI.isTypeLegal(BuildVecVT) && LegalTypes) return SDValue(); Added: llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll?rev=67076&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll (added) +++ llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll Tue Mar 17 01:33:10 2009 @@ -0,0 +1,13 @@ +; RUN: llvm-as < %s | llc -march=x86 -o %t -f +; RUN: grep unpcklpd %t | count 1 +; RUN: grep movapd %t | count 1 + +; Shows a dag combine bug that will generate an illegal build vector +; with v2i64 build_vector i32, i32. + +define void @test(<2 x double>* %dst, <4 x double> %src) { +entry: + %tmp7.i = shufflevector <4 x double> %src, <4 x double> undef, <2 x i32> < i32 0, i32 2 > + store <2 x double> %tmp7.i, <2 x double>* %dst + ret void +} \ No newline at end of file From isanbard at gmail.com Tue Mar 17 02:42:49 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 07:42:49 -0000 Subject: [llvm-commits] [llvm] r67077 - in /llvm/branches/Apple/Dib: lib/CodeGen/SelectionDAG/DAGCombiner.cpp test/CodeGen/X86/dagcombine-buildvector.ll Message-ID: <200903170742.n2H7gn3A017226@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 02:42:46 2009 New Revision: 67077 URL: http://llvm.org/viewvc/llvm-project?rev=67077&view=rev Log: --- Merging (from foreign repository) r67076 into '.': A test/CodeGen/X86/dagcombine-buildvector.ll U lib/CodeGen/SelectionDAG/DAGCombiner.cpp Fix a problem with DAGCombine where we were building an illegal build vector shuffle mask. Forced the mask to be built using i32. Note: this will be irrelevant once vector_shuffle no longer takes a build vector for the shuffle mask. Added: llvm/branches/Apple/Dib/test/CodeGen/X86/dagcombine-buildvector.ll Modified: llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Modified: llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/DAGCombiner.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=67077&r1=67076&r2=67077&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original) +++ llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue Mar 17 02:42:46 2009 @@ -5164,30 +5164,35 @@ } // If everything is good, we can make a shuffle operation. + MVT IndexVT = MVT::i32; if (VecIn1.getNode()) { SmallVector BuildVecIndices; for (unsigned i = 0; i != NumInScalars; ++i) { if (N->getOperand(i).getOpcode() == ISD::UNDEF) { - BuildVecIndices.push_back(DAG.getUNDEF(TLI.getPointerTy())); + BuildVecIndices.push_back(DAG.getUNDEF(IndexVT)); continue; } SDValue Extract = N->getOperand(i); // If extracting from the first vector, just use the index directly. + SDValue ExtVal = Extract.getOperand(1); if (Extract.getOperand(0) == VecIn1) { - BuildVecIndices.push_back(Extract.getOperand(1)); + if (ExtVal.getValueType() == IndexVT) + BuildVecIndices.push_back(ExtVal); + else { + unsigned Idx = cast(ExtVal)->getZExtValue(); + BuildVecIndices.push_back(DAG.getConstant(Idx, IndexVT)); + } continue; } // Otherwise, use InIdx + VecSize - unsigned Idx = - cast(Extract.getOperand(1))->getZExtValue(); - BuildVecIndices.push_back(DAG.getIntPtrConstant(Idx+NumInScalars)); + unsigned Idx = cast(ExtVal)->getZExtValue(); + BuildVecIndices.push_back(DAG.getConstant(Idx+NumInScalars, IndexVT)); } // Add count and size info. - MVT IndexVT = MVT::getIntegerVT(EltType.getSizeInBits()); MVT BuildVecVT = MVT::getVectorVT(IndexVT, NumElts); if (!TLI.isTypeLegal(BuildVecVT) && LegalTypes) return SDValue(); Added: llvm/branches/Apple/Dib/test/CodeGen/X86/dagcombine-buildvector.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/X86/dagcombine-buildvector.ll?rev=67077&view=auto ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/X86/dagcombine-buildvector.ll (added) +++ llvm/branches/Apple/Dib/test/CodeGen/X86/dagcombine-buildvector.ll Tue Mar 17 02:42:46 2009 @@ -0,0 +1,13 @@ +; RUN: llvm-as < %s | llc -march=x86 -o %t -f +; RUN: grep unpcklpd %t | count 1 +; RUN: grep movapd %t | count 1 + +; Shows a dag combine bug that will generate an illegal build vector +; with v2i64 build_vector i32, i32. + +define void @test(<2 x double>* %dst, <4 x double> %src) { +entry: + %tmp7.i = shufflevector <4 x double> %src, <4 x double> undef, <2 x i32> < i32 0, i32 2 > + store <2 x double> %tmp7.i, <2 x double>* %dst + ret void +} \ No newline at end of file From isanbard at gmail.com Tue Mar 17 02:45:15 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 07:45:15 -0000 Subject: [llvm-commits] [llvm] r67078 - in /llvm/branches/Apple/Dib: lib/VMCore/ConstantFold.cpp lib/VMCore/Constants.cpp test/Assembler/vector-shift.ll Message-ID: <200903170745.n2H7jGZU017777@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 02:45:15 2009 New Revision: 67078 URL: http://llvm.org/viewvc/llvm-project?rev=67078&view=rev Log: --- Merging (from foreign repository) r67010 into '.': U test/Assembler/vector-shift.ll U lib/VMCore/Constants.cpp U lib/VMCore/ConstantFold.cpp Apply a patch by Micah Villmow to fix AsmParser to accept vector shift constant expressions, and add support for folding vector shift constant expressions. This fixes PR3802. Modified: llvm/branches/Apple/Dib/lib/VMCore/ConstantFold.cpp llvm/branches/Apple/Dib/lib/VMCore/Constants.cpp llvm/branches/Apple/Dib/test/Assembler/vector-shift.ll Modified: llvm/branches/Apple/Dib/lib/VMCore/ConstantFold.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/VMCore/ConstantFold.cpp?rev=67078&r1=67077&r2=67078&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/VMCore/ConstantFold.cpp (original) +++ llvm/branches/Apple/Dib/lib/VMCore/ConstantFold.cpp Tue Mar 17 02:45:15 2009 @@ -832,6 +832,12 @@ return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getOr); case Instruction::Xor: return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getXor); + case Instruction::LShr: + return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getLShr); + case Instruction::AShr: + return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getAShr); + case Instruction::Shl: + return EvalVectorOp(CP1, CP2, VTy, ConstantExpr::getShl); } } } Modified: llvm/branches/Apple/Dib/lib/VMCore/Constants.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/VMCore/Constants.cpp?rev=67078&r1=67077&r2=67078&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/VMCore/Constants.cpp (original) +++ llvm/branches/Apple/Dib/lib/VMCore/Constants.cpp Tue Mar 17 02:45:15 2009 @@ -2095,7 +2095,7 @@ case Instruction::LShr: case Instruction::AShr: assert(C1->getType() == C2->getType() && "Op types should be identical!"); - assert(C1->getType()->isInteger() && + assert(C1->getType()->isIntOrIntVector() && "Tried to create a shift operation on a non-integer type!"); break; default: Modified: llvm/branches/Apple/Dib/test/Assembler/vector-shift.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/Assembler/vector-shift.ll?rev=67078&r1=67077&r2=67078&view=diff ============================================================================== --- llvm/branches/Apple/Dib/test/Assembler/vector-shift.ll (original) +++ llvm/branches/Apple/Dib/test/Assembler/vector-shift.ll Tue Mar 17 02:45:15 2009 @@ -1,6 +1,6 @@ -; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | grep shl -; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | grep ashr -; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | grep lshr +; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | grep shl | count 1 +; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | grep ashr | count 1 +; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | grep lshr | count 1 define <4 x i32> @foo(<4 x i32> %a, <4 x i32> %b) nounwind { entry: @@ -19,3 +19,14 @@ %cmp = ashr <4 x i32> %a, %b ; <4 x i32> [#uses=1] ret <4 x i32> %cmp } + +; Constant expressions: these should be folded. +define <2 x i64> @foo_ce() nounwind { + ret <2 x i64> shl (<2 x i64> , <2 x i64> ) +} +define <2 x i64> @bar_ce() nounwind { + ret <2 x i64> lshr (<2 x i64> , <2 x i64> ) +} +define <2 x i64> @baz_ce() nounwind { + ret <2 x i64> ashr (<2 x i64> , <2 x i64> ) +} From baldrick at free.fr Tue Mar 17 03:34:59 2009 From: baldrick at free.fr (Duncan Sands) Date: Tue, 17 Mar 2009 09:34:59 +0100 Subject: [llvm-commits] [llvm] r67049 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll In-Reply-To: <16e5fdf90903161323r3ea5f54l4384f6265dc261f4@mail.gmail.com> References: <200903161958.n2GJwdD6022601@zion.cs.uiuc.edu> <16e5fdf90903161323r3ea5f54l4384f6265dc261f4@mail.gmail.com> Message-ID: <200903170934.59459.baldrick@free.fr> Hi Bill, > FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/2009-03-13-PHIElimBug.ll > for PR3784 > Failed with exit(1) at line 1 > while running: llvm-as < > /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/2009-03-13-PHIElimBug.ll > | llc -march=x86 | /usr/bin/grep -A 2 {call f} | /usr/bin/grep movl what is the output from llc and does grep -A work on your machine (should produce 2 lines of output after the matching output)? Thanks, Duncan. PS: I'd rather you just xfailed the test rather than reverting the patch. The test tests that the patch fixed what it thinks it fixed. The problem is more likely to be in the testcase than the patch itself. From baldrick at free.fr Tue Mar 17 04:46:30 2009 From: baldrick at free.fr (Duncan Sands) Date: Tue, 17 Mar 2009 09:46:30 -0000 Subject: [llvm-commits] [llvm] r67079 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Message-ID: <200903170946.n2H9kVT1031374@zion.cs.uiuc.edu> Author: baldrick Date: Tue Mar 17 04:46:22 2009 New Revision: 67079 URL: http://llvm.org/viewvc/llvm-project?rev=67079&view=rev Log: Reapply r67049, with the test adjusted for darwin (which produces "call L_f$stub" rather than "call f"). Added: llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll Modified: llvm/trunk/lib/CodeGen/PHIElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PHIElimination.cpp?rev=67079&r1=67078&r2=67079&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PHIElimination.cpp (original) +++ llvm/trunk/lib/CodeGen/PHIElimination.cpp Tue Mar 17 04:46:22 2009 @@ -14,6 +14,8 @@ //===----------------------------------------------------------------------===// #define DEBUG_TYPE "phielim" +#include "llvm/BasicBlock.h" +#include "llvm/Instructions.h" #include "llvm/CodeGen/LiveVariables.h" #include "llvm/CodeGen/Passes.h" #include "llvm/CodeGen/MachineFunctionPass.h" @@ -31,7 +33,6 @@ using namespace llvm; STATISTIC(NumAtomic, "Number of atomic phis lowered"); -STATISTIC(NumEH, "Number of EH try blocks skipped"); namespace { class VISIBILITY_HIDDEN PNE : public MachineFunctionPass { @@ -66,8 +67,25 @@ /// void analyzePHINodes(const MachineFunction& Fn); - void WalkPassEHTryRange(MachineBasicBlock &MBB, - MachineBasicBlock::iterator &I, unsigned SrcReg); + // FindCopyInsertPoint - Find a safe place in MBB to insert a copy from + // SrcReg. This needs to be after any def or uses of SrcReg, but before + // any subsequent point where control flow might jump out of the basic + // block. + MachineBasicBlock::iterator FindCopyInsertPoint(MachineBasicBlock &MBB, + unsigned SrcReg); + + // SkipPHIsAndLabels - Copies need to be inserted after phi nodes and + // also after any exception handling labels: in landing pads execution + // starts at the label, so any copies placed before it won't be executed! + MachineBasicBlock::iterator SkipPHIsAndLabels(MachineBasicBlock &MBB, + MachineBasicBlock::iterator I) { + // Rather than assuming that EH labels come before other kinds of labels, + // just skip all labels. + while (I != MBB.end() && + (I->getOpcode() == TargetInstrInfo::PHI || I->isLabel())) + ++I; + return I; + } typedef std::pair BBVRegPair; typedef std::map VRegPHIUse; @@ -120,10 +138,7 @@ // Get an iterator to the first instruction after the last PHI node (this may // also be the end of the basic block). - MachineBasicBlock::iterator AfterPHIsIt = MBB.begin(); - while (AfterPHIsIt != MBB.end() && - AfterPHIsIt->getOpcode() == TargetInstrInfo::PHI) - ++AfterPHIsIt; // Skip over all of the PHI nodes... + MachineBasicBlock::iterator AfterPHIsIt = SkipPHIsAndLabels(MBB, MBB.begin()); while (MBB.front().getOpcode() == TargetInstrInfo::PHI) LowerAtomicPHINode(MBB, AfterPHIsIt); @@ -144,37 +159,47 @@ return true; } -void PNE::WalkPassEHTryRange(MachineBasicBlock &MBB, - MachineBasicBlock::iterator &I, unsigned SrcReg) { - if (I == MBB.begin()) - return; - MachineBasicBlock::iterator PI = prior(I); - if (PI->getOpcode() != TargetInstrInfo::EH_LABEL) - return; - - // Trying to walk pass the EH try range. If we run into a use instruction, - // we want to insert the copy there. - SmallPtrSet UsesInMBB; - for (MachineRegisterInfo::use_iterator UI = MRI->use_begin(SrcReg), - UE = MRI->use_end(); UI != UE; ++UI) { - MachineInstr *UseMI = &*UI; - if (UseMI->getParent() == &MBB) - UsesInMBB.insert(UseMI); +// FindCopyInsertPoint - Find a safe place in MBB to insert a copy from SrcReg. +// This needs to be after any def or uses of SrcReg, but before any subsequent +// point where control flow might jump out of the basic block. +MachineBasicBlock::iterator PNE::FindCopyInsertPoint(MachineBasicBlock &MBB, + unsigned SrcReg) { + // Handle the trivial case trivially. + if (MBB.empty()) + return MBB.begin(); + + // If this basic block does not contain an invoke, then control flow always + // reaches the end of it, so place the copy there. The logic below works in + // this case too, but is more expensive. + if (!isa(MBB.getBasicBlock()->getTerminator())) + return MBB.getFirstTerminator(); + + // Discover any definition/uses in this basic block. + SmallPtrSet DefUsesInMBB; + for (MachineRegisterInfo::reg_iterator RI = MRI->reg_begin(SrcReg), + RE = MRI->reg_end(); RI != RE; ++RI) { + MachineInstr *DefUseMI = &*RI; + if (DefUseMI->getParent() == &MBB) + DefUsesInMBB.insert(DefUseMI); } - while (PI != MBB.begin()) { - --PI; - if (PI->getOpcode() == TargetInstrInfo::EH_LABEL) { - ++NumEH; - I = PI; - return; - } else if (UsesInMBB.count(&*PI)) { - ++NumEH; - I = next(PI); - return; - } + MachineBasicBlock::iterator InsertPoint; + if (DefUsesInMBB.empty()) { + // No def/uses. Insert the copy at the start of the basic block. + InsertPoint = MBB.begin(); + } else if (DefUsesInMBB.size() == 1) { + // Insert the copy immediately after the definition/use. + InsertPoint = *DefUsesInMBB.begin(); + ++InsertPoint; + } else { + // Insert the copy immediately after the last definition/use. + InsertPoint = MBB.end(); + while (!DefUsesInMBB.count(&*--InsertPoint)) {} + ++InsertPoint; } - return; + + // Make sure the copy goes after any phi nodes however. + return SkipPHIsAndLabels(MBB, InsertPoint); } /// LowerAtomicPHINode - Lower the PHI node at the top of the specified block, @@ -273,10 +298,7 @@ // Find a safe location to insert the copy, this may be the first terminator // in the block (or end()). - MachineBasicBlock::iterator InsertPos = opBlock.getFirstTerminator(); - - // Walk pass EH try range if needed. - WalkPassEHTryRange(opBlock, InsertPos, SrcReg); + MachineBasicBlock::iterator InsertPos = FindCopyInsertPoint(opBlock, SrcReg); // Insert the copy. TII->copyRegToReg(opBlock, InsertPos, IncomingReg, SrcReg, RC, RC); Modified: llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll?rev=67079&r1=67078&r2=67079&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll (original) +++ llvm/trunk/test/CodeGen/X86/2009-03-13-PHIElimBug.ll Tue Mar 17 04:46:22 2009 @@ -1,37 +1,28 @@ -; RUN: llvm-as < %s | llc -mtriple=i386-pc-linux-gnu -stats |& grep phielim | grep {Number of EH try blocks skipped} | grep 4 +; RUN: llvm-as < %s | llc -march=x86 | grep -A 2 {call.*f} | grep movl +; Check the register copy comes after the call to f and before the call to g ; PR3784 - %struct.c38002a__arr___XUB = type { i32, i32 } - %struct.c38002a__arr_name = type { [0 x i32]*, %struct.c38002a__arr___XUB* } - %struct.c38002a__rec = type { i32, %struct.c38002a__arr_name } +declare i32 @f() -define void @_ada_c38002a() { -entry: - %0 = invoke i8* @__gnat_malloc(i32 12) - to label %invcont unwind label %lpad ; [#uses=0] +declare i32 @g() -invcont: ; preds = %entry - %1 = invoke i8* @__gnat_malloc(i32 20) - to label %invcont1 unwind label %lpad ; [#uses=0] - -invcont1: ; preds = %invcont - %2 = invoke i32 @report__ident_int(i32 2) - to label %.noexc unwind label %lpad ; [#uses=0] - -.noexc: ; preds = %invcont1 - %3 = invoke i32 @report__ident_int(i32 3) - to label %.noexc88 unwind label %lpad ; [#uses=0] - -.noexc88: ; preds = %.noexc - unreachable - -lpad: ; preds = %.noexc, %invcont1, %invcont, %entry - %r.0 = phi %struct.c38002a__rec* [ null, %entry ], [ null, %invcont ], [ null, %invcont1 ], [ null, %.noexc ] ; <%struct.c38002a__rec*> [#uses=1] - %4 = getelementptr %struct.c38002a__rec* %r.0, i32 0, i32 0 ; [#uses=1] - %5 = load i32* %4, align 4 ; [#uses=0] - ret void +define i32 @phi() { +entry: + %a = call i32 @f() ; [#uses=1] + %b = invoke i32 @g() + to label %cont unwind label %lpad ; [#uses=1] + +cont: ; preds = %entry + %x = phi i32 [ %b, %entry ] ; [#uses=0] + %aa = call i32 @g() ; [#uses=1] + %bb = invoke i32 @g() + to label %cont2 unwind label %lpad ; [#uses=1] + +cont2: ; preds = %cont + %xx = phi i32 [ %bb, %cont ] ; [#uses=1] + ret i32 %xx + +lpad: ; preds = %cont, %entry + %y = phi i32 [ %a, %entry ], [ %aa, %cont ] ; [#uses=1] + ret i32 %y } - -declare i32 @report__ident_int(i32) - -declare i8* @__gnat_malloc(i32) Added: llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll?rev=67079&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll (added) +++ llvm/trunk/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll Tue Mar 17 04:46:22 2009 @@ -0,0 +1,21 @@ +; RUN: llvm-as < %s | llc -march=x86 | grep -A 1 lpad | grep Llabel +; Check that register copies in the landing pad come after the EH_LABEL + +declare i32 @f() + +define i32 @phi(i32 %x) { +entry: + %a = invoke i32 @f() + to label %cont unwind label %lpad ; [#uses=1] + +cont: ; preds = %entry + %b = invoke i32 @f() + to label %cont2 unwind label %lpad ; [#uses=1] + +cont2: ; preds = %cont + ret i32 %b + +lpad: ; preds = %cont, %entry + %v = phi i32 [ %x, %entry ], [ %a, %cont ] ; [#uses=1] + ret i32 %v +} From Sanjiv.Gupta at microchip.com Tue Mar 17 06:00:38 2009 From: Sanjiv.Gupta at microchip.com (Sanjiv.Gupta at microchip.com) Date: Tue, 17 Mar 2009 04:00:38 -0700 Subject: [llvm-commits] [llvm] r66870 - in /llvm/trunk/lib/CodeGen: RegAllocLinearScan.cpp RegAllocPBQP.cpp VirtRegMap.cpp VirtRegMap.h References: <200903130555.n2D5tBE1001556@zion.cs.uiuc.edu> Message-ID: Looks like this breaks PBQP (at least for PIC16). llc: /home/i00171/projects/c16/include/llvm/PassAnalysisSupport.h:199: AnalysisType& llvm::Pass::getAnalysisID(const llvm::PassInfo*) const [with AnalysisType = llvm::VirtRegMap]: Assertion `ResultPass && "getAnalysis*() called on an analysis that was not " "'required' by pass!"' failed. 0 llc 0x087e2206 1 llc 0x087e27ef 2 libc.so.6 0x0015b0d8 3 libc.so.6 0x0015c705 abort + 469 4 libc.so.6 0x00154619 5 llc 0x0858c766 llvm::VirtRegMap& llvm::Pass::getAnalysisID(llvm::PassInfo const*) const + 190 6 llc 0x0858c83e llvm::VirtRegMap& llvm::Pass::getAnalysis() const + 90 7 llc 0x08593fd0 8 llc 0x083837be llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 52 9 llc 0x0876145d llvm::FPPassManager::runOnFunction(llvm::Function&) + 289 10 llc 0x087619ee llvm::FunctionPassManagerImpl::run(llvm::Function&) + 124 11 llc 0x08761b77 llvm::FunctionPassManager::run(llvm::Function&) + 159 12 llc 0x0833e099 main + 2673 13 libc.so.6 0x0014879a __libc_start_main + 218 14 llc 0x0833c2d1 dlopen + 65 Stack dump: 0. Program arguments: llc -regalloc=pbqp -f -march=pic16 direct_load_char.bc 1. Running pass 'PBQP Register Allocator' on function '@main' The test case is ; ModuleID = 'direct_load_char.c' target datalayout = "e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8" target triple = "pic16-pc-linux-gnu" %struct.__block_descriptor = type { i32, i32 } %struct.__block_literal_generic = type { i8*, i16, i16, i8*, %struct.__block_descriptor* } @ptr = global i8* inttoptr (i64 160 to i8*), align 1 ; [#uses=1] @i = common global i8 0, align 1 ; [#uses=2] @k = common global i8 0, align 1 ; [#uses=2] @j = global i8 1, align 1 ; [#uses=3] define void @main() nounwind { entry: %tmp = load i8* @j ; [#uses=1] store i8 %tmp, i8* @i %tmp1 = load i8* @i ; [#uses=1] store i8 %tmp1, i8* @k %tmp2 = load i8* @k ; [#uses=1] store i8 %tmp2, i8* @j %tmp3 = load i8** @ptr ; [#uses=1] %tmp4 = load i8* @j ; [#uses=1] store i8 %tmp4, i8* %tmp3 ret void } - Sanjiv -----Original Message----- From: llvm-commits-bounces at cs.uiuc.edu on behalf of Owen Anderson Sent: Fri 3/13/2009 11:25 AM To: llvm-commits at cs.uiuc.edu Subject: [llvm-commits] [llvm] r66870 - in /llvm/trunk/lib/CodeGen: RegAllocLinearScan.cpp RegAllocPBQP.cpp VirtRegMap.cpp VirtRegMap.h Author: resistor Date: Fri Mar 13 00:55:11 2009 New Revision: 66870 URL: http://llvm.org/viewvc/llvm-project?rev=66870&view=rev Log: Convert VirtRegMap to a MachineFunctionPass. Modified: llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp llvm/trunk/lib/CodeGen/VirtRegMap.cpp llvm/trunk/lib/CodeGen/VirtRegMap.h Modified: llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocLinearScan.cpp?rev=66870&r1=66869&r2=66870&view=diff --- llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp Fri Mar 13 00:55:11 2009 @@ -799,8 +799,7 @@ lss = &getAnalysis(); loopInfo = &getAnalysis(); - std::auto_ptr vrmAutoPtr(new VirtRegMap(*mf)); - vrm = vrmAutoPtr.get(); + vrm = &getAnalysis(); DOUT << "PBQP Register Allocating for " << mf->getFunction()->getName() << "\n"; -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090317/bdc64329/attachment.html From ggreif at gmail.com Tue Mar 17 06:38:31 2009 From: ggreif at gmail.com (Gabor Greif) Date: Tue, 17 Mar 2009 11:38:31 -0000 Subject: [llvm-commits] [llvm] r67080 - /llvm/trunk/lib/VMCore/Verifier.cpp Message-ID: <200903171138.n2HBcWI9003240@zion.cs.uiuc.edu> Author: ggreif Date: Tue Mar 17 06:38:29 2009 New Revision: 67080 URL: http://llvm.org/viewvc/llvm-project?rev=67080&view=rev Log: typo Modified: llvm/trunk/lib/VMCore/Verifier.cpp Modified: llvm/trunk/lib/VMCore/Verifier.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=67080&r1=67079&r2=67080&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Verifier.cpp (original) +++ llvm/trunk/lib/VMCore/Verifier.cpp Tue Mar 17 06:38:29 2009 @@ -1222,7 +1222,7 @@ *UI); Instruction *Used = cast(*UI); Assert2(Used->getParent() != 0, "Instruction referencing instruction not" - " embeded in a basic block!", &I, Used); + " embedded in a basic block!", &I, Used); } for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) { From sanjiv.gupta at microchip.com Tue Mar 17 10:46:15 2009 From: sanjiv.gupta at microchip.com (Sanjiv Gupta) Date: Tue, 17 Mar 2009 15:46:15 -0000 Subject: [llvm-commits] [llvm] r67082 - /llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp Message-ID: <200903171546.n2HFkFnj012792@zion.cs.uiuc.edu> Author: sgupta Date: Tue Mar 17 10:46:15 2009 New Revision: 67082 URL: http://llvm.org/viewvc/llvm-project?rev=67082&view=rev Log: r66870 missed this out. Modified: llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp Modified: llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp?rev=67082&r1=67081&r2=67082&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocPBQP.cpp Tue Mar 17 10:46:15 2009 @@ -83,6 +83,7 @@ au.addPreserved(); au.addRequired(); au.addPreserved(); + au.addRequired(); MachineFunctionPass::getAnalysisUsage(au); } From daniel at zuster.org Tue Mar 17 11:15:03 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Tue, 17 Mar 2009 16:15:03 -0000 Subject: [llvm-commits] [llvm] r67083 - in /llvm/trunk/unittests: Makefile Support/ Support/Makefile Support/raw_ostream.cpp Message-ID: <200903171615.n2HGF4T1014276@zion.cs.uiuc.edu> Author: ddunbar Date: Tue Mar 17 11:14:59 2009 New Revision: 67083 URL: http://llvm.org/viewvc/llvm-project?rev=67083&view=rev Log: Minimal raw_ostream unit tests Added: llvm/trunk/unittests/Support/ (with props) llvm/trunk/unittests/Support/Makefile llvm/trunk/unittests/Support/raw_ostream.cpp Modified: llvm/trunk/unittests/Makefile Modified: llvm/trunk/unittests/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Makefile?rev=67083&r1=67082&r2=67083&view=diff ============================================================================== --- llvm/trunk/unittests/Makefile (original) +++ llvm/trunk/unittests/Makefile Tue Mar 17 11:14:59 2009 @@ -16,7 +16,7 @@ CPP.Flags += -I$(LLVM_SRC_ROOT)/utils/unittest/googletest/include/ CPP.Flags += -Wno-variadic-macros -PARALLEL_DIRS = ADT +PARALLEL_DIRS = ADT Support include $(LEVEL)/Makefile.common Propchange: llvm/trunk/unittests/Support/ ------------------------------------------------------------------------------ --- svn:ignore (added) +++ svn:ignore Tue Mar 17 11:14:59 2009 @@ -0,0 +1,4 @@ +Debug +Release +Release-Asserts + Added: llvm/trunk/unittests/Support/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Makefile?rev=67083&view=auto ============================================================================== --- llvm/trunk/unittests/Support/Makefile (added) +++ llvm/trunk/unittests/Support/Makefile Tue Mar 17 11:14:59 2009 @@ -0,0 +1,15 @@ +##===- unittests/ADT/Makefile ------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL = ../.. +TESTNAME = Support +LINK_COMPONENTS := core support + +include $(LEVEL)/Makefile.config +include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest Added: llvm/trunk/unittests/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/raw_ostream.cpp?rev=67083&view=auto ============================================================================== --- llvm/trunk/unittests/Support/raw_ostream.cpp (added) +++ llvm/trunk/unittests/Support/raw_ostream.cpp Tue Mar 17 11:14:59 2009 @@ -0,0 +1,85 @@ +//===- llvm/unittest/Support/raw_ostream.cpp - raw_ostream unit tests -----===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" +#include "llvm/Support/raw_ostream.h" + +using namespace llvm; + +namespace { + +template std::string printToString(const T &Value) { + std::string res; + llvm::raw_string_ostream(res) << Value; + return res; +} + +template std::string printToStringUnbuffered(const T &Value) { + std::string res; + llvm::raw_string_ostream OS(res); + OS.SetUnbuffered(); + OS << Value; + return res; +} + +TEST(raw_ostreamTest, Types_Buffered) { + // Char + EXPECT_EQ("c", printToString('c')); + + // String + EXPECT_EQ("hello", printToString("hello")); + EXPECT_EQ("hello", printToString(std::string("hello"))); + + // Int + EXPECT_EQ("0", printToString(0)); + EXPECT_EQ("2425", printToString(2425)); + EXPECT_EQ("-2425", printToString(-2425)); + + // Long long + EXPECT_EQ("0", printToString(0LL)); + EXPECT_EQ("257257257235709", printToString(257257257235709LL)); + EXPECT_EQ("-257257257235709", printToString(-257257257235709LL)); + + // Double + EXPECT_EQ("1.100000e+00", printToString(1.1)); + + // void* + EXPECT_EQ("0x0", printToString((void*) 0)); + EXPECT_EQ("0xbeef", printToString((void*) 0xbeef)); + EXPECT_EQ("0xdeadbeef", printToString((void*) 0xdeadbeef)); +} + +TEST(raw_ostreamTest, Types_Unbuffered) { + // Char + EXPECT_EQ("c", printToStringUnbuffered('c')); + + // String + EXPECT_EQ("hello", printToStringUnbuffered("hello")); + EXPECT_EQ("hello", printToStringUnbuffered(std::string("hello"))); + + // Int + EXPECT_EQ("0", printToStringUnbuffered(0)); + EXPECT_EQ("2425", printToStringUnbuffered(2425)); + EXPECT_EQ("-2425", printToStringUnbuffered(-2425)); + + // Long long + EXPECT_EQ("0", printToStringUnbuffered(0LL)); + EXPECT_EQ("257257257235709", printToStringUnbuffered(257257257235709LL)); + EXPECT_EQ("-257257257235709", printToStringUnbuffered(-257257257235709LL)); + + // Double + EXPECT_EQ("1.100000e+00", printToStringUnbuffered(1.1)); + + // void* + EXPECT_EQ("0x0", printToStringUnbuffered((void*) 0)); + EXPECT_EQ("0xbeef", printToStringUnbuffered((void*) 0xbeef)); + EXPECT_EQ("0xdeadbeef", printToStringUnbuffered((void*) 0xdeadbeef)); +} + +} From scottm at aero.org Tue Mar 17 11:45:16 2009 From: scottm at aero.org (Scott Michel) Date: Tue, 17 Mar 2009 16:45:16 -0000 Subject: [llvm-commits] [llvm] r67084 - in /llvm/trunk: lib/Target/CellSPU/SPUISelDAGToDAG.cpp lib/Target/CellSPU/SPUInstrInfo.td test/CodeGen/CellSPU/fneg-fabs.ll Message-ID: <200903171645.n2HGjH0H015522@zion.cs.uiuc.edu> Author: pingbak Date: Tue Mar 17 11:45:16 2009 New Revision: 67084 URL: http://llvm.org/viewvc/llvm-project?rev=67084&view=rev Log: CellSPU: Revert inadvertent mis-fix of fneg. Modified: llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll Modified: llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp?rev=67084&r1=67083&r2=67084&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/SPUISelDAGToDAG.cpp Tue Mar 17 11:45:16 2009 @@ -865,12 +865,12 @@ SDValue negConst = CurDAG->getConstant(0x8000000000000000ULL, MVT::i64); SDNode *signMask = 0; - unsigned Opc = SPU::ORfneg64; + unsigned Opc = SPU::XORfneg64; if (OpVT == MVT::f64) { signMask = SelectI64Constant(negConst, MVT::i64, dl); } else if (OpVT == MVT::v2f64) { - Opc = SPU::ORfnegvec; + Opc = SPU::XORfnegvec; signMask = emitBuildVector(CurDAG->getNode(ISD::BUILD_VECTOR, dl, MVT::v2i64, negConst, negConst)); Modified: llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td?rev=67084&r1=67083&r2=67084&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUInstrInfo.td Tue Mar 17 11:45:16 2009 @@ -1483,17 +1483,6 @@ def f64: ORInst<(outs R64FP:$rT), (ins R64FP:$rA, R64FP:$rB), [/* no pattern */]>; - // OR instructions used to negate f32 and f64 quantities. - - def fneg32: ORInst<(outs R32FP:$rT), (ins R32FP:$rA, R32C:$rB), - [/* no pattern */]>; - - def fneg64: ORInst<(outs R64FP:$rT), (ins R64FP:$rA, R64C:$rB), - [/* no pattern */]>; - - def fnegvec: ORInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), - [/* no pattern, see fneg{32,64} */]>; - // scalar->vector promotion, prefslot2vec: def v16i8_i8: ORPromoteScalar; def v8i16_i16: ORPromoteScalar; @@ -1797,6 +1786,17 @@ def r32: XORRegInst; def r16: XORRegInst; def r8: XORRegInst; + + // XOR instructions used to negate f32 and f64 quantities. + + def fneg32: XORInst<(outs R32FP:$rT), (ins R32FP:$rA, R32C:$rB), + [/* no pattern */]>; + + def fneg64: XORInst<(outs R64FP:$rT), (ins R64FP:$rA, R64C:$rB), + [/* no pattern */]>; + + def fnegvec: XORInst<(outs VECREG:$rT), (ins VECREG:$rA, VECREG:$rB), + [/* no pattern, see fneg{32,64} */]>; } defm XOR : BitwiseExclusiveOr; @@ -4298,11 +4298,11 @@ //===----------------------------------------------------------------------==// def : Pat<(fneg (v4f32 VECREG:$rA)), - (ORfnegvec (v4f32 VECREG:$rA), - (v4f32 (ILHUv4i32 0x8000)))>; + (XORfnegvec (v4f32 VECREG:$rA), + (v4f32 (ILHUv4i32 0x8000)))>; def : Pat<(fneg R32FP:$rA), - (ORfneg32 R32FP:$rA, (ILHUr32 0x8000))>; + (XORfneg32 R32FP:$rA, (ILHUr32 0x8000))>; // Floating point absolute value // Note: f64 fabs is custom-selected. Modified: llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll?rev=67084&r1=67083&r2=67084&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/fneg-fabs.ll Tue Mar 17 11:45:16 2009 @@ -1,6 +1,6 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s ; RUN: grep 32768 %t1.s | count 2 -; RUN: grep or %t1.s | count 4 +; RUN: grep xor %t1.s | count 4 ; RUN: grep and %t1.s | count 2 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128" From evan.cheng at apple.com Tue Mar 17 12:08:25 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 17 Mar 2009 17:08:25 -0000 Subject: [llvm-commits] [llvm] r67085 - /llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll Message-ID: <200903171708.n2HH8QVx016434@zion.cs.uiuc.edu> Author: evancheng Date: Tue Mar 17 12:08:25 2009 New Revision: 67085 URL: http://llvm.org/viewvc/llvm-project?rev=67085&view=rev Log: Add newline at end of file. Modified: llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll Modified: llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll?rev=67085&r1=67084&r2=67085&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll (original) +++ llvm/trunk/test/CodeGen/X86/dagcombine-buildvector.ll Tue Mar 17 12:08:25 2009 @@ -10,4 +10,4 @@ %tmp7.i = shufflevector <4 x double> %src, <4 x double> undef, <2 x i32> < i32 0, i32 2 > store <2 x double> %tmp7.i, <2 x double>* %dst ret void -} \ No newline at end of file +} From evan.cheng at apple.com Tue Mar 17 12:12:56 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 17 Mar 2009 10:12:56 -0700 Subject: [llvm-commits] [llvm] r66976 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/split-eh-lpad-edges.ll In-Reply-To: <200903160839.48588.baldrick@free.fr> References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <200903141140.49101.baldrick@free.fr> <200903160839.48588.baldrick@free.fr> Message-ID: I'll look at these today. Evan On Mar 16, 2009, at 12:39 AM, Duncan Sands wrote: > Hi Evan, > >>> %reg1031 = MOV32rr %EAX >>> EH_LABEL 2 >>> %reg1025 = MOV32rr %reg1031 <= Invoke result, not an >>> EH_LABEL >>> JMP mbb >>> >>> So in this case the logic bails out, putting the copy at the end of >>> the BB, >>> even though it might still need to be before the invoke. >> >> Something seems wrong with this. Who inserted the copy? The copy from >> EAX to reg1031 is the copy lowered by isel. Is PHI elimination >> inserting the copy from reg1031 to reg1025? Then it should have done >> the right thing. > > I'm not sure where it's coming from (see testcase below). By the > way, what > do you think of the patch I sent? It's more efficient in the common > case of > an invoke with one def/use of SrcReg in the basic block, but less > efficient > when there is more than one def/use because it has to walk more of > the basic > block. > > Ciao, > > Duncan. > > Run: llc -march=x86 -f phi.bc > > If I break on WalkPassEHTryRange, then the first time I hit the > breakpoint > I see such a register copy after the EH_LABEL. This is the MBB for > "cont", > and it is trying to find a place to put the copy for the phi node in > the > landing pad. > > declare i32 @f() > > declare i32 @g() > > define i32 @phi() { > entry: > %a = call i32 @f() ; [#uses=1] > %b = invoke i32 @g() > to label %cont unwind label %lpad ; [#uses=1] > > cont: ; preds = %entry > %x = phi i32 [ %b, %entry ] ; [#uses=0] > %aa = call i32 @f() ; [#uses=1] > %bb = invoke i32 @g() > to label %cont2 unwind label %lpad ; [#uses=1] > > cont2: ; preds = %cont > %xx = phi i32 [ %bb, %cont ] ; [#uses=1] > ret i32 %xx > > lpad: ; preds = %cont, %entry > %y = phi i32 [ %a, %entry ], [ %aa, %cont ] ; [#uses=1] > ret i32 %y > } From sabre at nondot.org Tue Mar 17 12:55:15 2009 From: sabre at nondot.org (Chris Lattner) Date: Tue, 17 Mar 2009 17:55:15 -0000 Subject: [llvm-commits] [llvm] r67089 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200903171755.n2HHtGol018724@zion.cs.uiuc.edu> Author: lattner Date: Tue Mar 17 12:55:15 2009 New Revision: 67089 URL: http://llvm.org/viewvc/llvm-project?rev=67089&view=rev Log: Remove a condition which is always true. Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=67089&r1=67088&r2=67089&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Tue Mar 17 12:55:15 2009 @@ -7533,7 +7533,7 @@ if (isa(NumElements)) Amt = Multiply(cast(NumElements), cast(Amt)); // otherwise multiply the amount and the number of elements - else if (Scale != 1) { + else { Instruction *Tmp = BinaryOperator::CreateMul(Amt, NumElements, "tmp"); Amt = InsertNewInstBefore(Tmp, AI); } @@ -10979,8 +10979,8 @@ if (isa(AI) && AI.getAllocatedType()->isSized()) { // If alloca'ing a zero byte object, replace the alloca with a null pointer. - // Note that we only do this for alloca's, because malloc should allocate and - // return a unique pointer, even for a zero byte allocation. + // Note that we only do this for alloca's, because malloc should allocate + // and return a unique pointer, even for a zero byte allocation. if (TD->getTypePaddedSize(AI.getAllocatedType()) == 0) return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType())); From isanbard at gmail.com Tue Mar 17 13:02:27 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 10:02:27 -0800 Subject: [llvm-commits] [llvm] r67049 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll In-Reply-To: <200903170934.59459.baldrick@free.fr> References: <200903161958.n2GJwdD6022601@zion.cs.uiuc.edu> <16e5fdf90903161323r3ea5f54l4384f6265dc261f4@mail.gmail.com> <200903170934.59459.baldrick@free.fr> Message-ID: <16e5fdf90903171102u1c90f5beh5192f45cc5af37ec@mail.gmail.com> On Tue, Mar 17, 2009 at 12:34 AM, Duncan Sands wrote: > Hi Bill, > >> FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/2009-03-13-PHIElimBug.ll >> for PR3784 >> Failed with exit(1) at line 1 >> while running: ?llvm-as < >> /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/2009-03-13-PHIElimBug.ll >> | ?llc -march=x86 | /usr/bin/grep -A 2 {call ?f} | /usr/bin/grep movl > > what is the output from llc and does grep -A work on your machine (should > produce 2 lines of output after the matching output)? > I don't have the output from llc. I don't really have time to recreate this failure either... It looks like 'grep -A' works: $ grep -A 2 This llvmCore-2064/README.txt This directory and its subdirectories contain source code for the Low Level Virtual Machine, a toolkit for the construction of highly optimized compilers, optimizers, and runtime environments. > PS: I'd rather you just xfailed the test rather than reverting the patch. > The test tests that the patch fixed what it thinks it fixed. ?The > problem is more likely to be in the testcase than the patch itself. > Because the tests was there before your patch, it's not an option to XFAIL it's obvious that there's something wrong with the test, in which case you should fix it. :-) I don't know how important that test is, and regressing in our tests is really bad. XFAIL just covers these things up. -bw From anton at korobeynikov.info Tue Mar 17 13:11:05 2009 From: anton at korobeynikov.info (Anton Korobeynikov) Date: Tue, 17 Mar 2009 21:11:05 +0300 Subject: [llvm-commits] [llvm] r67049 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll In-Reply-To: <16e5fdf90903171102u1c90f5beh5192f45cc5af37ec@mail.gmail.com> References: <200903161958.n2GJwdD6022601@zion.cs.uiuc.edu> <16e5fdf90903161323r3ea5f54l4384f6265dc261f4@mail.gmail.com> <200903170934.59459.baldrick@free.fr> <16e5fdf90903171102u1c90f5beh5192f45cc5af37ec@mail.gmail.com> Message-ID: <8ED87D74-0F1D-42FF-B9F5-714E8D142A82@korobeynikov.info> > Because the tests was there before your patch, it's not an option to > XFAIL it's obvious that there's something wrong with the test, in > which case you should fix it. :-) I don't know how important that test > is, and regressing in our tests is really bad. XFAIL just covers these > things up. The actual problem is that test is subtarget-dependent, which should never happen :) --- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University From gohman at apple.com Tue Mar 17 13:11:34 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 17 Mar 2009 11:11:34 -0700 Subject: [llvm-commits] embedded metadata preview In-Reply-To: <49BF3557.8050409@mxc.ca> References: <49BB6E93.9050802@mxc.ca> <49BF3557.8050409@mxc.ca> Message-ID: <7E811979-29E7-4C6D-AA1F-09BD0D7ABFC9@apple.com> On Mar 16, 2009, at 10:29 PM, Nick Lewycky wrote: > Dan Gohman wrote: >> Hi Nick, >> >> Here are a few review comments. >> >>> Index: lib/Bitcode/Writer/BitcodeWriter.cpp >>> =================================================================== >>> --- lib/Bitcode/Writer/BitcodeWriter.cpp (revision 66999) >>> +++ lib/Bitcode/Writer/BitcodeWriter.cpp (working copy) >>> @@ -677,6 +677,17 @@ >>> Record.push_back(CE->getPredicate()); >>> break; >>> } >>> + } else if (const MDString *S = dyn_cast(C)) { >>> + Code = bitc::CST_CODE_MDSTRING; >>> + Record.push_back(S->length()); >>> + for (unsigned i = 0, e = S->length(); i != e; ++i) >>> + Record.push_back(S->begin()[i]); >> >> It seems pretty inefficient to put each char in a uint64_t. >> Forgive me for prematurely optimizing :-). > > No that's fine, I just copied this out of the handling for strings in > inline-asm under the assumption that it must be fine. > > I tried adding "AbbrevToUse = String8Abbrev;" here but that causes a > crash ("Invalid abbrev for record"). I'm not really familiar with this > code, do you know how it's supposed to work? (If not I'm sure I can > figure it out...) I'm not familiar with this code either. >> >>> Index: docs/LangRef.html >>> =================================================================== >>> --- docs/LangRef.html (revision 66999) >>> +++ docs/LangRef.html (working copy) >> >>> @@ -1847,6 +1848,14 @@ >>> large arrays) and is always exactly equivalent to using explicit >> zero >>> initializers. >>>
    >>> + >>> +
    Metadata node
    >>> + >>> +
    A metadata node is a structure-like constant with the type >> of an empty >>> + struct. For example: "{ } !{ i32 0, { } !"test" }". >> Unlike other >>> + constants that are meant to be interpreted as part of the >> instruction stream, >>> + metadata is a place to attach additional information such as >> debug info. >> >> It would be helpful to mention that this is also expected to be >> used for >> encoding information that will be used by optimizations. > > I'm actually thinking of removing any mention of them here and only > talking about them under the "Embedded Metadata" section. Thoughts? > > I added this as the last paragraph in that section: > "Optimizations may rely on metadata to provide additional > information > about the program that isn't available in the instructions, or that > isn't easily computable. Similarly, the code generator may expect a > certain metadata format to be used to express debugging information." > > Close enough? :) Sounds reasonable. >> Why do MDString and MDNode inherit from Constant instead of, say, >> User? I >> see that ConstantLastVal is moved to include MDStringVal and >> MDNodeVal, >> presumably for the same reason. > > I tried that initially, where MDNode was a User and MDString was a > Value. In practise, they seem to have semantics much closer to that of > Constants; they're uniqued / pointer comparable and they're global. > The > point where it really made a difference was in the .ll parser, > switching > them over to being Constant made the parser changes much simpler. The parser parts are not present in the patch. That may be a reason why it wasn't clear why Constant is used. Thanks, Dan From evan.cheng at apple.com Tue Mar 17 13:17:29 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 17 Mar 2009 11:17:29 -0700 Subject: [llvm-commits] [llvm] r66976 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/split-eh-lpad-edges.ll In-Reply-To: References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <200903141140.49101.baldrick@free.fr> <200903160839.48588.baldrick@free.fr> Message-ID: <41C9A61B-5737-4C1E-8008-64A3FEBFBC4D@apple.com> The copies are inserted by sdisel for liveout invoke return values. Your fix is doing the right thing now. What are the other issues? Evan On Mar 17, 2009, at 10:12 AM, Evan Cheng wrote: > I'll look at these today. > > Evan > > On Mar 16, 2009, at 12:39 AM, Duncan Sands wrote: > >> Hi Evan, >> >>>> %reg1031 = MOV32rr %EAX >>>> EH_LABEL 2 >>>> %reg1025 = MOV32rr %reg1031 <= Invoke result, not an >>>> EH_LABEL >>>> JMP mbb >>>> >>>> So in this case the logic bails out, putting the copy at the end of >>>> the BB, >>>> even though it might still need to be before the invoke. >>> >>> Something seems wrong with this. Who inserted the copy? The copy >>> from >>> EAX to reg1031 is the copy lowered by isel. Is PHI elimination >>> inserting the copy from reg1031 to reg1025? Then it should have done >>> the right thing. >> >> I'm not sure where it's coming from (see testcase below). By the >> way, what >> do you think of the patch I sent? It's more efficient in the common >> case of >> an invoke with one def/use of SrcReg in the basic block, but less >> efficient >> when there is more than one def/use because it has to walk more of >> the basic >> block. >> >> Ciao, >> >> Duncan. >> >> Run: llc -march=x86 -f phi.bc >> >> If I break on WalkPassEHTryRange, then the first time I hit the >> breakpoint >> I see such a register copy after the EH_LABEL. This is the MBB for >> "cont", >> and it is trying to find a place to put the copy for the phi node in >> the >> landing pad. >> >> declare i32 @f() >> >> declare i32 @g() >> >> define i32 @phi() { >> entry: >> %a = call i32 @f() ; [#uses=1] >> %b = invoke i32 @g() >> to label %cont unwind label %lpad ; [#uses=1] >> >> cont: ; preds = %entry >> %x = phi i32 [ %b, %entry ] ; [#uses=0] >> %aa = call i32 @f() ; [#uses=1] >> %bb = invoke i32 @g() >> to label %cont2 unwind label %lpad ; [#uses=1] >> >> cont2: ; preds = %cont >> %xx = phi i32 [ %bb, %cont ] ; [#uses=1] >> ret i32 %xx >> >> lpad: ; preds = %cont, %entry >> %y = phi i32 [ %a, %entry ], [ %aa, %cont ] ; [#uses=1] >> ret i32 %y >> } > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From sabre at nondot.org Tue Mar 17 14:36:01 2009 From: sabre at nondot.org (Chris Lattner) Date: Tue, 17 Mar 2009 19:36:01 -0000 Subject: [llvm-commits] [llvm] r67093 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp test/CodeGen/X86/x86-64-malloc.ll Message-ID: <200903171936.n2HJa1mZ023983@zion.cs.uiuc.edu> Author: lattner Date: Tue Mar 17 14:36:00 2009 New Revision: 67093 URL: http://llvm.org/viewvc/llvm-project?rev=67093&view=rev Log: Fix codegen to compute the size of an allocation by multiplying the size by the array amount as an i32 value instead of promoting from i32 to i64 then doing the multiply. Not doing this broke wrap-around assumptions that the optimizers (validly) made. The ultimate real fix for this is to introduce i64 version of alloca and remove mallocinst. This fixes PR3829 Added: llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=67093&r1=67092&r2=67093&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Tue Mar 17 14:36:00 2009 @@ -2763,6 +2763,13 @@ I.getAlignment()); SDValue AllocSize = getValue(I.getArraySize()); + + AllocSize = DAG.getNode(ISD::MUL, getCurDebugLoc(), AllocSize.getValueType(), + AllocSize, + DAG.getConstant(TySize, AllocSize.getValueType())); + + + MVT IntPtr = TLI.getPointerTy(); if (IntPtr.bitsLT(AllocSize.getValueType())) AllocSize = DAG.getNode(ISD::TRUNCATE, getCurDebugLoc(), @@ -2771,9 +2778,6 @@ AllocSize = DAG.getNode(ISD::ZERO_EXTEND, getCurDebugLoc(), IntPtr, AllocSize); - AllocSize = DAG.getNode(ISD::MUL, getCurDebugLoc(), IntPtr, AllocSize, - DAG.getIntPtrConstant(TySize)); - // Handle alignment. If the requested alignment is less than or equal to // the stack alignment, ignore it. If the size is greater than or equal to // the stack alignment, we note this in the DYNAMIC_STACKALLOC node. @@ -5425,6 +5429,16 @@ void SelectionDAGLowering::visitMalloc(MallocInst &I) { SDValue Src = getValue(I.getOperand(0)); + // Scale up by the type size in the original i32 type width. Various + // mid-level optimizers may make assumptions about demanded bits etc from the + // i32-ness of the optimizer: we do not want to promote to i64 and then + // multiply on 64-bit targets. + // FIXME: Malloc inst should go away: PR715. + uint64_t ElementSize = TD->getTypePaddedSize(I.getType()->getElementType()); + if (ElementSize != 1) + Src = DAG.getNode(ISD::MUL, getCurDebugLoc(), Src.getValueType(), + Src, DAG.getConstant(ElementSize, Src.getValueType())); + MVT IntPtr = TLI.getPointerTy(); if (IntPtr.bitsLT(Src.getValueType())) @@ -5432,11 +5446,6 @@ else if (IntPtr.bitsGT(Src.getValueType())) Src = DAG.getNode(ISD::ZERO_EXTEND, getCurDebugLoc(), IntPtr, Src); - // Scale the source by the type size. - uint64_t ElementSize = TD->getTypePaddedSize(I.getType()->getElementType()); - Src = DAG.getNode(ISD::MUL, getCurDebugLoc(), Src.getValueType(), - Src, DAG.getIntPtrConstant(ElementSize)); - TargetLowering::ArgListTy Args; TargetLowering::ArgListEntry Entry; Entry.Node = Src; Added: llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll?rev=67093&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll (added) +++ llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll Tue Mar 17 14:36:00 2009 @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep {shll.*3, %edi} +; PR3829 +; The generated code should multiply by 3 (sizeof i8*) as an i32, +; not as an i64! + +define i8** @test(i32 %sz) { + %sub = add i32 %sz, 536870911 ; [#uses=1] + %call = malloc i8*, i32 %sub ; [#uses=1] + ret i8** %call +} From dpatel at apple.com Tue Mar 17 14:46:45 2009 From: dpatel at apple.com (Devang Patel) Date: Tue, 17 Mar 2009 19:46:45 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67095 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Message-ID: <200903171946.n2HJkkf6024528@zion.cs.uiuc.edu> Author: dpatel Date: Tue Mar 17 14:46:45 2009 New Revision: 67095 URL: http://llvm.org/viewvc/llvm-project?rev=67095&view=rev Log: Keep track of nested regions properly. Pop out of all remaining regions at the end. Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp 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=67095&r1=67094&r2=67095&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Mar 17 14:46:45 2009 @@ -725,6 +725,7 @@ edge e; edge_iterator ei; tree stmt_block = NULL_TREE; + unsigned RegionCount = 0; FOR_EACH_BB (bb) { for (block_stmt_iterator bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) { @@ -734,15 +735,24 @@ // while dealing with variable's debug info locations. tree new_stmt_block = TREE_BLOCK (stmt); if (TheDebugInfo && new_stmt_block && !optimize) { - if (stmt_block == NULL_TREE) + if (stmt_block == NULL_TREE) { // This is beginning of function. llvm.dbg.func.start is emitted so // no need to emit llvm.dbg.region.start here. + tree t = new_stmt_block; + while (TREE_CODE (BLOCK_SUPERCONTEXT (t)) != FUNCTION_DECL) { + TheDebugInfo->EmitRegionStart(Builder.GetInsertBlock()); + t = BLOCK_SUPERCONTEXT (t); + RegionCount++; + } stmt_block = new_stmt_block; + } else { if (stmt_block != new_stmt_block) { - if (BLOCK_SUPERCONTEXT (new_stmt_block) == stmt_block) + if (BLOCK_SUPERCONTEXT (new_stmt_block) == stmt_block) { // Entering new scope. Emit llvm.dbg.func.start. TheDebugInfo->EmitRegionStart(Builder.GetInsertBlock()); + RegionCount++; + } else if (BLOCK_SUPERCONTEXT (new_stmt_block) == BLOCK_SUPERCONTEXT (stmt_block)) { // Entering new scope at the same level. End previous current @@ -750,10 +760,11 @@ // llvm.dbg.region.start to start new region. TheDebugInfo->EmitRegionEnd(Builder.GetInsertBlock()); TheDebugInfo->EmitRegionStart(Builder.GetInsertBlock()); - } else - // Leaving current scop.e Emit llvm.dbg.region.end. + } else { + // Leaving current scope. Emit llvm.dbg.region.end. TheDebugInfo->EmitRegionEnd(Builder.GetInsertBlock()); - + RegionCount--; + } stmt_block = new_stmt_block; } } @@ -777,7 +788,13 @@ EmitBlock(BasicBlock::Create("")); } } - + + // Pop out of dbg info regions. + while(RegionCount) { + TheDebugInfo->EmitRegionEnd(Builder.GetInsertBlock()); + RegionCount--; + } + // Wrap things up. return FinishFunctionBody(); } From dpatel at apple.com Tue Mar 17 14:47:21 2009 From: dpatel at apple.com (Devang Patel) Date: Tue, 17 Mar 2009 19:47:21 -0000 Subject: [llvm-commits] [llvm] r67096 - /llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp Message-ID: <200903171947.n2HJlLJD024561@zion.cs.uiuc.edu> Author: dpatel Date: Tue Mar 17 14:47:21 2009 New Revision: 67096 URL: http://llvm.org/viewvc/llvm-project?rev=67096&view=rev Log: test case for rev. 67095. Added: llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp Added: llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC%2B%2B/2009-03-17-dbg.cpp?rev=67096&view=auto ============================================================================== --- llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp (added) +++ llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp Tue Mar 17 14:47:21 2009 @@ -0,0 +1,14 @@ +// RUN: %llvmgxx -c -emit-llvm %s -o /dev/null -g +template +inline void f(const T1&,const T2&) { } + +template +struct A { + template void g(T& i) { } +}; + +int main() { + int i; + A a; + a.g(i); +} From isanbard at gmail.com Tue Mar 17 14:56:39 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 19:56:39 -0000 Subject: [llvm-commits] [llvm] r67097 - in /llvm/branches/Apple/Dib: lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp test/CodeGen/X86/rip-rel-address.ll Message-ID: <200903171956.n2HJudJm024968@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 14:56:39 2009 New Revision: 67097 URL: http://llvm.org/viewvc/llvm-project?rev=67097&view=rev Log: --- Merging (from foreign repository) r67002 into '.': A test/CodeGen/X86/rip-rel-address.ll U lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Don't forego folding of loads into 64-bit adds when the other operand is a signed 32-bit immediate. Unlike with the 8-bit signed immediate case, it isn't actually smaller to fold a 32-bit signed immediate instead of a load. In fact, it's larger in the case of 32-bit unsigned immediates, because they can be materialized with movl instead of movq. Added: llvm/branches/Apple/Dib/test/CodeGen/X86/rip-rel-address.ll Modified: llvm/branches/Apple/Dib/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Modified: llvm/branches/Apple/Dib/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=67097&r1=67096&r2=67097&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original) +++ llvm/branches/Apple/Dib/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Tue Mar 17 14:56:39 2009 @@ -453,14 +453,15 @@ O << "@GOT"; else O << "@GOTOFF"; - } else if (Subtarget->isPICStyleRIPRel() && !NotRIPRel && - TM.getRelocationModel() != Reloc::Static) { - if (Subtarget->GVRequiresExtraLoad(GV, TM, false)) - O << "@GOTPCREL"; - - if (needCloseParen) { - needCloseParen = false; - O << ')'; + } else if (Subtarget->isPICStyleRIPRel() && !NotRIPRel) { + if (TM.getRelocationModel() != Reloc::Static) { + if (Subtarget->GVRequiresExtraLoad(GV, TM, false)) + O << "@GOTPCREL"; + + if (needCloseParen) { + needCloseParen = false; + O << ')'; + } } // Use rip when possible to reduce code size, except when @@ -674,7 +675,7 @@ switch (ExtraCode[0]) { default: return true; // Unknown modifier. case 'c': // Don't print "$" before a global var name or constant. - printOperand(MI, OpNo, "mem"); + printOperand(MI, OpNo, "mem", /*NotRIPRel=*/true); return false; case 'b': // Print QImode register case 'h': // Print QImode high register Added: llvm/branches/Apple/Dib/test/CodeGen/X86/rip-rel-address.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/X86/rip-rel-address.ll?rev=67097&view=auto ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/X86/rip-rel-address.ll (added) +++ llvm/branches/Apple/Dib/test/CodeGen/X86/rip-rel-address.ll Tue Mar 17 14:56:39 2009 @@ -0,0 +1,7 @@ +; RUN: llvm-as < %s | llc -march=x86-64 -relocation-model=static | grep {a(%rip)} + + at a = internal global double 3.4 +define double @foo() nounwind { + %a = load double* @a + ret double %a +} From isanbard at gmail.com Tue Mar 17 14:57:41 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 19:57:41 -0000 Subject: [llvm-commits] [llvm] r67098 - /llvm/branches/Apple/Dib/lib/Target/X86/X86ISelDAGToDAG.cpp Message-ID: <200903171957.n2HJvf6n025014@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 14:57:40 2009 New Revision: 67098 URL: http://llvm.org/viewvc/llvm-project?rev=67098&view=rev Log: --- Merging (from foreign repository) r67001 into '.': U lib/Target/X86/X86ISelDAGToDAG.cpp Don't forego folding of loads into 64-bit adds when the other operand is a signed 32-bit immediate. Unlike with the 8-bit signed immediate case, it isn't actually smaller to fold a 32-bit signed immediate instead of a load. In fact, it's larger in the case of 32-bit unsigned immediates, because they can be materialized with movl instead of movq. Modified: llvm/branches/Apple/Dib/lib/Target/X86/X86ISelDAGToDAG.cpp Modified: llvm/branches/Apple/Dib/lib/Target/X86/X86ISelDAGToDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Target/X86/X86ISelDAGToDAG.cpp?rev=67098&r1=67097&r2=67098&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Target/X86/X86ISelDAGToDAG.cpp (original) +++ llvm/branches/Apple/Dib/lib/Target/X86/X86ISelDAGToDAG.cpp Tue Mar 17 14:57:40 2009 @@ -314,16 +314,9 @@ // addl 4(%esp), %eax // The former is 2 bytes shorter. In case where the increment is 1, then // the saving can be 4 bytes (by using incl %eax). - ConstantSDNode *Imm = dyn_cast(U->getOperand(1)); - if (Imm) { - if (U->getValueType(0) == MVT::i64) { - if ((int32_t)Imm->getZExtValue() == (int64_t)Imm->getZExtValue()) - return false; - } else { - if ((int8_t)Imm->getZExtValue() == (int64_t)Imm->getZExtValue()) - return false; - } - } + if (ConstantSDNode *Imm = dyn_cast(U->getOperand(1))) + if (Imm->getAPIntValue().isSignedIntN(8)) + return false; } } From isanbard at gmail.com Tue Mar 17 15:07:59 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 13:07:59 -0700 Subject: [llvm-commits] [llvm] r67093 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp test/CodeGen/X86/x86-64-malloc.ll In-Reply-To: <200903171936.n2HJa1mZ023983@zion.cs.uiuc.edu> References: <200903171936.n2HJa1mZ023983@zion.cs.uiuc.edu> Message-ID: <16e5fdf90903171307j5d3fdb8djf58de7f7346300b0@mail.gmail.com> Chris, This is causing this test to XPASS. Should it be un-XFAILed? Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/dg.exp ... XPASS: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/alloca-align-rounding.ll -bw On Tue, Mar 17, 2009 at 12:36 PM, Chris Lattner wrote: > Author: lattner > Date: Tue Mar 17 14:36:00 2009 > New Revision: 67093 > > URL: http://llvm.org/viewvc/llvm-project?rev=67093&view=rev > Log: > Fix codegen to compute the size of an allocation by multiplying the > size by the array amount as an i32 value instead of promoting from > i32 to i64 then doing the multiply. ?Not doing this broke wrap-around > assumptions that the optimizers (validly) made. ?The ultimate real > fix for this is to introduce i64 version of alloca and remove mallocinst. > > This fixes PR3829 > > Added: > ? ?llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll > Modified: > ? ?llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp > > Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=67093&r1=67092&r2=67093&view=diff > > ============================================================================== > --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original) > +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Tue Mar 17 14:36:00 2009 > @@ -2763,6 +2763,13 @@ > ? ? ? ? ? ? ?I.getAlignment()); > > ? SDValue AllocSize = getValue(I.getArraySize()); > + > + ?AllocSize = DAG.getNode(ISD::MUL, getCurDebugLoc(), AllocSize.getValueType(), > + ? ? ? ? ? ? ? ? ? ? ? ? ?AllocSize, > + ? ? ? ? ? ? ? ? ? ? ? ? ?DAG.getConstant(TySize, AllocSize.getValueType())); > + > + > + > ? MVT IntPtr = TLI.getPointerTy(); > ? if (IntPtr.bitsLT(AllocSize.getValueType())) > ? ? AllocSize = DAG.getNode(ISD::TRUNCATE, getCurDebugLoc(), > @@ -2771,9 +2778,6 @@ > ? ? AllocSize = DAG.getNode(ISD::ZERO_EXTEND, getCurDebugLoc(), > ? ? ? ? ? ? ? ? ? ? ? ? ? ? IntPtr, AllocSize); > > - ?AllocSize = DAG.getNode(ISD::MUL, getCurDebugLoc(), IntPtr, AllocSize, > - ? ? ? ? ? ? ? ? ? ? ? ? ?DAG.getIntPtrConstant(TySize)); > - > ? // Handle alignment. ?If the requested alignment is less than or equal to > ? // the stack alignment, ignore it. ?If the size is greater than or equal to > ? // the stack alignment, we note this in the DYNAMIC_STACKALLOC node. > @@ -5425,6 +5429,16 @@ > ?void SelectionDAGLowering::visitMalloc(MallocInst &I) { > ? SDValue Src = getValue(I.getOperand(0)); > > + ?// Scale up by the type size in the original i32 type width. ?Various > + ?// mid-level optimizers may make assumptions about demanded bits etc from the > + ?// i32-ness of the optimizer: we do not want to promote to i64 and then > + ?// multiply on 64-bit targets. > + ?// FIXME: Malloc inst should go away: PR715. > + ?uint64_t ElementSize = TD->getTypePaddedSize(I.getType()->getElementType()); > + ?if (ElementSize != 1) > + ? ?Src = DAG.getNode(ISD::MUL, getCurDebugLoc(), Src.getValueType(), > + ? ? ? ? ? ? ? ? ? ? ?Src, DAG.getConstant(ElementSize, Src.getValueType())); > + > ? MVT IntPtr = TLI.getPointerTy(); > > ? if (IntPtr.bitsLT(Src.getValueType())) > @@ -5432,11 +5446,6 @@ > ? else if (IntPtr.bitsGT(Src.getValueType())) > ? ? Src = DAG.getNode(ISD::ZERO_EXTEND, getCurDebugLoc(), IntPtr, Src); > > - ?// Scale the source by the type size. > - ?uint64_t ElementSize = TD->getTypePaddedSize(I.getType()->getElementType()); > - ?Src = DAG.getNode(ISD::MUL, getCurDebugLoc(), Src.getValueType(), > - ? ? ? ? ? ? ? ? ? ?Src, DAG.getIntPtrConstant(ElementSize)); > - > ? TargetLowering::ArgListTy Args; > ? TargetLowering::ArgListEntry Entry; > ? Entry.Node = Src; > > Added: llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll?rev=67093&view=auto > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll (added) > +++ llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll Tue Mar 17 14:36:00 2009 > @@ -0,0 +1,10 @@ > +; RUN: llvm-as < %s | llc -march=x86-64 | grep {shll.*3, %edi} > +; PR3829 > +; The generated code should multiply by 3 (sizeof i8*) as an i32, > +; not as an i64! > + > +define i8** @test(i32 %sz) { > + ? ? ? %sub = add i32 %sz, 536870911 ? ? ? ? ? ; [#uses=1] > + ? ? ? %call = malloc i8*, i32 %sub ? ? ? ? ? ?; [#uses=1] > + ? ? ? ret i8** %call > +} > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From sabre at nondot.org Tue Mar 17 15:23:44 2009 From: sabre at nondot.org (Chris Lattner) Date: Tue, 17 Mar 2009 20:23:44 -0000 Subject: [llvm-commits] [llvm] r67099 - /llvm/trunk/test/CodeGen/X86/alloca-align-rounding.ll Message-ID: <200903172023.n2HKNib9026041@zion.cs.uiuc.edu> Author: lattner Date: Tue Mar 17 15:23:43 2009 New Revision: 67099 URL: http://llvm.org/viewvc/llvm-project?rev=67099&view=rev Log: this is apparently passing now. Evan/Dan, please check to see if this is producing the expected code or not, I'm not sure what the test was intended to check. Modified: llvm/trunk/test/CodeGen/X86/alloca-align-rounding.ll Modified: llvm/trunk/test/CodeGen/X86/alloca-align-rounding.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/alloca-align-rounding.ll?rev=67099&r1=67098&r2=67099&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/alloca-align-rounding.ll (original) +++ llvm/trunk/test/CodeGen/X86/alloca-align-rounding.ll Tue Mar 17 15:23:43 2009 @@ -1,6 +1,5 @@ ; RUN: llvm-as < %s | llc -march=x86 -mtriple=i686-apple-darwin | grep and | count 1 ; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=i686-pc-linux | grep and | count 1 -; XFAIL: * declare void @bar(<2 x i64>* %n) From clattner at apple.com Tue Mar 17 15:23:56 2009 From: clattner at apple.com (Chris Lattner) Date: Tue, 17 Mar 2009 13:23:56 -0700 Subject: [llvm-commits] [llvm] r67093 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp test/CodeGen/X86/x86-64-malloc.ll In-Reply-To: <16e5fdf90903171307j5d3fdb8djf58de7f7346300b0@mail.gmail.com> References: <200903171936.n2HJa1mZ023983@zion.cs.uiuc.edu> <16e5fdf90903171307j5d3fdb8djf58de7f7346300b0@mail.gmail.com> Message-ID: <18B14E69-5F2F-4CB9-A561-159F416A0B6C@apple.com> Thanks Bill, fixed. On Mar 17, 2009, at 1:07 PM, Bill Wendling wrote: > Chris, > > This is causing this test to XPASS. Should it be un-XFAILed? > > Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/ > CodeGen/X86/dg.exp > ... > XPASS: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/ > CodeGen/X86/alloca-align-rounding.ll > > > -bw > > On Tue, Mar 17, 2009 at 12:36 PM, Chris Lattner > wrote: >> Author: lattner >> Date: Tue Mar 17 14:36:00 2009 >> New Revision: 67093 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=67093&view=rev >> Log: >> Fix codegen to compute the size of an allocation by multiplying the >> size by the array amount as an i32 value instead of promoting from >> i32 to i64 then doing the multiply. Not doing this broke wrap-around >> assumptions that the optimizers (validly) made. The ultimate real >> fix for this is to introduce i64 version of alloca and remove >> mallocinst. >> >> This fixes PR3829 >> >> Added: >> llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll >> Modified: >> llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp >> >> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=67093&r1=67092&r2=67093&view=diff >> >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp >> (original) >> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Tue >> Mar 17 14:36:00 2009 >> @@ -2763,6 +2763,13 @@ >> I.getAlignment()); >> >> SDValue AllocSize = getValue(I.getArraySize()); >> + >> + AllocSize = DAG.getNode(ISD::MUL, getCurDebugLoc(), >> AllocSize.getValueType(), >> + AllocSize, >> + DAG.getConstant(TySize, >> AllocSize.getValueType())); >> + >> + >> + >> MVT IntPtr = TLI.getPointerTy(); >> if (IntPtr.bitsLT(AllocSize.getValueType())) >> AllocSize = DAG.getNode(ISD::TRUNCATE, getCurDebugLoc(), >> @@ -2771,9 +2778,6 @@ >> AllocSize = DAG.getNode(ISD::ZERO_EXTEND, getCurDebugLoc(), >> IntPtr, AllocSize); >> >> - AllocSize = DAG.getNode(ISD::MUL, getCurDebugLoc(), IntPtr, >> AllocSize, >> - DAG.getIntPtrConstant(TySize)); >> - >> // Handle alignment. If the requested alignment is less than or >> equal to >> // the stack alignment, ignore it. If the size is greater than >> or equal to >> // the stack alignment, we note this in the DYNAMIC_STACKALLOC >> node. >> @@ -5425,6 +5429,16 @@ >> void SelectionDAGLowering::visitMalloc(MallocInst &I) { >> SDValue Src = getValue(I.getOperand(0)); >> >> + // Scale up by the type size in the original i32 type width. >> Various >> + // mid-level optimizers may make assumptions about demanded bits >> etc from the >> + // i32-ness of the optimizer: we do not want to promote to i64 >> and then >> + // multiply on 64-bit targets. >> + // FIXME: Malloc inst should go away: PR715. >> + uint64_t ElementSize = TD->getTypePaddedSize(I.getType()- >> >getElementType()); >> + if (ElementSize != 1) >> + Src = DAG.getNode(ISD::MUL, getCurDebugLoc(), >> Src.getValueType(), >> + Src, DAG.getConstant(ElementSize, >> Src.getValueType())); >> + >> MVT IntPtr = TLI.getPointerTy(); >> >> if (IntPtr.bitsLT(Src.getValueType())) >> @@ -5432,11 +5446,6 @@ >> else if (IntPtr.bitsGT(Src.getValueType())) >> Src = DAG.getNode(ISD::ZERO_EXTEND, getCurDebugLoc(), IntPtr, >> Src); >> >> - // Scale the source by the type size. >> - uint64_t ElementSize = TD->getTypePaddedSize(I.getType()- >> >getElementType()); >> - Src = DAG.getNode(ISD::MUL, getCurDebugLoc(), Src.getValueType(), >> - Src, DAG.getIntPtrConstant(ElementSize)); >> - >> TargetLowering::ArgListTy Args; >> TargetLowering::ArgListEntry Entry; >> Entry.Node = Src; >> >> Added: llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll?rev=67093&view=auto >> >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll (added) >> +++ llvm/trunk/test/CodeGen/X86/x86-64-malloc.ll Tue Mar 17 >> 14:36:00 2009 >> @@ -0,0 +1,10 @@ >> +; RUN: llvm-as < %s | llc -march=x86-64 | grep {shll.*3, %edi} >> +; PR3829 >> +; The generated code should multiply by 3 (sizeof i8*) as an i32, >> +; not as an i64! >> + >> +define i8** @test(i32 %sz) { >> + %sub = add i32 %sz, 536870911 ; [#uses=1] >> + %call = malloc i8*, i32 %sub ; [#uses=1] >> + ret i8** %call >> +} >> >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From isanbard at gmail.com Tue Mar 17 15:31:11 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 20:31:11 -0000 Subject: [llvm-commits] [llvm] r67100 - in /llvm/branches/Apple/Dib: lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp test/CodeGen/X86/alloca-align-rounding.ll test/CodeGen/X86/x86-64-malloc.ll Message-ID: <200903172031.n2HKVCUP026564@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 15:31:10 2009 New Revision: 67100 URL: http://llvm.org/viewvc/llvm-project?rev=67100&view=rev Log: --- Merging (from foreign repository) r67093 into '.': A test/CodeGen/X86/x86-64-malloc.ll U lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp U test/CodeGen/X86/alloca-align-rounding.ll Fix codegen to compute the size of an allocation by multiplying the size by the array amount as an i32 value instead of promoting from i32 to i64 then doing the multiply. Not doing this broke wrap-around assumptions that the optimizers (validly) made. The ultimate real fix for this is to introduce i64 version of alloca and remove mallocinst. This fixes PR3829 Added: llvm/branches/Apple/Dib/test/CodeGen/X86/x86-64-malloc.ll Modified: llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp llvm/branches/Apple/Dib/test/CodeGen/X86/alloca-align-rounding.ll Modified: llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=67100&r1=67099&r2=67100&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original) +++ llvm/branches/Apple/Dib/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Tue Mar 17 15:31:10 2009 @@ -2763,6 +2763,13 @@ I.getAlignment()); SDValue AllocSize = getValue(I.getArraySize()); + + AllocSize = DAG.getNode(ISD::MUL, getCurDebugLoc(), AllocSize.getValueType(), + AllocSize, + DAG.getConstant(TySize, AllocSize.getValueType())); + + + MVT IntPtr = TLI.getPointerTy(); if (IntPtr.bitsLT(AllocSize.getValueType())) AllocSize = DAG.getNode(ISD::TRUNCATE, getCurDebugLoc(), @@ -2771,9 +2778,6 @@ AllocSize = DAG.getNode(ISD::ZERO_EXTEND, getCurDebugLoc(), IntPtr, AllocSize); - AllocSize = DAG.getNode(ISD::MUL, getCurDebugLoc(), IntPtr, AllocSize, - DAG.getIntPtrConstant(TySize)); - // Handle alignment. If the requested alignment is less than or equal to // the stack alignment, ignore it. If the size is greater than or equal to // the stack alignment, we note this in the DYNAMIC_STACKALLOC node. @@ -5425,6 +5429,16 @@ void SelectionDAGLowering::visitMalloc(MallocInst &I) { SDValue Src = getValue(I.getOperand(0)); + // Scale up by the type size in the original i32 type width. Various + // mid-level optimizers may make assumptions about demanded bits etc from the + // i32-ness of the optimizer: we do not want to promote to i64 and then + // multiply on 64-bit targets. + // FIXME: Malloc inst should go away: PR715. + uint64_t ElementSize = TD->getTypePaddedSize(I.getType()->getElementType()); + if (ElementSize != 1) + Src = DAG.getNode(ISD::MUL, getCurDebugLoc(), Src.getValueType(), + Src, DAG.getConstant(ElementSize, Src.getValueType())); + MVT IntPtr = TLI.getPointerTy(); if (IntPtr.bitsLT(Src.getValueType())) @@ -5432,11 +5446,6 @@ else if (IntPtr.bitsGT(Src.getValueType())) Src = DAG.getNode(ISD::ZERO_EXTEND, getCurDebugLoc(), IntPtr, Src); - // Scale the source by the type size. - uint64_t ElementSize = TD->getTypePaddedSize(I.getType()->getElementType()); - Src = DAG.getNode(ISD::MUL, getCurDebugLoc(), Src.getValueType(), - Src, DAG.getIntPtrConstant(ElementSize)); - TargetLowering::ArgListTy Args; TargetLowering::ArgListEntry Entry; Entry.Node = Src; Modified: llvm/branches/Apple/Dib/test/CodeGen/X86/alloca-align-rounding.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/X86/alloca-align-rounding.ll?rev=67100&r1=67099&r2=67100&view=diff ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/X86/alloca-align-rounding.ll (original) +++ llvm/branches/Apple/Dib/test/CodeGen/X86/alloca-align-rounding.ll Tue Mar 17 15:31:10 2009 @@ -1,6 +1,5 @@ ; RUN: llvm-as < %s | llc -march=x86 -mtriple=i686-apple-darwin | grep and | count 1 ; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=i686-pc-linux | grep and | count 1 -; XFAIL: * declare void @bar(<2 x i64>* %n) Added: llvm/branches/Apple/Dib/test/CodeGen/X86/x86-64-malloc.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/X86/x86-64-malloc.ll?rev=67100&view=auto ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/X86/x86-64-malloc.ll (added) +++ llvm/branches/Apple/Dib/test/CodeGen/X86/x86-64-malloc.ll Tue Mar 17 15:31:10 2009 @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep {shll.*3, %edi} +; PR3829 +; The generated code should multiply by 3 (sizeof i8*) as an i32, +; not as an i64! + +define i8** @test(i32 %sz) { + %sub = add i32 %sz, 536870911 ; [#uses=1] + %call = malloc i8*, i32 %sub ; [#uses=1] + ret i8** %call +} From daniel at zuster.org Tue Mar 17 16:15:18 2009 From: daniel at zuster.org (Daniel Dunbar) Date: Tue, 17 Mar 2009 21:15:18 -0000 Subject: [llvm-commits] [llvm] r67103 - in /llvm/trunk: include/llvm/Support/Compiler.h lib/Support/raw_ostream.cpp Message-ID: <200903172115.n2HLFIua028351@zion.cs.uiuc.edu> Author: ddunbar Date: Tue Mar 17 16:15:18 2009 New Revision: 67103 URL: http://llvm.org/viewvc/llvm-project?rev=67103&view=rev Log: Add BUILTIN_EXPECT Support/Compiler macro. - Use for exceptional buffer conditions in raw_ostream:write to shave off a cycle or two. - Please rename if you have a better one. Modified: llvm/trunk/include/llvm/Support/Compiler.h llvm/trunk/lib/Support/raw_ostream.cpp Modified: llvm/trunk/include/llvm/Support/Compiler.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=67103&r1=67102&r2=67103&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/Compiler.h (original) +++ llvm/trunk/include/llvm/Support/Compiler.h Tue Mar 17 16:15:18 2009 @@ -29,6 +29,12 @@ #define ATTRIBUTE_USED #endif +#if (__GNUC__ >= 4) +#define BUILTIN_EXPECT(EXPR, VALUE) __builtin_expect((EXPR), (VALUE)) +#else +#define BUILTIN_EXPECT(EXPR, VALUE) (EXPR) +#endif + // C++ doesn't support 'extern template' of template specializations. GCC does, // but requires __extension__ before it. In the header, use this: // EXTERN_TEMPLATE_INSTANTIATION(class foo); Modified: llvm/trunk/lib/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=67103&r1=67102&r2=67103&view=diff ============================================================================== --- llvm/trunk/lib/Support/raw_ostream.cpp (original) +++ llvm/trunk/lib/Support/raw_ostream.cpp Tue Mar 17 16:15:18 2009 @@ -16,6 +16,7 @@ #include "llvm/System/Program.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Config/config.h" +#include "llvm/Support/Compiler.h" #include #if defined(HAVE_UNISTD_H) @@ -142,7 +143,7 @@ raw_ostream &raw_ostream::write(const char *Ptr, unsigned Size) { // Group exceptional cases into a single branch. - if (OutBufCur+Size > OutBufEnd) { + if (BUILTIN_EXPECT(OutBufCur+Size > OutBufEnd, false)) { if (Unbuffered) { write_impl(Ptr, Size); return *this; From edwintorok at gmail.com Tue Mar 17 16:36:47 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Tue, 17 Mar 2009 23:36:47 +0200 Subject: [llvm-commits] [llvm] r67103 - in /llvm/trunk: include/llvm/Support/Compiler.h lib/Support/raw_ostream.cpp In-Reply-To: <200903172115.n2HLFIua028351@zion.cs.uiuc.edu> References: <200903172115.n2HLFIua028351@zion.cs.uiuc.edu> Message-ID: <49C017EF.1070605@gmail.com> On 2009-03-17 23:15, Daniel Dunbar wrote: > Author: ddunbar > Date: Tue Mar 17 16:15:18 2009 > New Revision: 67103 > > URL: http://llvm.org/viewvc/llvm-project?rev=67103&view=rev > Log: > Add BUILTIN_EXPECT Support/Compiler macro. > - Use for exceptional buffer conditions in raw_ostream:write to shave > off a cycle or two. > > - Please rename if you have a better one. > > Modified: > llvm/trunk/include/llvm/Support/Compiler.h > llvm/trunk/lib/Support/raw_ostream.cpp > > Modified: llvm/trunk/include/llvm/Support/Compiler.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=67103&r1=67102&r2=67103&view=diff > > ============================================================================== > --- llvm/trunk/include/llvm/Support/Compiler.h (original) > +++ llvm/trunk/include/llvm/Support/Compiler.h Tue Mar 17 16:15:18 2009 > @@ -29,6 +29,12 @@ > #define ATTRIBUTE_USED > #endif > > +#if (__GNUC__ >= 4) > +#define BUILTIN_EXPECT(EXPR, VALUE) __builtin_expect((EXPR), (VALUE)) > AFAIK gcc 3.2+ supports __builtin_expect(): http://gcc.gnu.org/onlinedocs/gcc-3.2.3/gcc/Other-Builtins.html#Other Builtins So the ifdef could be: #if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) Best regards, --Edwin From isanbard at gmail.com Tue Mar 17 17:22:49 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:22:49 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67111 - in /llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03: ./ build_gcc Message-ID: <200903172222.n2HMMnsi031004@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:22:49 2009 New Revision: 67111 URL: http://llvm.org/viewvc/llvm-project?rev=67111&view=rev Log: Don't strip dSYM objects. Added: llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03/ - copied from r67102, llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-02/ Modified: llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03/build_gcc Modified: llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03/build_gcc URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03/build_gcc?rev=67111&r1=67102&r2=67111&view=diff ============================================================================== --- llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03/build_gcc (original) +++ llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03/build_gcc Tue Mar 17 17:22:49 2009 @@ -513,16 +513,20 @@ # Remove debugging information from DEST_DIR. if [ "x$LLVM_DEBUG" != "x1" ]; then - find $DEST_DIR -perm -0111 \! -name \*.dylib \! -name fixinc.sh \ - \! -name mkheaders \! -name libstdc++.dylib -type f -print \ + # LLVM LOCAL begin - don't strip dSYM objects + find $DEST_DIR -perm -0111 \! -path '*DWARF*' \! -name \*.dylib \ + \! -name fixinc.sh \! -name mkheaders \! -name libstdc++.dylib \ + -type f -print \ | xargs strip || exit 1 # APPLE LOCAL begin LLVM - Strip with -Sx instead of -SX - find $DEST_DIR \( -name \*.a -or -name \*.dylib \) \ - \! -name libgcc_s.10.*.dylib -type f -print \ + find $DEST_DIR \! -path '*DWARF*' \( -name \*.a -or -name \*.dylib \) \ + \! -name libgcc_s.10.*.dylib \! -name libstdc++.dylib -type f \ + -print \ | xargs strip -SX || exit 1 # APPLE LOCAL end LLVM - Strip with -Sx instead of -SX - find $DEST_DIR -name \*.a -type f -print \ + find $DEST_DIR \! -path '*DWARF*' -name \*.a -type f -print \ | xargs ranlib || exit 1 + # LLVM LOCAL end - don't strip dSYM objects fi # APPLE LOCAL begin LLVM From isanbard at gmail.com Tue Mar 17 17:24:12 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:24:12 -0000 Subject: [llvm-commits] [llvm] r67113 - /llvm/tags/Apple/llvmCore-2064-03/ Message-ID: <200903172224.n2HMODaD031071@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:24:12 2009 New Revision: 67113 URL: http://llvm.org/viewvc/llvm-project?rev=67113&view=rev Log: Copying llvmCore-2064 to llvmCore-2064-03 to sync with llvmgcc42-2064-03. Added: llvm/tags/Apple/llvmCore-2064-03/ - copied from r67112, llvm/tags/Apple/llvmCore-2064/ From isanbard at gmail.com Tue Mar 17 17:43:24 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:43:24 -0000 Subject: [llvm-commits] [llvm] r67114 - in /llvm/tags/Apple: llvmCore-2030-02/ llvmCore-2030.2/ Message-ID: <200903172243.n2HMhPS6032082@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:43:24 2009 New Revision: 67114 URL: http://llvm.org/viewvc/llvm-project?rev=67114&view=rev Log: Standardize the naming of subversions. Added: llvm/tags/Apple/llvmCore-2030.2/ - copied from r67113, llvm/tags/Apple/llvmCore-2030-02/ Removed: llvm/tags/Apple/llvmCore-2030-02/ From isanbard at gmail.com Tue Mar 17 17:43:39 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:43:39 -0000 Subject: [llvm-commits] [llvm] r67115 - in /llvm/tags/Apple: llvmCore-2030-03/ llvmCore-2030.3/ Message-ID: <200903172243.n2HMhd0g032098@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:43:39 2009 New Revision: 67115 URL: http://llvm.org/viewvc/llvm-project?rev=67115&view=rev Log: Standardize the naming of subversions. Added: llvm/tags/Apple/llvmCore-2030.3/ - copied from r67114, llvm/tags/Apple/llvmCore-2030-03/ Removed: llvm/tags/Apple/llvmCore-2030-03/ From isanbard at gmail.com Tue Mar 17 17:43:52 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:43:52 -0000 Subject: [llvm-commits] [llvm] r67117 - in /llvm/tags/Apple: llvmCore-2030-04/ llvmCore-2030.4/ Message-ID: <200903172243.n2HMhqkM032137@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:43:52 2009 New Revision: 67117 URL: http://llvm.org/viewvc/llvm-project?rev=67117&view=rev Log: Standardize the naming of subversions. Added: llvm/tags/Apple/llvmCore-2030.4/ - copied from r67116, llvm/tags/Apple/llvmCore-2030-04/ Removed: llvm/tags/Apple/llvmCore-2030-04/ From isanbard at gmail.com Tue Mar 17 17:44:09 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:44:09 -0000 Subject: [llvm-commits] [llvm] r67118 - in /llvm/tags/Apple: llvmCore-2064-03/ llvmCore-2064.3/ Message-ID: <200903172244.n2HMi9Fs032154@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:44:09 2009 New Revision: 67118 URL: http://llvm.org/viewvc/llvm-project?rev=67118&view=rev Log: Standardize the naming of subversions. Added: llvm/tags/Apple/llvmCore-2064.3/ - copied from r67117, llvm/tags/Apple/llvmCore-2064-03/ Removed: llvm/tags/Apple/llvmCore-2064-03/ From isanbard at gmail.com Tue Mar 17 17:45:15 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:45:15 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67119 - in /llvm-gcc-4.2/tags/Apple: llvmgcc42-2030-02/ llvmgcc42-2030.2/ Message-ID: <200903172245.n2HMjFOD032238@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:45:15 2009 New Revision: 67119 URL: http://llvm.org/viewvc/llvm-project?rev=67119&view=rev Log: Standardize the naming of subversions. Added: llvm-gcc-4.2/tags/Apple/llvmgcc42-2030.2/ - copied from r67118, llvm-gcc-4.2/tags/Apple/llvmgcc42-2030-02/ Removed: llvm-gcc-4.2/tags/Apple/llvmgcc42-2030-02/ From isanbard at gmail.com Tue Mar 17 17:45:30 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:45:30 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67121 - in /llvm-gcc-4.2/tags/Apple: llvmgcc42-2030-03/ llvmgcc42-2030.3/ Message-ID: <200903172245.n2HMjUeT032271@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:45:29 2009 New Revision: 67121 URL: http://llvm.org/viewvc/llvm-project?rev=67121&view=rev Log: Standardize the naming of subversions. Added: llvm-gcc-4.2/tags/Apple/llvmgcc42-2030.3/ - copied from r67120, llvm-gcc-4.2/tags/Apple/llvmgcc42-2030-03/ Removed: llvm-gcc-4.2/tags/Apple/llvmgcc42-2030-03/ From isanbard at gmail.com Tue Mar 17 17:45:52 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:45:52 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67122 - in /llvm-gcc-4.2/tags/Apple: llvmgcc42-2061-02/ llvmgcc42-2061.2/ Message-ID: <200903172245.n2HMjqwu032329@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:45:52 2009 New Revision: 67122 URL: http://llvm.org/viewvc/llvm-project?rev=67122&view=rev Log: Standardize the naming of subversions. Added: llvm-gcc-4.2/tags/Apple/llvmgcc42-2061.2/ - copied from r67121, llvm-gcc-4.2/tags/Apple/llvmgcc42-2061-02/ Removed: llvm-gcc-4.2/tags/Apple/llvmgcc42-2061-02/ From isanbard at gmail.com Tue Mar 17 17:46:09 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:46:09 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67123 - in /llvm-gcc-4.2/tags/Apple: llvmgcc42-2064-02/ llvmgcc42-2064.2/ Message-ID: <200903172246.n2HMk9JK032347@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:46:09 2009 New Revision: 67123 URL: http://llvm.org/viewvc/llvm-project?rev=67123&view=rev Log: Standardize the naming of subversions. Added: llvm-gcc-4.2/tags/Apple/llvmgcc42-2064.2/ - copied from r67122, llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-02/ Removed: llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-02/ From isanbard at gmail.com Tue Mar 17 17:46:25 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 22:46:25 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67124 - in /llvm-gcc-4.2/tags/Apple: llvmgcc42-2064-03/ llvmgcc42-2064.3/ Message-ID: <200903172246.n2HMkPxi032381@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 17:46:25 2009 New Revision: 67124 URL: http://llvm.org/viewvc/llvm-project?rev=67124&view=rev Log: Standardize the naming of subversions. Added: llvm-gcc-4.2/tags/Apple/llvmgcc42-2064.3/ - copied from r67123, llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03/ Removed: llvm-gcc-4.2/tags/Apple/llvmgcc42-2064-03/ From gohman at apple.com Tue Mar 17 17:47:01 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 17 Mar 2009 15:47:01 -0700 Subject: [llvm-commits] [llvm] r67099 - /llvm/trunk/test/CodeGen/X86/alloca-align-rounding.ll In-Reply-To: <200903172023.n2HKNib9026041@zion.cs.uiuc.edu> References: <200903172023.n2HKNib9026041@zion.cs.uiuc.edu> Message-ID: On Mar 17, 2009, at 1:23 PM, Chris Lattner wrote: > Author: lattner > Date: Tue Mar 17 15:23:43 2009 > New Revision: 67099 > > URL: http://llvm.org/viewvc/llvm-project?rev=67099&view=rev > Log: > this is apparently passing now. Evan/Dan, please check > to see if this is producing the expected code or not, I'm > not sure what the test was intended to check. Yes, the code looks like it should now. Dan From rafael.espindola at gmail.com Tue Mar 17 18:43:59 2009 From: rafael.espindola at gmail.com (Rafael Espindola) Date: Tue, 17 Mar 2009 23:43:59 -0000 Subject: [llvm-commits] [llvm] r67132 - in /llvm/trunk: lib/CodeGen/SelectionDAG/ test/CodeGen/CellSPU/ test/CodeGen/X86/ Message-ID: <200903172344.n2HNi000002199@zion.cs.uiuc.edu> Author: rafael Date: Tue Mar 17 18:43:59 2009 New Revision: 67132 URL: http://llvm.org/viewvc/llvm-project?rev=67132&view=rev Log: Don't force promotion of return arguments on the callee. Some architectures (like x86) don't require it. This fixes bug 3779. Added: llvm/trunk/test/CodeGen/X86/20090313-signext.ll Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp llvm/trunk/test/CodeGen/CellSPU/and_ops.ll llvm/trunk/test/CodeGen/CellSPU/eqv.ll llvm/trunk/test/CodeGen/CellSPU/icmp16.ll llvm/trunk/test/CodeGen/CellSPU/immed16.ll llvm/trunk/test/CodeGen/CellSPU/nand.ll llvm/trunk/test/CodeGen/CellSPU/or_ops.ll llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll llvm/trunk/test/CodeGen/CellSPU/stores.ll llvm/trunk/test/CodeGen/CellSPU/struct_1.ll llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll llvm/trunk/test/CodeGen/X86/const-select.ll llvm/trunk/test/CodeGen/X86/isel-sink2.ll llvm/trunk/test/CodeGen/X86/sext-trunc.ll llvm/trunk/test/CodeGen/X86/tls11.ll llvm/trunk/test/CodeGen/X86/tls12.ll Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Tue Mar 17 18:43:59 2009 @@ -979,15 +979,6 @@ for (unsigned j = 0, f = NumValues; j != f; ++j) { MVT VT = ValueVTs[j]; - // FIXME: C calling convention requires the return type to be promoted to - // at least 32-bit. But this is not necessary for non-C calling - // conventions. - if (VT.isInteger()) { - MVT MinVT = TLI.getRegisterType(MVT::i32); - if (VT.bitsLT(MinVT)) - VT = MinVT; - } - unsigned NumParts = TLI.getNumRegisters(VT); MVT PartVT = TLI.getRegisterType(VT); SmallVector Parts(NumParts); Modified: llvm/trunk/test/CodeGen/CellSPU/and_ops.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/and_ops.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/and_ops.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/and_ops.ll Tue Mar 17 18:43:59 2009 @@ -1,7 +1,7 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s -; RUN: grep and %t1.s | count 234 +; RUN: grep and %t1.s | count 230 ; RUN: grep andc %t1.s | count 85 -; RUN: grep andi %t1.s | count 37 +; RUN: grep andi %t1.s | count 35 ; RUN: grep andhi %t1.s | count 30 ; RUN: grep andbi %t1.s | count 4 Modified: llvm/trunk/test/CodeGen/CellSPU/eqv.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/eqv.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/eqv.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/eqv.ll Tue Mar 17 18:43:59 2009 @@ -1,8 +1,5 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s ; RUN: grep eqv %t1.s | count 18 -; RUN: grep xshw %t1.s | count 6 -; RUN: grep xsbh %t1.s | count 3 -; RUN: grep andi %t1.s | count 3 ; Test the 'eqv' instruction, whose boolean expression is: ; (a & b) | (~a & ~b), which simplifies to Modified: llvm/trunk/test/CodeGen/CellSPU/icmp16.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/icmp16.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/icmp16.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/icmp16.ll Tue Mar 17 18:43:59 2009 @@ -1,5 +1,5 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s -; RUN: grep ilh %t1.s | count 5 +; RUN: grep ilh %t1.s | count 15 ; RUN: grep ceqh %t1.s | count 29 ; RUN: grep ceqhi %t1.s | count 13 ; RUN: grep clgth %t1.s | count 15 Modified: llvm/trunk/test/CodeGen/CellSPU/immed16.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/immed16.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/immed16.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/immed16.ll Tue Mar 17 18:43:59 2009 @@ -1,5 +1,5 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s -; RUN: grep "ilh" %t1.s | count 5 +; RUN: grep "ilh" %t1.s | count 11 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128" target triple = "spu" Modified: llvm/trunk/test/CodeGen/CellSPU/nand.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/nand.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/nand.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/nand.ll Tue Mar 17 18:43:59 2009 @@ -1,8 +1,6 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s ; RUN: grep nand %t1.s | count 90 -; RUN: grep and %t1.s | count 94 -; RUN: grep xsbh %t1.s | count 2 -; RUN: grep xshw %t1.s | count 4 +; RUN: grep and %t1.s | count 90 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128" target triple = "spu" Modified: llvm/trunk/test/CodeGen/CellSPU/or_ops.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/or_ops.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/or_ops.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/or_ops.ll Tue Mar 17 18:43:59 2009 @@ -1,5 +1,4 @@ ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s -; RUN: grep and %t1.s | count 2 ; RUN: grep orc %t1.s | count 85 ; RUN: grep ori %t1.s | count 30 ; RUN: grep orhi %t1.s | count 30 Modified: llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll Tue Mar 17 18:43:59 2009 @@ -3,8 +3,6 @@ ; RUN: grep {shlhi } %t1.s | count 3 ; RUN: grep {shl } %t1.s | count 9 ; RUN: grep {shli } %t1.s | count 3 -; RUN: grep {xshw } %t1.s | count 5 -; RUN: grep {and } %t1.s | count 5 ; RUN: grep {andi } %t1.s | count 2 ; RUN: grep {rotmi } %t1.s | count 2 ; RUN: grep {rotqmbyi } %t1.s | count 1 Modified: llvm/trunk/test/CodeGen/CellSPU/stores.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/stores.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/stores.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/stores.ll Tue Mar 17 18:43:59 2009 @@ -6,13 +6,13 @@ ; RUN: grep 771 %t1.s | count 4 ; RUN: grep 515 %t1.s | count 2 ; RUN: grep 1799 %t1.s | count 2 -; RUN: grep 1543 %t1.s | count 5 -; RUN: grep 1029 %t1.s | count 3 +; RUN: grep 1543 %t1.s | count 3 +; RUN: grep 1029 %t1.s | count 1 ; RUN: grep {shli.*, 4} %t1.s | count 4 ; RUN: grep stqx %t1.s | count 4 -; RUN: grep ilhu %t1.s | count 11 -; RUN: grep iohl %t1.s | count 8 -; RUN: grep shufb %t1.s | count 15 +; RUN: grep ilhu %t1.s | count 9 +; RUN: grep iohl %t1.s | count 6 +; RUN: grep shufb %t1.s | count 13 ; RUN: grep frds %t1.s | count 1 ; ModuleID = 'stores.bc' Modified: llvm/trunk/test/CodeGen/CellSPU/struct_1.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/struct_1.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/CellSPU/struct_1.ll (original) +++ llvm/trunk/test/CodeGen/CellSPU/struct_1.ll Tue Mar 17 18:43:59 2009 @@ -3,8 +3,6 @@ ; RUN: grep lqa %t1.s | count 5 ; RUN: grep lqd %t1.s | count 11 ; RUN: grep rotqbyi %t1.s | count 7 -; RUN: grep xshw %t1.s | count 1 -; RUN: grep andi %t1.s | count 5 ; RUN: grep cbd %t1.s | count 3 ; RUN: grep chd %t1.s | count 1 ; RUN: grep cwd %t1.s | count 3 @@ -14,8 +12,6 @@ ; RUN: grep ilhu %t2.s | count 16 ; RUN: grep lqd %t2.s | count 16 ; RUN: grep rotqbyi %t2.s | count 7 -; RUN: grep xshw %t2.s | count 1 -; RUN: grep andi %t2.s | count 5 ; RUN: grep cbd %t2.s | count 3 ; RUN: grep chd %t2.s | count 1 ; RUN: grep cwd %t2.s | count 3 Modified: llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll (original) +++ llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll Tue Mar 17 18:43:59 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -march=x86 | grep {movsbl} +; RUN: llvm-as < %s | llc -march=x86 | not grep {movsbl} @X = global i32 0 ; [#uses=1] Added: llvm/trunk/test/CodeGen/X86/20090313-signext.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/20090313-signext.ll?rev=67132&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/X86/20090313-signext.ll (added) +++ llvm/trunk/test/CodeGen/X86/20090313-signext.ll Tue Mar 17 18:43:59 2009 @@ -0,0 +1,18 @@ +; RUN: llvm-as < %s | llc -march=x86-64 > %t +; RUN: grep {movswl %ax, %edi} %t +; RUN: grep {movw x(%rip), %ax} %t + + at x = common global i16 0 + +define signext i16 @f() nounwind { +entry: + %0 = tail call signext i16 @h() nounwind + %1 = sext i16 %0 to i32 + tail call void @g(i32 %1) nounwind + %2 = load i16* @x, align 2 + ret i16 %2 +} + +declare signext i16 @h() + +declare void @g(i32) Modified: llvm/trunk/test/CodeGen/X86/const-select.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/const-select.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/const-select.ll (original) +++ llvm/trunk/test/CodeGen/X86/const-select.ll Tue Mar 17 18:43:59 2009 @@ -10,7 +10,7 @@ ret float %iftmp.0.0 } -; RUN: llvm-as < %s | llc | grep {movsbl.*(%e.x,%e.x,4), %eax} +; RUN: llvm-as < %s | llc | grep {movb.*(%e.x,%e.x,4), %al} define signext i8 @test(i8* nocapture %P, double %F) nounwind readonly { entry: %0 = fcmp olt double %F, 4.200000e+01 ; [#uses=1] Modified: llvm/trunk/test/CodeGen/X86/isel-sink2.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/isel-sink2.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/isel-sink2.ll (original) +++ llvm/trunk/test/CodeGen/X86/isel-sink2.ll Tue Mar 17 18:43:59 2009 @@ -1,5 +1,6 @@ -; RUN: llvm-as < %s | llc -march=x86 | grep {movzbl.7(%...)} -; RUN: llvm-as < %s | llc -march=x86 | not grep leal +; RUN: llvm-as < %s | llc -march=x86 > %t +; RUN: grep {movb.7(%...)} %t +; RUN: not grep leal %t define i8 @test(i32 *%P) nounwind { %Q = getelementptr i32* %P, i32 1 Modified: llvm/trunk/test/CodeGen/X86/sext-trunc.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/sext-trunc.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/sext-trunc.ll (original) +++ llvm/trunk/test/CodeGen/X86/sext-trunc.ll Tue Mar 17 18:43:59 2009 @@ -1,5 +1,6 @@ ; RUN: llvm-as < %s | llc -march=x86 > %t -; RUN: grep movsbl %t +; RUN: grep movb %t +; RUN: not grep movsbl %t ; RUN: not grep movz %t ; RUN: not grep and %t Modified: llvm/trunk/test/CodeGen/X86/tls11.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tls11.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/tls11.ll (original) +++ llvm/trunk/test/CodeGen/X86/tls11.ll Tue Mar 17 18:43:59 2009 @@ -1,5 +1,5 @@ ; RUN: llvm-as < %s | llc -march=x86 -mtriple=i386-linux-gnu > %t -; RUN: grep {movzwl %gs:i at NTPOFF, %eax} %t +; RUN: grep {movw %gs:i at NTPOFF, %ax} %t @i = thread_local global i16 15 Modified: llvm/trunk/test/CodeGen/X86/tls12.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tls12.ll?rev=67132&r1=67131&r2=67132&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/tls12.ll (original) +++ llvm/trunk/test/CodeGen/X86/tls12.ll Tue Mar 17 18:43:59 2009 @@ -1,5 +1,5 @@ ; RUN: llvm-as < %s | llc -march=x86 -mtriple=i386-linux-gnu > %t -; RUN: grep {movzbl %gs:i at NTPOFF, %eax} %t +; RUN: grep {movb %gs:i at NTPOFF, %al} %t @i = thread_local global i8 15 From sabre at nondot.org Tue Mar 17 18:58:30 2009 From: sabre at nondot.org (Chris Lattner) Date: Tue, 17 Mar 2009 23:58:30 -0000 Subject: [llvm-commits] [llvm] r67134 - in /llvm/trunk: lib/Transforms/Scalar/LoopStrengthReduce.cpp test/CodeGen/Generic/2009-03-17-LSR-APInt.ll Message-ID: <200903172358.n2HNwUAj002898@zion.cs.uiuc.edu> Author: lattner Date: Tue Mar 17 18:58:30 2009 New Revision: 67134 URL: http://llvm.org/viewvc/llvm-project?rev=67134&view=rev Log: LSR shouldn't ever try to hack on integer IV's larger than 64-bits. Right now it is not APInt clean, but even when it is it needs to be evaluated carefully to determine whether it is actually profitable. This fixes a crash on PR3806 Added: llvm/trunk/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll Modified: llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp Modified: llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp?rev=67134&r1=67133&r2=67134&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp Tue Mar 17 18:58:30 2009 @@ -592,6 +592,12 @@ SmallPtrSet &Processed) { if (!I->getType()->isInteger() && !isa(I->getType())) return false; // Void and FP expressions cannot be reduced. + + // LSR is not APInt clean, do not touch integers bigger than 64-bits. + if (I->getType()->isInteger() && + I->getType()->getPrimitiveSizeInBits() > 64) + return false; + if (!Processed.insert(I)) return true; // Instruction already handled. Added: llvm/trunk/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll?rev=67134&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll (added) +++ llvm/trunk/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll Tue Mar 17 18:58:30 2009 @@ -0,0 +1,92 @@ +; RUN: llvm-as < %s | llc +; PR3806 + + %struct..0__pthread_mutex_s = type { i32, i32, i32, i32, i32, i32, %struct.__pthread_list_t } + %struct.Alignment = type { i32 } + %struct.QDesignerFormWindowInterface = type { %struct.QWidget } + %struct.QFont = type { %struct.QFontPrivate*, i32 } + %struct.QFontPrivate = type opaque + %"struct.QHash >" = type { %"struct.QHash >::._120" } + %"struct.QHash >::._120" = type { %struct.QHashData* } + %struct.QHashData = type { %"struct.QHashData::Node"*, %"struct.QHashData::Node"**, %struct.Alignment, i32, i32, i16, i16, i32, i8 } + %"struct.QHashData::Node" = type { %"struct.QHashData::Node"*, i32 } + %"struct.QList" = type { %"struct.QList::._101" } + %"struct.QList::._101" = type { %struct.QListData } + %struct.QListData = type { %"struct.QListData::Data"* } + %"struct.QListData::Data" = type { %struct.Alignment, i32, i32, i32, i8, [1 x i8*] } + %struct.QObject = type { i32 (...)**, %struct.QObjectData* } + %struct.QObjectData = type { i32 (...)**, %struct.QObject*, %struct.QObject*, %"struct.QList", i32, i32 } + %struct.QPaintDevice.base = type { i32 (...)**, i16 } + %"struct.QPair" = type { i32, i32 } + %struct.QPalette = type { %struct.QPalettePrivate*, i32 } + %struct.QPalettePrivate = type opaque + %struct.QRect = type { i32, i32, i32, i32 } + %struct.QWidget = type { %struct.QObject, %struct.QPaintDevice.base, %struct.QWidgetData* } + %struct.QWidgetData = type { i64, i32, %struct.Alignment, i8, i8, i16, %struct.QRect, %struct.QPalette, %struct.QFont, %struct.QRect } + %struct.__pthread_list_t = type { %struct.__pthread_list_t*, %struct.__pthread_list_t* } + %struct.pthread_attr_t = type { i64, [48 x i8] } + %struct.pthread_mutex_t = type { %struct..0__pthread_mutex_s } + %"struct.qdesigner_internal::Grid" = type { i32, i32, %struct.QWidget**, i8*, i8* } + %"struct.qdesigner_internal::GridLayout" = type { %"struct.qdesigner_internal::Layout", %"struct.QPair", %"struct.qdesigner_internal::Grid"* } + %"struct.qdesigner_internal::Layout" = type { %struct.QObject, %"struct.QList", %struct.QWidget*, %"struct.QHash >", %struct.QWidget*, %struct.QDesignerFormWindowInterface*, i8, %"struct.QPair", %struct.QRect, i8 } + + at _ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once ; [#uses=0] + at _ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific ; [#uses=0] + at _ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific ; [#uses=0] + at _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)* @pthread_create ; [#uses=0] + at _ZL22__gthrw_pthread_cancelm = alias weak i32 (i64)* @pthread_cancel ; [#uses=0] + at _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_lock ; [#uses=0] + at _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_trylock ; [#uses=0] + at _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_unlock ; [#uses=0] + at _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%struct.pthread_mutex_t*, %struct.Alignment*)* @pthread_mutex_init ; [#uses=0] + at _ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create ; [#uses=0] + at _ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete ; [#uses=0] + at _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%struct.Alignment*)* @pthread_mutexattr_init ; [#uses=0] + at _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%struct.Alignment*, i32)* @pthread_mutexattr_settype ; [#uses=0] + at _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%struct.Alignment*)* @pthread_mutexattr_destroy ; [#uses=0] + +define void @_ZN18qdesigner_internal10GridLayout9buildGridEv(%"struct.qdesigner_internal::GridLayout"* %this) nounwind { +entry: + br label %bb44 + +bb44: ; preds = %bb47, %entry + %indvar = phi i128 [ %indvar.next144, %bb47 ], [ 0, %entry ] ; [#uses=2] + br i1 false, label %bb46, label %bb47 + +bb46: ; preds = %bb44 + %tmp = shl i128 %indvar, 64 ; [#uses=1] + %tmp96 = and i128 %tmp, 79228162495817593519834398720 ; [#uses=0] + br label %bb47 + +bb47: ; preds = %bb46, %bb44 + %indvar.next144 = add i128 %indvar, 1 ; [#uses=1] + br label %bb44 +} + +declare i32 @pthread_once(i32*, void ()*) + +declare i8* @pthread_getspecific(i32) + +declare i32 @pthread_setspecific(i32, i8*) + +declare i32 @pthread_create(i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*) + +declare i32 @pthread_cancel(i64) + +declare i32 @pthread_mutex_lock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_trylock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_unlock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_init(%struct.pthread_mutex_t*, %struct.Alignment*) + +declare i32 @pthread_key_create(i32*, void (i8*)*) + +declare i32 @pthread_key_delete(i32) + +declare i32 @pthread_mutexattr_init(%struct.Alignment*) + +declare i32 @pthread_mutexattr_settype(%struct.Alignment*, i32) + +declare i32 @pthread_mutexattr_destroy(%struct.Alignment*) From isanbard at gmail.com Tue Mar 17 19:13:43 2009 From: isanbard at gmail.com (Bill Wendling) Date: Tue, 17 Mar 2009 17:13:43 -0700 Subject: [llvm-commits] [llvm] r67132 - in /llvm/trunk: lib/CodeGen/SelectionDAG/ test/CodeGen/CellSPU/ test/CodeGen/X86/ In-Reply-To: <200903172344.n2HNi000002199@zion.cs.uiuc.edu> References: <200903172344.n2HNi000002199@zion.cs.uiuc.edu> Message-ID: <16e5fdf90903171713v44bb3e66gd818c3b8990bf86e@mail.gmail.com> Rafael, Your testcase here is failing on Darwin. Could you investigate please? Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/dg.exp ... FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/20090313-signext.ll Failed with exit(1) at line 3 while running: grep {movw x(%rip), %ax} 20090313-signext.ll.tmp child process exited abnormally -bw 2009/3/17 Rafael Espindola : > Author: rafael > Date: Tue Mar 17 18:43:59 2009 > New Revision: 67132 > > URL: http://llvm.org/viewvc/llvm-project?rev=67132&view=rev > Log: > Don't force promotion of return arguments on the callee. > Some architectures (like x86) don't require it. > This fixes bug 3779. > > > Added: > ? ?llvm/trunk/test/CodeGen/X86/20090313-signext.ll > Modified: > ? ?llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp > ? ?llvm/trunk/test/CodeGen/CellSPU/and_ops.ll > ? ?llvm/trunk/test/CodeGen/CellSPU/eqv.ll > ? ?llvm/trunk/test/CodeGen/CellSPU/icmp16.ll > ? ?llvm/trunk/test/CodeGen/CellSPU/immed16.ll > ? ?llvm/trunk/test/CodeGen/CellSPU/nand.ll > ? ?llvm/trunk/test/CodeGen/CellSPU/or_ops.ll > ? ?llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll > ? ?llvm/trunk/test/CodeGen/CellSPU/stores.ll > ? ?llvm/trunk/test/CodeGen/CellSPU/struct_1.ll > ? ?llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll > ? ?llvm/trunk/test/CodeGen/X86/const-select.ll > ? ?llvm/trunk/test/CodeGen/X86/isel-sink2.ll > ? ?llvm/trunk/test/CodeGen/X86/sext-trunc.ll > ? ?llvm/trunk/test/CodeGen/X86/tls11.ll > ? ?llvm/trunk/test/CodeGen/X86/tls12.ll > > Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original) > +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Tue Mar 17 18:43:59 2009 > @@ -979,15 +979,6 @@ > ? ? for (unsigned j = 0, f = NumValues; j != f; ++j) { > ? ? ? MVT VT = ValueVTs[j]; > > - ? ? ?// FIXME: C calling convention requires the return type to be promoted to > - ? ? ?// at least 32-bit. But this is not necessary for non-C calling > - ? ? ?// conventions. > - ? ? ?if (VT.isInteger()) { > - ? ? ? ?MVT MinVT = TLI.getRegisterType(MVT::i32); > - ? ? ? ?if (VT.bitsLT(MinVT)) > - ? ? ? ? ?VT = MinVT; > - ? ? ?} > - > ? ? ? unsigned NumParts = TLI.getNumRegisters(VT); > ? ? ? MVT PartVT = TLI.getRegisterType(VT); > ? ? ? SmallVector Parts(NumParts); > > Modified: llvm/trunk/test/CodeGen/CellSPU/and_ops.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/and_ops.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/and_ops.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/and_ops.ll Tue Mar 17 18:43:59 2009 > @@ -1,7 +1,7 @@ > ?; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s > -; RUN: grep and ? ?%t1.s | count 234 > +; RUN: grep and ? ?%t1.s | count 230 > ?; RUN: grep andc ? %t1.s | count 85 > -; RUN: grep andi ? %t1.s | count 37 > +; RUN: grep andi ? %t1.s | count 35 > ?; RUN: grep andhi ?%t1.s | count 30 > ?; RUN: grep andbi ?%t1.s | count 4 > > > Modified: llvm/trunk/test/CodeGen/CellSPU/eqv.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/eqv.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/eqv.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/eqv.ll Tue Mar 17 18:43:59 2009 > @@ -1,8 +1,5 @@ > ?; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s > ?; RUN: grep eqv ?%t1.s | count 18 > -; RUN: grep xshw %t1.s | count 6 > -; RUN: grep xsbh %t1.s | count 3 > -; RUN: grep andi %t1.s | count 3 > > ?; Test the 'eqv' instruction, whose boolean expression is: > ?; (a & b) | (~a & ~b), which simplifies to > > Modified: llvm/trunk/test/CodeGen/CellSPU/icmp16.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/icmp16.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/icmp16.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/icmp16.ll Tue Mar 17 18:43:59 2009 > @@ -1,5 +1,5 @@ > ?; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s > -; RUN: grep ilh ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%t1.s | count 5 > +; RUN: grep ilh ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%t1.s | count 15 > ?; RUN: grep ceqh ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %t1.s | count 29 > ?; RUN: grep ceqhi ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%t1.s | count 13 > ?; RUN: grep clgth ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%t1.s | count 15 > > Modified: llvm/trunk/test/CodeGen/CellSPU/immed16.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/immed16.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/immed16.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/immed16.ll Tue Mar 17 18:43:59 2009 > @@ -1,5 +1,5 @@ > ?; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s > -; RUN: grep "ilh" %t1.s | count 5 > +; RUN: grep "ilh" %t1.s | count 11 > ?target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128" > ?target triple = "spu" > > > Modified: llvm/trunk/test/CodeGen/CellSPU/nand.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/nand.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/nand.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/nand.ll Tue Mar 17 18:43:59 2009 > @@ -1,8 +1,6 @@ > ?; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s > ?; RUN: grep nand ? %t1.s | count 90 > -; RUN: grep and ? ?%t1.s | count 94 > -; RUN: grep xsbh ? %t1.s | count 2 > -; RUN: grep xshw ? %t1.s | count 4 > +; RUN: grep and ? ?%t1.s | count 90 > ?target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128" > ?target triple = "spu" > > > Modified: llvm/trunk/test/CodeGen/CellSPU/or_ops.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/or_ops.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/or_ops.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/or_ops.ll Tue Mar 17 18:43:59 2009 > @@ -1,5 +1,4 @@ > ?; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s > -; RUN: grep and ? ?%t1.s | count 2 > ?; RUN: grep orc ? ?%t1.s | count 85 > ?; RUN: grep ori ? ?%t1.s | count 30 > ?; RUN: grep orhi ? %t1.s | count 30 > > Modified: llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/shift_ops.ll Tue Mar 17 18:43:59 2009 > @@ -3,8 +3,6 @@ > ?; RUN: grep {shlhi ? ? } ?%t1.s | count 3 > ?; RUN: grep {shl ? ? ? } ?%t1.s | count 9 > ?; RUN: grep {shli ? ? ?} ?%t1.s | count 3 > -; RUN: grep {xshw ? ? ?} ?%t1.s | count 5 > -; RUN: grep {and ? ? ? } ?%t1.s | count 5 > ?; RUN: grep {andi ? ? ?} ?%t1.s | count 2 > ?; RUN: grep {rotmi ? ? } ?%t1.s | count 2 > ?; RUN: grep {rotqmbyi ?} ?%t1.s | count 1 > > Modified: llvm/trunk/test/CodeGen/CellSPU/stores.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/stores.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/stores.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/stores.ll Tue Mar 17 18:43:59 2009 > @@ -6,13 +6,13 @@ > ?; RUN: grep 771 ? ? ? ? ? ? ? ? %t1.s | count 4 > ?; RUN: grep 515 ? ? ? ? ? ? ? ? %t1.s | count 2 > ?; RUN: grep 1799 ? ? ? ? ? ? ? ?%t1.s | count 2 > -; RUN: grep 1543 ? ? ? ? ? ? ? ?%t1.s | count 5 > -; RUN: grep 1029 ? ? ? ? ? ? ? ?%t1.s | count 3 > +; RUN: grep 1543 ? ? ? ? ? ? ? ?%t1.s | count 3 > +; RUN: grep 1029 ? ? ? ? ? ? ? ?%t1.s | count 1 > ?; RUN: grep {shli.*, 4} ? ? ? ? %t1.s | count 4 > ?; RUN: grep stqx ? ? ? ? ? ? ? ?%t1.s | count 4 > -; RUN: grep ilhu ? ? ? ? ? ? ? ?%t1.s | count 11 > -; RUN: grep iohl ? ? ? ? ? ? ? ?%t1.s | count 8 > -; RUN: grep shufb ? ? ? ? ? ? ? %t1.s | count 15 > +; RUN: grep ilhu ? ? ? ? ? ? ? ?%t1.s | count 9 > +; RUN: grep iohl ? ? ? ? ? ? ? ?%t1.s | count 6 > +; RUN: grep shufb ? ? ? ? ? ? ? %t1.s | count 13 > ?; RUN: grep frds ? ? ? ? ? ? ? ?%t1.s | count 1 > > ?; ModuleID = 'stores.bc' > > Modified: llvm/trunk/test/CodeGen/CellSPU/struct_1.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/CellSPU/struct_1.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/CellSPU/struct_1.ll (original) > +++ llvm/trunk/test/CodeGen/CellSPU/struct_1.ll Tue Mar 17 18:43:59 2009 > @@ -3,8 +3,6 @@ > ?; RUN: grep lqa ? ? %t1.s | count 5 > ?; RUN: grep lqd ? ? %t1.s | count 11 > ?; RUN: grep rotqbyi %t1.s | count 7 > -; RUN: grep xshw ? ?%t1.s | count 1 > -; RUN: grep andi ? ?%t1.s | count 5 > ?; RUN: grep cbd ? ? %t1.s | count 3 > ?; RUN: grep chd ? ? %t1.s | count 1 > ?; RUN: grep cwd ? ? %t1.s | count 3 > @@ -14,8 +12,6 @@ > ?; RUN: grep ilhu ? ?%t2.s | count 16 > ?; RUN: grep lqd ? ? %t2.s | count 16 > ?; RUN: grep rotqbyi %t2.s | count 7 > -; RUN: grep xshw ? ?%t2.s | count 1 > -; RUN: grep andi ? ?%t2.s | count 5 > ?; RUN: grep cbd ? ? %t2.s | count 3 > ?; RUN: grep chd ? ? %t2.s | count 1 > ?; RUN: grep cwd ? ? %t2.s | count 3 > > Modified: llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll (original) > +++ llvm/trunk/test/CodeGen/X86/2007-08-10-SignExtSubreg.ll Tue Mar 17 18:43:59 2009 > @@ -1,4 +1,4 @@ > -; RUN: llvm-as < %s | llc -march=x86 | grep {movsbl} > +; RUN: llvm-as < %s | llc -march=x86 | not grep {movsbl} > > ?@X = global i32 0 ? ? ? ? ? ? ? ; [#uses=1] > > > Added: llvm/trunk/test/CodeGen/X86/20090313-signext.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/20090313-signext.ll?rev=67132&view=auto > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/20090313-signext.ll (added) > +++ llvm/trunk/test/CodeGen/X86/20090313-signext.ll Tue Mar 17 18:43:59 2009 > @@ -0,0 +1,18 @@ > +; RUN: llvm-as < %s | llc -march=x86-64 > %t > +; RUN: grep {movswl ? ?%ax, %edi} %t > +; RUN: grep {movw ? ? ?x(%rip), %ax} %t > + > + at x = common global i16 0 > + > +define signext i16 @f() nounwind { > +entry: > + ? ? ? %0 = tail call signext i16 @h() nounwind > + ? ? ? %1 = sext i16 %0 to i32 > + ? ? ? tail call void @g(i32 %1) nounwind > + ? ? ? %2 = load i16* @x, align 2 > + ? ? ? ret i16 %2 > +} > + > +declare signext i16 @h() > + > +declare void @g(i32) > > Modified: llvm/trunk/test/CodeGen/X86/const-select.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/const-select.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/const-select.ll (original) > +++ llvm/trunk/test/CodeGen/X86/const-select.ll Tue Mar 17 18:43:59 2009 > @@ -10,7 +10,7 @@ > ? ? ? ?ret float %iftmp.0.0 > ?} > > -; RUN: llvm-as < %s | llc | grep {movsbl.*(%e.x,%e.x,4), %eax} > +; RUN: llvm-as < %s | llc | grep {movb.*(%e.x,%e.x,4), %al} > ?define signext i8 @test(i8* nocapture %P, double %F) nounwind readonly { > ?entry: > ? ? ? ?%0 = fcmp olt double %F, 4.200000e+01 ? ? ? ? ? ; [#uses=1] > > Modified: llvm/trunk/test/CodeGen/X86/isel-sink2.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/isel-sink2.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/isel-sink2.ll (original) > +++ llvm/trunk/test/CodeGen/X86/isel-sink2.ll Tue Mar 17 18:43:59 2009 > @@ -1,5 +1,6 @@ > -; RUN: llvm-as < %s | llc -march=x86 | grep {movzbl.7(%...)} > -; RUN: llvm-as < %s | llc -march=x86 | not grep leal > +; RUN: llvm-as < %s | llc -march=x86 > %t > +; RUN: grep {movb.7(%...)} %t > +; RUN: not grep leal %t > > ?define i8 @test(i32 *%P) nounwind { > ? %Q = getelementptr i32* %P, i32 1 > > Modified: llvm/trunk/test/CodeGen/X86/sext-trunc.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/sext-trunc.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/sext-trunc.ll (original) > +++ llvm/trunk/test/CodeGen/X86/sext-trunc.ll Tue Mar 17 18:43:59 2009 > @@ -1,5 +1,6 @@ > ?; RUN: llvm-as < %s | llc -march=x86 > %t > -; RUN: grep movsbl %t > +; RUN: grep movb %t > +; RUN: not grep movsbl %t > ?; RUN: not grep movz %t > ?; RUN: not grep and %t > > > Modified: llvm/trunk/test/CodeGen/X86/tls11.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tls11.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/tls11.ll (original) > +++ llvm/trunk/test/CodeGen/X86/tls11.ll Tue Mar 17 18:43:59 2009 > @@ -1,5 +1,5 @@ > ?; RUN: llvm-as < %s | llc -march=x86 -mtriple=i386-linux-gnu > %t > -; RUN: grep {movzwl ? ?%gs:i at NTPOFF, %eax} %t > +; RUN: grep {movw ? ? ?%gs:i at NTPOFF, %ax} %t > > ?@i = thread_local global i16 15 > > > Modified: llvm/trunk/test/CodeGen/X86/tls12.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tls12.ll?rev=67132&r1=67131&r2=67132&view=diff > > ============================================================================== > --- llvm/trunk/test/CodeGen/X86/tls12.ll (original) > +++ llvm/trunk/test/CodeGen/X86/tls12.ll Tue Mar 17 18:43:59 2009 > @@ -1,5 +1,5 @@ > ?; RUN: llvm-as < %s | llc -march=x86 -mtriple=i386-linux-gnu > %t > -; RUN: grep {movzbl ? ?%gs:i at NTPOFF, %eax} %t > +; RUN: grep {movb ? ? ?%gs:i at NTPOFF, %al} %t > > ?@i = thread_local global i8 15 > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From dpatel at apple.com Tue Mar 17 19:14:07 2009 From: dpatel at apple.com (Devang Patel) Date: Wed, 18 Mar 2009 00:14:07 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67136 - /llvm-gcc-4.2/branches/Apple/Dib/gcc/gcc.c Message-ID: <200903180014.n2I0E7pq003466@zion.cs.uiuc.edu> Author: dpatel Date: Tue Mar 17 19:14:07 2009 New Revision: 67136 URL: http://llvm.org/viewvc/llvm-project?rev=67136&view=rev Log: Ignore -g during Link Time Optimization. Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/gcc.c Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/gcc.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/gcc.c?rev=67136&r1=67135&r2=67136&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/gcc.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/gcc.c Tue Mar 17 19:14:07 2009 @@ -828,6 +828,7 @@ "%{O4|emit-llvm|flto:%{S:-emit-llvm} \ %{!S:-emit-llvm-bc \ %{c: %W{o*} %{!o*:-o %b%w.o}} \ + %{!emit-llvm:% Author: void Date: Tue Mar 17 19:16:36 2009 New Revision: 67137 URL: http://llvm.org/viewvc/llvm-project?rev=67137&view=rev Log: Temporary fix. I think Rafael wanted this to be Linux-only. Modified: llvm/trunk/test/CodeGen/X86/20090313-signext.ll Modified: llvm/trunk/test/CodeGen/X86/20090313-signext.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/20090313-signext.ll?rev=67137&r1=67136&r2=67137&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/20090313-signext.ll (original) +++ llvm/trunk/test/CodeGen/X86/20090313-signext.ll Tue Mar 17 19:16:36 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -march=x86-64 > %t +; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=*-*-linux > %t ; RUN: grep {movswl %ax, %edi} %t ; RUN: grep {movw x(%rip), %ax} %t From isanbard at gmail.com Tue Mar 17 19:19:45 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 00:19:45 -0000 Subject: [llvm-commits] [llvm] r67138 - /llvm/trunk/test/CodeGen/X86/20090313-signext.ll Message-ID: <200903180019.n2I0JjtU003657@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 19:19:44 2009 New Revision: 67138 URL: http://llvm.org/viewvc/llvm-project?rev=67138&view=rev Log: A more proper -mtriple. Modified: llvm/trunk/test/CodeGen/X86/20090313-signext.ll Modified: llvm/trunk/test/CodeGen/X86/20090313-signext.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/20090313-signext.ll?rev=67138&r1=67137&r2=67138&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/20090313-signext.ll (original) +++ llvm/trunk/test/CodeGen/X86/20090313-signext.ll Tue Mar 17 19:19:44 2009 @@ -1,4 +1,4 @@ -; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=*-*-linux > %t +; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=x86_64-pc-linux > %t ; RUN: grep {movswl %ax, %edi} %t ; RUN: grep {movw x(%rip), %ax} %t From sabre at nondot.org Tue Mar 17 19:31:45 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 18 Mar 2009 00:31:45 -0000 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Message-ID: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> Author: lattner Date: Tue Mar 17 19:31:45 2009 New Revision: 67139 URL: http://llvm.org/viewvc/llvm-project?rev=67139&view=rev Log: Fix PR3807 by inserting 'insertelement' instructions in the normal dest of an invoke instead of after the invoke (in its block), which is invalid. Added: llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=67139&r1=67138&r2=67139&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Tue Mar 17 19:31:45 2009 @@ -798,9 +798,13 @@ // Replace by null for now. Call->replaceAllUsesWith(Constant::getNullValue(Call->getType())); } else { - assert(isa(RetTy) && "Return type changed, but not into a" - "void. The old return type must have" - "been a struct!"); + assert(isa(RetTy) && + "Return type changed, but not into a void. The old return type" + " must have been a struct!"); + Instruction *InsertPt = Call; + if (InvokeInst *II = dyn_cast(Call)) + InsertPt = II->getNormalDest()->begin(); + // We used to return a struct. Instead of doing smart stuff with all the // uses of this struct, we will just rebuild it using // extract/insertvalue chaining and let instcombine clean that up. @@ -813,12 +817,13 @@ if (RetTypes.size() > 1) // We are still returning a struct, so extract the value from our // return value - V = ExtractValueInst::Create(New, NewRetIdxs[i], "newret", Call); + V = ExtractValueInst::Create(New, NewRetIdxs[i], "newret", + InsertPt); else // We are now returning a single element, so just insert that V = New; // Insert the value at the old position - RetVal = InsertValueInst::Create(RetVal, V, i, "oldret", Call); + RetVal = InsertValueInst::Create(RetVal, V, i, "oldret", InsertPt); } // Now, replace all uses of the old call instruction with the return // struct we built Added: llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll?rev=67139&view=auto ============================================================================== --- llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll (added) +++ llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Tue Mar 17 19:31:45 2009 @@ -0,0 +1,15 @@ +; RUN: llvm-as < %s | opt -deadargelim | llvm-dis +; PR3807 + +define internal { i32, i32 } @foo() { + ret {i32,i32} {i32 42, i32 4} +} + +define i32 @bar() { + %x = invoke {i32,i32} @foo() to label %T unwind label %T2 +T: + %y = extractvalue {i32,i32} %x, 1 + ret i32 %y +T2: + unreachable +} From evan.cheng at apple.com Tue Mar 17 19:42:41 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 18 Mar 2009 00:42:41 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67141 - in /llvm-gcc-4.2/trunk/gcc: llvm-convert.cpp llvm-debug.cpp llvm-debug.h Message-ID: <200903180042.n2I0ggYw004478@zion.cs.uiuc.edu> Author: evancheng Date: Tue Mar 17 19:42:41 2009 New Revision: 67141 URL: http://llvm.org/viewvc/llvm-project?rev=67141&view=rev Log: Backing out 67095, 66925, and 66861 for now. These break a bunch of stuff, including debug llvm-gcc build. Devang, please fix and re-commit the patches. Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp llvm-gcc-4.2/trunk/gcc/llvm-debug.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=67141&r1=67140&r2=67141&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Tue Mar 17 19:42:41 2009 @@ -714,9 +714,6 @@ } Function *TreeToLLVM::EmitFunction() { - if (TheDebugInfo) - TheDebugInfo->ClearVarCache(); - // Set up parameters and prepare for return, for the function. StartFunctionBody(); @@ -724,52 +721,12 @@ basic_block bb; edge e; edge_iterator ei; - tree stmt_block = NULL_TREE; - unsigned RegionCount = 0; FOR_EACH_BB (bb) { for (block_stmt_iterator bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) { MemRef DestLoc; tree stmt = bsi_stmt (bsi); - // FIXME : Optimizer and code generator are not doing the right thing yet - // while dealing with variable's debug info locations. - tree new_stmt_block = TREE_BLOCK (stmt); - if (TheDebugInfo && new_stmt_block && !optimize) { - if (stmt_block == NULL_TREE) { - // This is beginning of function. llvm.dbg.func.start is emitted so - // no need to emit llvm.dbg.region.start here. - tree t = new_stmt_block; - while (TREE_CODE (BLOCK_SUPERCONTEXT (t)) != FUNCTION_DECL) { - TheDebugInfo->EmitRegionStart(Builder.GetInsertBlock()); - t = BLOCK_SUPERCONTEXT (t); - RegionCount++; - } - stmt_block = new_stmt_block; - } - else { - if (stmt_block != new_stmt_block) { - if (BLOCK_SUPERCONTEXT (new_stmt_block) == stmt_block) { - // Entering new scope. Emit llvm.dbg.func.start. - TheDebugInfo->EmitRegionStart(Builder.GetInsertBlock()); - RegionCount++; - } - else if (BLOCK_SUPERCONTEXT (new_stmt_block) == - BLOCK_SUPERCONTEXT (stmt_block)) { - // Entering new scope at the same level. End previous current - // region by emitting llvm.dbg.region.end. And emit - // llvm.dbg.region.start to start new region. - TheDebugInfo->EmitRegionEnd(Builder.GetInsertBlock()); - TheDebugInfo->EmitRegionStart(Builder.GetInsertBlock()); - } else { - // Leaving current scope. Emit llvm.dbg.region.end. - TheDebugInfo->EmitRegionEnd(Builder.GetInsertBlock()); - RegionCount--; - } - stmt_block = new_stmt_block; - } - } - } - + // If this stmt returns an aggregate value (e.g. a call whose result is // ignored), create a temporary to receive the value. Note that we don't // do this for MODIFY_EXPRs as an efficiency hack. @@ -788,13 +745,7 @@ EmitBlock(BasicBlock::Create("")); } } - - // Pop out of dbg info regions. - while(RegionCount) { - TheDebugInfo->EmitRegionEnd(Builder.GetInsertBlock()); - RegionCount--; - } - + // Wrap things up. return FinishFunctionBody(); } @@ -1589,6 +1540,17 @@ Builder.CreateStore(Constant::getNullValue(T), AI); } + if (TheDebugInfo) { + if (DECL_NAME(decl)) { + TheDebugInfo->EmitDeclare(decl, dwarf::DW_TAG_auto_variable, + Name, TREE_TYPE(decl), AI, + Builder.GetInsertBlock()); + } else if (TREE_CODE(decl) == RESULT_DECL) { + TheDebugInfo->EmitDeclare(decl, dwarf::DW_TAG_return_variable, + Name, TREE_TYPE(decl), AI, + Builder.GetInsertBlock()); + } + } } //===----------------------------------------------------------------------===// @@ -5747,7 +5709,6 @@ //===----------------------------------------------------------------------===// LValue TreeToLLVM::EmitLV_DECL(tree exp) { - if (TREE_CODE(exp) == PARM_DECL || TREE_CODE(exp) == VAR_DECL || TREE_CODE(exp) == CONST_DECL) { // If a static var's type was incomplete when the decl was written, @@ -5825,14 +5786,6 @@ Alignment = DECL_ALIGN(exp) / 8; } - if (TheDebugInfo) { - if (DECL_NAME(exp)) - TheDebugInfo->EmitDeclare(exp, dwarf::DW_TAG_auto_variable, - IDENTIFIER_POINTER (DECL_NAME (exp)), - TREE_TYPE(exp), Decl, - Builder.GetInsertBlock()); - } - return LValue(BitCastToType(Decl, PTy), Alignment); } Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp?rev=67141&r1=67140&r2=67141&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp Tue Mar 17 19:42:41 2009 @@ -294,11 +294,6 @@ assert(!RegionStack.empty() && "Region stack mismatch, stack empty!"); - // Check to see if the compile unit already has created this type. - llvm::DIVariable &Slot = VarCache[decl]; - if (!Slot.isNull()) - return; - expanded_location Loc = GetNodeLocation(decl, false); // Construct variable. @@ -307,8 +302,6 @@ getOrCreateCompileUnit(Loc.file), Loc.line, getOrCreateType(type)); - VarCache[decl] = D; - // Insert an llvm.dbg.declare into the current block. DebugFactory.InsertDeclare(AI, D, CurBB); } @@ -850,11 +843,6 @@ getOrCreateCompileUnit(main_input_filename, true); } -/// ClearDeclCache - Clear variable debug info cache. -void DebugInfo::ClearVarCache() { - VarCache.clear(); -} - /// getOrCreateCompileUnit - Get the compile unit from the cache or /// create a new one if necessary. DICompileUnit DebugInfo::getOrCreateCompileUnit(const char *FullPath, Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.h?rev=67141&r1=67140&r2=67141&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-debug.h (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-debug.h Tue Mar 17 19:42:41 2009 @@ -63,9 +63,6 @@ std::map TypeCache; // Cache of previously constructed // Types. - std::map VarCache; - // Cache of previously constructed - // vars in this function. std::vector RegionStack; // Stack to track declarative scopes. @@ -78,9 +75,6 @@ /// initialization is done. void Initialize(); - /// ClearDeclCache - Clear variable debug info cache. - void ClearVarCache(); - // Accessors. void setLocationFile(const char *FullPath) { CurFullPath = FullPath; } void setLocationLine(int LineNo) { CurLineNo = LineNo; } From sabre at nondot.org Tue Mar 17 19:43:53 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 18 Mar 2009 00:43:53 -0000 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll Message-ID: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> Author: lattner Date: Tue Mar 17 19:43:52 2009 New Revision: 67142 URL: http://llvm.org/viewvc/llvm-project?rev=67142&view=rev Log: Disable the "call to immediate" optimization on x86-64. It is not safe in general because the immediate could be an arbitrary value that does not fit in a 32-bit pcrel displacement. Conservatively fall back to loading the value into a register and calling through it. We still do the optzn on X86-32. Modified: llvm/trunk/lib/Target/X86/X86Instr64bit.td llvm/trunk/test/CodeGen/X86/call-imm.ll Modified: llvm/trunk/lib/Target/X86/X86Instr64bit.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Instr64bit.td?rev=67142&r1=67141&r2=67142&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86Instr64bit.td (original) +++ llvm/trunk/lib/Target/X86/X86Instr64bit.td Tue Mar 17 19:43:52 2009 @@ -109,9 +109,13 @@ XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, EFLAGS], Uses = [RSP] in { + + // NOTE: this pattern doesn't match "X86call imm", because we do not know + // that the offset between an arbitrary immediate and the call will fit in + // the 32-bit pcrel field that we have. def CALL64pcrel32 : I<0xE8, RawFrm, (outs), (ins i64i32imm:$dst, variable_ops), - "call\t${dst:call}", [(X86call imm:$dst)]>, + "call\t${dst:call}", []>, Requires<[In64BitMode]>; def CALL64r : I<0xFF, MRM2r, (outs), (ins GR64:$dst, variable_ops), "call\t{*}$dst", [(X86call GR64:$dst)]>; Modified: llvm/trunk/test/CodeGen/X86/call-imm.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/call-imm.ll?rev=67142&r1=67141&r2=67142&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/call-imm.ll (original) +++ llvm/trunk/test/CodeGen/X86/call-imm.ll Tue Mar 17 19:43:52 2009 @@ -1,6 +1,10 @@ -; RUN: llvm-as < %s | llc -march=x86 | grep call | not grep {*} -; RUN: llvm-as < %s | llc -march=x86 | grep call | grep 12345678 -; RUN: llvm-as < %s | llc -march=x86-64 | grep call | grep 12345678 +; RUN: llvm-as < %s | llc -march=x86 | grep {call.*12345678} + +; Call to immediate is not safe on x86-64 unless we *know* that the +; call will be within 32-bits pcrel from the dest immediate. + +; RUN: llvm-as < %s | llc -march=x86-64 | grep {call.*\*%rax} + ; PR3666 ; PR3773 From evan.cheng at apple.com Tue Mar 17 19:44:45 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 18 Mar 2009 00:44:45 -0000 Subject: [llvm-commits] [llvm] r67143 - in /llvm/trunk/test: FrontendC++/2009-02-16-CtorNames-dbg.cpp FrontendC++/2009-03-17-dbg.cpp FrontendC/2009-03-13-dbg.c Message-ID: <200903180044.n2I0ikGu004582@zion.cs.uiuc.edu> Author: evancheng Date: Tue Mar 17 19:44:45 2009 New Revision: 67143 URL: http://llvm.org/viewvc/llvm-project?rev=67143&view=rev Log: xfail these tests for now. Modified: llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp llvm/trunk/test/FrontendC/2009-03-13-dbg.c Modified: llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC%2B%2B/2009-02-16-CtorNames-dbg.cpp?rev=67143&r1=67142&r2=67143&view=diff ============================================================================== --- llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp (original) +++ llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp Tue Mar 17 19:44:45 2009 @@ -1,4 +1,5 @@ // RUN: %llvmgcc -S -g --emit-llvm %s -o - | grep "\~A" +// XFAIL: darwin class A { int i; public: Modified: llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC%2B%2B/2009-03-17-dbg.cpp?rev=67143&r1=67142&r2=67143&view=diff ============================================================================== --- llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp (original) +++ llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp Tue Mar 17 19:44:45 2009 @@ -1,4 +1,5 @@ // RUN: %llvmgxx -c -emit-llvm %s -o /dev/null -g +// XFAIL: * template inline void f(const T1&,const T2&) { } Modified: llvm/trunk/test/FrontendC/2009-03-13-dbg.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC/2009-03-13-dbg.c?rev=67143&r1=67142&r2=67143&view=diff ============================================================================== --- llvm/trunk/test/FrontendC/2009-03-13-dbg.c (original) +++ llvm/trunk/test/FrontendC/2009-03-13-dbg.c Tue Mar 17 19:44:45 2009 @@ -1,3 +1,4 @@ -// RUN: %llvmgcc %s -c -g -o /dev/null +// RUN: %llvmgcc %s -c -g -o /dev/null +// XFAIL: * void foo() {} From isanbard at gmail.com Tue Mar 17 19:48:45 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 00:48:45 -0000 Subject: [llvm-commits] [llvm] r67144 - in /llvm/branches/Apple/Dib: lib/Target/X86/X86Instr64bit.td lib/Transforms/IPO/DeadArgumentElimination.cpp lib/Transforms/Scalar/LoopStrengthReduce.cpp test/CodeGen/Generic/2009-03-17-LSR-APInt.ll test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Message-ID: <200903180048.n2I0mkgE004733@zion.cs.uiuc.edu> Author: void Date: Tue Mar 17 19:48:45 2009 New Revision: 67144 URL: http://llvm.org/viewvc/llvm-project?rev=67144&view=rev Log: --- Merging (from foreign repository) r67134 into '.': A test/CodeGen/Generic/2009-03-17-LSR-APInt.ll U lib/Transforms/Scalar/LoopStrengthReduce.cpp LSR shouldn't ever try to hack on integer IV's larger than 64-bits. Right now it is not APInt clean, but even when it is it needs to be evaluated carefully to determine whether it is actually profitable. This fixes a crash on PR3806 --- Merging (from foreign repository) r67139 into '.': A test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll U lib/Transforms/IPO/DeadArgumentElimination.cpp Skipped missing target: 'test/CodeGen/X86/call-imm.ll' Fix PR3807 by inserting 'insertelement' instructions in the normal dest of an invoke instead of after the invoke (in its block), which is invalid. --- Merging (from foreign repository) r67142 into '.': U lib/Target/X86/X86Instr64bit.td Disable the "call to immediate" optimization on x86-64. It is not safe in general because the immediate could be an arbitrary value that does not fit in a 32-bit pcrel displacement. Conservatively fall back to loading the value into a register and calling through it. We still do the optzn on X86-32. Added: llvm/branches/Apple/Dib/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll llvm/branches/Apple/Dib/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Modified: llvm/branches/Apple/Dib/lib/Target/X86/X86Instr64bit.td llvm/branches/Apple/Dib/lib/Transforms/IPO/DeadArgumentElimination.cpp llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp Modified: llvm/branches/Apple/Dib/lib/Target/X86/X86Instr64bit.td URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Target/X86/X86Instr64bit.td?rev=67144&r1=67143&r2=67144&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Target/X86/X86Instr64bit.td (original) +++ llvm/branches/Apple/Dib/lib/Target/X86/X86Instr64bit.td Tue Mar 17 19:48:45 2009 @@ -109,9 +109,13 @@ XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, EFLAGS], Uses = [RSP] in { + + // NOTE: this pattern doesn't match "X86call imm", because we do not know + // that the offset between an arbitrary immediate and the call will fit in + // the 32-bit pcrel field that we have. def CALL64pcrel32 : I<0xE8, RawFrm, (outs), (ins i64i32imm:$dst, variable_ops), - "call\t${dst:call}", [(X86call imm:$dst)]>, + "call\t${dst:call}", []>, Requires<[In64BitMode]>; def CALL64r : I<0xFF, MRM2r, (outs), (ins GR64:$dst, variable_ops), "call\t{*}$dst", [(X86call GR64:$dst)]>; Modified: llvm/branches/Apple/Dib/lib/Transforms/IPO/DeadArgumentElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=67144&r1=67143&r2=67144&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Transforms/IPO/DeadArgumentElimination.cpp (original) +++ llvm/branches/Apple/Dib/lib/Transforms/IPO/DeadArgumentElimination.cpp Tue Mar 17 19:48:45 2009 @@ -798,9 +798,13 @@ // Replace by null for now. Call->replaceAllUsesWith(Constant::getNullValue(Call->getType())); } else { - assert(isa(RetTy) && "Return type changed, but not into a" - "void. The old return type must have" - "been a struct!"); + assert(isa(RetTy) && + "Return type changed, but not into a void. The old return type" + " must have been a struct!"); + Instruction *InsertPt = Call; + if (InvokeInst *II = dyn_cast(Call)) + InsertPt = II->getNormalDest()->begin(); + // We used to return a struct. Instead of doing smart stuff with all the // uses of this struct, we will just rebuild it using // extract/insertvalue chaining and let instcombine clean that up. @@ -813,12 +817,13 @@ if (RetTypes.size() > 1) // We are still returning a struct, so extract the value from our // return value - V = ExtractValueInst::Create(New, NewRetIdxs[i], "newret", Call); + V = ExtractValueInst::Create(New, NewRetIdxs[i], "newret", + InsertPt); else // We are now returning a single element, so just insert that V = New; // Insert the value at the old position - RetVal = InsertValueInst::Create(RetVal, V, i, "oldret", Call); + RetVal = InsertValueInst::Create(RetVal, V, i, "oldret", InsertPt); } // Now, replace all uses of the old call instruction with the return // struct we built Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp?rev=67144&r1=67143&r2=67144&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp (original) +++ llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp Tue Mar 17 19:48:45 2009 @@ -550,6 +550,12 @@ SmallPtrSet &Processed) { if (!I->getType()->isInteger() && !isa(I->getType())) return false; // Void and FP expressions cannot be reduced. + + // LSR is not APInt clean, do not touch integers bigger than 64-bits. + if (I->getType()->isInteger() && + I->getType()->getPrimitiveSizeInBits() > 64) + return false; + if (!Processed.insert(I)) return true; // Instruction already handled. Added: llvm/branches/Apple/Dib/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll?rev=67144&view=auto ============================================================================== --- llvm/branches/Apple/Dib/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll (added) +++ llvm/branches/Apple/Dib/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll Tue Mar 17 19:48:45 2009 @@ -0,0 +1,92 @@ +; RUN: llvm-as < %s | llc +; PR3806 + + %struct..0__pthread_mutex_s = type { i32, i32, i32, i32, i32, i32, %struct.__pthread_list_t } + %struct.Alignment = type { i32 } + %struct.QDesignerFormWindowInterface = type { %struct.QWidget } + %struct.QFont = type { %struct.QFontPrivate*, i32 } + %struct.QFontPrivate = type opaque + %"struct.QHash >" = type { %"struct.QHash >::._120" } + %"struct.QHash >::._120" = type { %struct.QHashData* } + %struct.QHashData = type { %"struct.QHashData::Node"*, %"struct.QHashData::Node"**, %struct.Alignment, i32, i32, i16, i16, i32, i8 } + %"struct.QHashData::Node" = type { %"struct.QHashData::Node"*, i32 } + %"struct.QList" = type { %"struct.QList::._101" } + %"struct.QList::._101" = type { %struct.QListData } + %struct.QListData = type { %"struct.QListData::Data"* } + %"struct.QListData::Data" = type { %struct.Alignment, i32, i32, i32, i8, [1 x i8*] } + %struct.QObject = type { i32 (...)**, %struct.QObjectData* } + %struct.QObjectData = type { i32 (...)**, %struct.QObject*, %struct.QObject*, %"struct.QList", i32, i32 } + %struct.QPaintDevice.base = type { i32 (...)**, i16 } + %"struct.QPair" = type { i32, i32 } + %struct.QPalette = type { %struct.QPalettePrivate*, i32 } + %struct.QPalettePrivate = type opaque + %struct.QRect = type { i32, i32, i32, i32 } + %struct.QWidget = type { %struct.QObject, %struct.QPaintDevice.base, %struct.QWidgetData* } + %struct.QWidgetData = type { i64, i32, %struct.Alignment, i8, i8, i16, %struct.QRect, %struct.QPalette, %struct.QFont, %struct.QRect } + %struct.__pthread_list_t = type { %struct.__pthread_list_t*, %struct.__pthread_list_t* } + %struct.pthread_attr_t = type { i64, [48 x i8] } + %struct.pthread_mutex_t = type { %struct..0__pthread_mutex_s } + %"struct.qdesigner_internal::Grid" = type { i32, i32, %struct.QWidget**, i8*, i8* } + %"struct.qdesigner_internal::GridLayout" = type { %"struct.qdesigner_internal::Layout", %"struct.QPair", %"struct.qdesigner_internal::Grid"* } + %"struct.qdesigner_internal::Layout" = type { %struct.QObject, %"struct.QList", %struct.QWidget*, %"struct.QHash >", %struct.QWidget*, %struct.QDesignerFormWindowInterface*, i8, %"struct.QPair", %struct.QRect, i8 } + + at _ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once ; [#uses=0] + at _ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific ; [#uses=0] + at _ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific ; [#uses=0] + at _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)* @pthread_create ; [#uses=0] + at _ZL22__gthrw_pthread_cancelm = alias weak i32 (i64)* @pthread_cancel ; [#uses=0] + at _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_lock ; [#uses=0] + at _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_trylock ; [#uses=0] + at _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_unlock ; [#uses=0] + at _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%struct.pthread_mutex_t*, %struct.Alignment*)* @pthread_mutex_init ; [#uses=0] + at _ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create ; [#uses=0] + at _ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete ; [#uses=0] + at _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%struct.Alignment*)* @pthread_mutexattr_init ; [#uses=0] + at _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%struct.Alignment*, i32)* @pthread_mutexattr_settype ; [#uses=0] + at _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%struct.Alignment*)* @pthread_mutexattr_destroy ; [#uses=0] + +define void @_ZN18qdesigner_internal10GridLayout9buildGridEv(%"struct.qdesigner_internal::GridLayout"* %this) nounwind { +entry: + br label %bb44 + +bb44: ; preds = %bb47, %entry + %indvar = phi i128 [ %indvar.next144, %bb47 ], [ 0, %entry ] ; [#uses=2] + br i1 false, label %bb46, label %bb47 + +bb46: ; preds = %bb44 + %tmp = shl i128 %indvar, 64 ; [#uses=1] + %tmp96 = and i128 %tmp, 79228162495817593519834398720 ; [#uses=0] + br label %bb47 + +bb47: ; preds = %bb46, %bb44 + %indvar.next144 = add i128 %indvar, 1 ; [#uses=1] + br label %bb44 +} + +declare i32 @pthread_once(i32*, void ()*) + +declare i8* @pthread_getspecific(i32) + +declare i32 @pthread_setspecific(i32, i8*) + +declare i32 @pthread_create(i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*) + +declare i32 @pthread_cancel(i64) + +declare i32 @pthread_mutex_lock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_trylock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_unlock(%struct.pthread_mutex_t*) + +declare i32 @pthread_mutex_init(%struct.pthread_mutex_t*, %struct.Alignment*) + +declare i32 @pthread_key_create(i32*, void (i8*)*) + +declare i32 @pthread_key_delete(i32) + +declare i32 @pthread_mutexattr_init(%struct.Alignment*) + +declare i32 @pthread_mutexattr_settype(%struct.Alignment*, i32) + +declare i32 @pthread_mutexattr_destroy(%struct.Alignment*) Added: llvm/branches/Apple/Dib/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll?rev=67144&view=auto ============================================================================== --- llvm/branches/Apple/Dib/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll (added) +++ llvm/branches/Apple/Dib/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Tue Mar 17 19:48:45 2009 @@ -0,0 +1,15 @@ +; RUN: llvm-as < %s | opt -deadargelim | llvm-dis +; PR3807 + +define internal { i32, i32 } @foo() { + ret {i32,i32} {i32 42, i32 4} +} + +define i32 @bar() { + %x = invoke {i32,i32} @foo() to label %T unwind label %T2 +T: + %y = extractvalue {i32,i32} %x, 1 + ret i32 %y +T2: + unreachable +} From mrs at apple.com Tue Mar 17 20:31:09 2009 From: mrs at apple.com (Mike Stump) Date: Tue, 17 Mar 2009 18:31:09 -0700 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> Message-ID: On Mar 17, 2009, at 5:43 PM, Chris Lattner wrote: > Disable the "call to immediate" optimization on x86-64. I think it would be valid for any model other than -mcmodel=large, if people wanted to have -mcmodel support. From evan.cheng at apple.com Tue Mar 17 21:03:47 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 17 Mar 2009 19:03:47 -0700 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> Message-ID: <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> llvm only supports small code model fully. Medium and large code models are not fully baked. Perhaps this just need a Require<[SmallCode]>. It's true the call destination displacement can be beyond 4G. But in small code model that's undefined behavior anyway, right? Evan On Mar 17, 2009, at 6:31 PM, Mike Stump wrote: > On Mar 17, 2009, at 5:43 PM, Chris Lattner wrote: >> Disable the "call to immediate" optimization on x86-64. > > I think it would be valid for any model other than -mcmodel=large, if > people wanted to have -mcmodel support. > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From clattner at apple.com Tue Mar 17 21:17:07 2009 From: clattner at apple.com (Chris Lattner) Date: Tue, 17 Mar 2009 19:17:07 -0700 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> Message-ID: On Mar 17, 2009, at 7:03 PM, Evan Cheng wrote: > llvm only supports small code model fully. Medium and large code > models are not fully baked. Perhaps this just need a > Require<[SmallCode]>. It's true the call destination displacement can > be beyond 4G. But in small code model that's undefined behavior > anyway, right? Why does "call " imply that the address is in the text segment? I don't see what mcmodel has to do with this, nor do I understand why the optimization is that important. If we cared a lot about this for the JIT, then the client of the JIT should output an llvm::Function prototype object, then use EE->addGlobalMapping to set its address to the desired location. -Chris > > > Evan > > On Mar 17, 2009, at 6:31 PM, Mike Stump wrote: > >> On Mar 17, 2009, at 5:43 PM, Chris Lattner wrote: >>> Disable the "call to immediate" optimization on x86-64. >> >> I think it would be valid for any model other than -mcmodel=large, if >> people wanted to have -mcmodel support. >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Tue Mar 17 21:36:54 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Tue, 17 Mar 2009 19:36:54 -0700 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> Message-ID: On Mar 17, 2009, at 7:17 PM, Chris Lattner wrote: > > On Mar 17, 2009, at 7:03 PM, Evan Cheng wrote: > >> llvm only supports small code model fully. Medium and large code >> models are not fully baked. Perhaps this just need a >> Require<[SmallCode]>. It's true the call destination displacement can >> be beyond 4G. But in small code model that's undefined behavior >> anyway, right? > > Why does "call " imply that the address is in the > text segment? I don't see what mcmodel has to do with this, nor do I No it doesn't. But how would that work? > > understand why the optimization is that important. If we cared a lot It's not. Evan > > about this for the JIT, then the client of the JIT should output an > llvm::Function prototype object, then use EE->addGlobalMapping to set > its address to the desired location. > > -Chris > >> >> >> Evan >> >> On Mar 17, 2009, at 6:31 PM, Mike Stump wrote: >> >>> On Mar 17, 2009, at 5:43 PM, Chris Lattner wrote: >>>> Disable the "call to immediate" optimization on x86-64. >>> >>> I think it would be valid for any model other than -mcmodel=large, >>> if >>> people wanted to have -mcmodel support. >>> _______________________________________________ >>> llvm-commits mailing list >>> llvm-commits at cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Tue Mar 17 21:43:01 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 18 Mar 2009 02:43:01 -0000 Subject: [llvm-commits] [llvm] r67156 - /llvm/trunk/test/CodeGen/PowerPC/2009-03-17-LSRBug.ll Message-ID: <200903180243.n2I2h1wO008638@zion.cs.uiuc.edu> Author: evancheng Date: Tue Mar 17 21:43:01 2009 New Revision: 67156 URL: http://llvm.org/viewvc/llvm-project?rev=67156&view=rev Log: Add another test case for r64440. Added: llvm/trunk/test/CodeGen/PowerPC/2009-03-17-LSRBug.ll Added: llvm/trunk/test/CodeGen/PowerPC/2009-03-17-LSRBug.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/2009-03-17-LSRBug.ll?rev=67156&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/2009-03-17-LSRBug.ll (added) +++ llvm/trunk/test/CodeGen/PowerPC/2009-03-17-LSRBug.ll Tue Mar 17 21:43:01 2009 @@ -0,0 +1,51 @@ +; RUN: llvm-as < %s | llc -mtriple=powerpc-apple-darwin10 +; rdar://6692215 + +define fastcc void @_qsort(i8* %a, i32 %n, i32 %es, i32 (i8*, i8*)* %cmp, i32 %depth_limit) nounwind optsize ssp { +entry: + br i1 false, label %bb21, label %bb20.loopexit + +bb20.loopexit: ; preds = %entry + ret void + +bb21: ; preds = %entry + %0 = getelementptr i8* %a, i32 0 ; [#uses=2] + br label %bb35 + +bb29: ; preds = %bb35 + br i1 false, label %bb7.i252, label %bb34 + +bb7.i252: ; preds = %bb7.i252, %bb29 + %pj.0.rec.i247 = phi i32 [ %indvar.next488, %bb7.i252 ], [ 0, %bb29 ] ; [#uses=2] + %pi.0.i248 = getelementptr i8* %pa.1, i32 %pj.0.rec.i247 ; [#uses=0] + %indvar.next488 = add i32 %pj.0.rec.i247, 1 ; [#uses=1] + br i1 false, label %bb34, label %bb7.i252 + +bb34: ; preds = %bb7.i252, %bb29 + %indvar.next505 = add i32 %indvar504, 1 ; [#uses=1] + br label %bb35 + +bb35: ; preds = %bb34, %bb21 + %indvar504 = phi i32 [ %indvar.next505, %bb34 ], [ 0, %bb21 ] ; [#uses=2] + %pa.1 = phi i8* [ null, %bb34 ], [ %0, %bb21 ] ; [#uses=2] + %pb.0.rec = mul i32 %indvar504, %es ; [#uses=1] + br i1 false, label %bb43, label %bb29 + +bb43: ; preds = %bb43, %bb35 + br i1 false, label %bb50, label %bb43 + +bb50: ; preds = %bb43 + %1 = ptrtoint i8* %pa.1 to i32 ; [#uses=1] + %2 = sub i32 %1, 0 ; [#uses=2] + %3 = icmp sle i32 0, %2 ; [#uses=1] + %min = select i1 %3, i32 0, i32 %2 ; [#uses=1] + br label %bb7.i161 + +bb7.i161: ; preds = %bb7.i161, %bb50 + %pj.0.rec.i156 = phi i32 [ %indvar.next394, %bb7.i161 ], [ 0, %bb50 ] ; [#uses=2] + %.sum279 = sub i32 %pj.0.rec.i156, %min ; [#uses=1] + %pb.0.sum542 = add i32 %pb.0.rec, %.sum279 ; [#uses=1] + %pj.0.i158 = getelementptr i8* %0, i32 %pb.0.sum542 ; [#uses=0] + %indvar.next394 = add i32 %pj.0.rec.i156, 1 ; [#uses=1] + br label %bb7.i161 +} From evan.cheng at apple.com Tue Mar 17 21:43:10 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 18 Mar 2009 02:43:10 -0000 Subject: [llvm-commits] [llvm] r67157 - /llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp Message-ID: <200903180243.n2I2hBOl008652@zion.cs.uiuc.edu> Author: evancheng Date: Tue Mar 17 21:43:10 2009 New Revision: 67157 URL: http://llvm.org/viewvc/llvm-project?rev=67157&view=rev Log: Merge in 64440. Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp?rev=67157&r1=67156&r2=67157&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp (original) +++ llvm/branches/Apple/Dib/lib/Transforms/Scalar/LoopStrengthReduce.cpp Tue Mar 17 21:43:10 2009 @@ -433,7 +433,7 @@ // If Start contains an SCEVAddRecExpr from a different loop, other than an // outer loop of the current loop, reject it. SCEV has no concept of // operating on one loop at a time so don't confuse it with such expressions. - if (containsAddRecFromDifferentLoop(Start, L)) + if (containsAddRecFromDifferentLoop(AddRec->getOperand(0), L)) return false; Start = SE->getAddExpr(Start, AddRec->getOperand(0)); From clattner at apple.com Tue Mar 17 22:12:35 2009 From: clattner at apple.com (Chris Lattner) Date: Tue, 17 Mar 2009 20:12:35 -0700 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> Message-ID: <15CFFA0C-DDE9-4A66-9B9C-1DFA0D968D22@apple.com> On Mar 17, 2009, at 7:36 PM, Evan Cheng wrote: > On Mar 17, 2009, at 7:17 PM, Chris Lattner wrote: >> On Mar 17, 2009, at 7:03 PM, Evan Cheng wrote: >> >>> llvm only supports small code model fully. Medium and large code >>> models are not fully baked. Perhaps this just need a >>> Require<[SmallCode]>. It's true the call destination displacement >>> can >>> be beyond 4G. But in small code model that's undefined behavior >>> anyway, right? >> >> Why does "call " imply that the address is in >> the >> text segment? I don't see what mcmodel has to do with this, nor do I > > No it doesn't. But how would that work? Perhaps calling into device memory, firmware, or many other things. Even if it doesn't make "sense", we should not silently miscompile the program as we did before. -Chris From mrs at apple.com Tue Mar 17 22:12:58 2009 From: mrs at apple.com (Mike Stump) Date: Tue, 17 Mar 2009 20:12:58 -0700 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> Message-ID: <454BA79C-0B74-4661-9C4A-0828D20866C2@apple.com> On Mar 17, 2009, at 7:03 PM, Evan Cheng wrote: > It's true the call destination displacement can > be beyond 4G. But in small code model that's undefined behavior > anyway, right? I believe the limit is +/- 2GB. I'm not an expert, but, yes, as well for all other models, except large. From clattner at apple.com Tue Mar 17 22:31:48 2009 From: clattner at apple.com (Chris Lattner) Date: Tue, 17 Mar 2009 20:31:48 -0700 Subject: [llvm-commits] [llvm] r66827 - /llvm/trunk/include/llvm/Support/raw_ostream.h In-Reply-To: <6a8523d60903161903v193b4f65lfff442742de940a4@mail.gmail.com> References: <200903122202.n2CM2kKb018031@zion.cs.uiuc.edu> <39A2A5FE-B36E-4526-8588-97CA50A71553@apple.com> <6a8523d60903161903v193b4f65lfff442742de940a4@mail.gmail.com> Message-ID: <2ED081ED-31F2-4D6C-9BD2-7FCDC6A160FB@apple.com> On Mar 16, 2009, at 7:03 PM, Daniel Dunbar wrote: > This should be addressed. Look better? Looks great! Should the assert in SetBufferSize be removed? -Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090317/7e85fe53/attachment.html From wangmp at apple.com Wed Mar 18 01:24:04 2009 From: wangmp at apple.com (Mon P Wang) Date: Wed, 18 Mar 2009 06:24:04 -0000 Subject: [llvm-commits] [llvm] r67175 - in /llvm/trunk: lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp lib/CodeGen/SelectionDAG/LegalizeTypes.h lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp test/CodeGen/PowerPC/pr3711_widen_bit.ll Message-ID: <200903180624.n2I6O4lM016939@zion.cs.uiuc.edu> Author: wangmp Date: Wed Mar 18 01:24:04 2009 New Revision: 67175 URL: http://llvm.org/viewvc/llvm-project?rev=67175&view=rev Log: Added missing support for widening when splitting an unary op (PR3683) and expanding a bit convert (PR3711). In both cases, we extract the valid part of the widen vector and then do the conversion. Added: llvm/trunk/test/CodeGen/PowerPC/pr3711_widen_bit.ll Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp?rev=67175&r1=67174&r2=67175&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp Wed Mar 18 01:24:04 2009 @@ -677,6 +677,8 @@ case ISD::INSERT_VECTOR_ELT: Res = PromoteIntOp_INSERT_VECTOR_ELT(N, OpNo);break; case ISD::MEMBARRIER: Res = PromoteIntOp_MEMBARRIER(N); break; + case ISD::SCALAR_TO_VECTOR: + Res = PromoteIntOp_SCALAR_TO_VECTOR(N); break; case ISD::SELECT: Res = PromoteIntOp_SELECT(N, OpNo); break; case ISD::SELECT_CC: Res = PromoteIntOp_SELECT_CC(N, OpNo); break; case ISD::SETCC: Res = PromoteIntOp_SETCC(N, OpNo); break; @@ -872,6 +874,27 @@ array_lengthof(NewOps)); } +SDValue DAGTypeLegalizer::PromoteIntOp_SCALAR_TO_VECTOR(SDNode *N) { + // The vector type is legal but the element type is not. This implies + // that the vector is a power-of-two in length and that the element + // type does not have a strange size (eg: it is not i1). + MVT VecVT = N->getValueType(0); + unsigned NumElts = VecVT.getVectorNumElements(); + assert(!(NumElts & 1) && "Legal vector of one illegal element?"); + DebugLoc dl = N->getDebugLoc(); + + MVT OldVT = N->getOperand(0).getValueType(); + MVT NewVT = MVT::getIntegerVT(2 * OldVT.getSizeInBits()); + assert(OldVT.isSimple() && NewVT.isSimple()); + + SDValue ExtVal = DAG.getNode(ISD::ANY_EXTEND, dl, NewVT, N->getOperand(0)); + SDValue NewVec = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, + MVT::getVectorVT(NewVT, NumElts/2), ExtVal); + + // Convert the new vector to the old vector type. + return DAG.getNode(ISD::BIT_CONVERT, dl, VecVT, NewVec); +} + SDValue DAGTypeLegalizer::PromoteIntOp_SELECT(SDNode *N, unsigned OpNo) { assert(OpNo == 0 && "Only know how to promote condition"); Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h?rev=67175&r1=67174&r2=67175&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.h Wed Mar 18 01:24:04 2009 @@ -293,6 +293,7 @@ SDValue PromoteIntOp_CONVERT_RNDSAT(SDNode *N); SDValue PromoteIntOp_INSERT_VECTOR_ELT(SDNode *N, unsigned OpNo); SDValue PromoteIntOp_MEMBARRIER(SDNode *N); + SDValue PromoteIntOp_SCALAR_TO_VECTOR(SDNode *N); SDValue PromoteIntOp_SELECT(SDNode *N, unsigned OpNo); SDValue PromoteIntOp_SELECT_CC(SDNode *N, unsigned OpNo); SDValue PromoteIntOp_SETCC(SDNode *N, unsigned OpNo); Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp?rev=67175&r1=67174&r2=67175&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp Wed Mar 18 01:24:04 2009 @@ -75,6 +75,21 @@ Lo = DAG.getNode(ISD::BIT_CONVERT, dl, NOutVT, Lo); Hi = DAG.getNode(ISD::BIT_CONVERT, dl, NOutVT, Hi); return; + case WidenVector: { + assert(!(InVT.getVectorNumElements() & 1) && "Unsupported BIT_CONVERT"); + InOp = GetWidenedVector(InOp); + MVT InNVT = MVT::getVectorVT(InVT.getVectorElementType(), + InVT.getVectorNumElements()/2); + Lo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp, + DAG.getIntPtrConstant(0)); + Hi = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp, + DAG.getIntPtrConstant(InNVT.getVectorNumElements())); + if (TLI.isBigEndian()) + std::swap(Lo, Hi); + Lo = DAG.getNode(ISD::BIT_CONVERT, dl, NOutVT, Lo); + Hi = DAG.getNode(ISD::BIT_CONVERT, dl, NOutVT, Hi); + return; + } } // Lower the bit-convert to a store/load from the stack. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp?rev=67175&r1=67174&r2=67175&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp Wed Mar 18 01:24:04 2009 @@ -533,17 +533,51 @@ MVT LoVT, HiVT; DebugLoc dl = N->getDebugLoc(); GetSplitDestVTs(N->getValueType(0), LoVT, HiVT); - SDValue VLo, VHi; - GetSplitVector(N->getOperand(0), VLo, VHi); + SDValue DTyOpLo = DAG.getValueType(LoVT); SDValue DTyOpHi = DAG.getValueType(HiVT); - SDValue STyOpLo = DAG.getValueType(VLo.getValueType()); - SDValue STyOpHi = DAG.getValueType(VHi.getValueType()); SDValue RndOp = N->getOperand(3); SDValue SatOp = N->getOperand(4); ISD::CvtCode CvtCode = cast(N)->getCvtCode(); + // Split the input. + SDValue VLo, VHi; + MVT InVT = N->getOperand(0).getValueType(); + switch (getTypeAction(InVT)) { + default: assert(0 && "Unexpected type action!"); + case Legal: { + assert(LoVT == HiVT && "Legal non-power-of-two vector type?"); + MVT InNVT = MVT::getVectorVT(InVT.getVectorElementType(), + LoVT.getVectorNumElements()); + VLo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, N->getOperand(0), + DAG.getIntPtrConstant(0)); + VHi = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, N->getOperand(0), + DAG.getIntPtrConstant(InNVT.getVectorNumElements())); + break; + } + case SplitVector: + GetSplitVector(N->getOperand(0), VLo, VHi); + break; + case WidenVector: { + // If the result needs to be split and the input needs to be widened, + // the two types must have different lengths. Use the widened result + // and extract from it to do the split. + assert(LoVT == HiVT && "Legal non-power-of-two vector type?"); + SDValue InOp = GetWidenedVector(N->getOperand(0)); + MVT InNVT = MVT::getVectorVT(InVT.getVectorElementType(), + LoVT.getVectorNumElements()); + VLo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp, + DAG.getIntPtrConstant(0)); + VHi = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp, + DAG.getIntPtrConstant(InNVT.getVectorNumElements())); + break; + } + } + + SDValue STyOpLo = DAG.getValueType(VLo.getValueType()); + SDValue STyOpHi = DAG.getValueType(VHi.getValueType()); + Lo = DAG.getConvertRndSat(LoVT, dl, VLo, DTyOpLo, STyOpLo, RndOp, SatOp, CvtCode); Hi = DAG.getConvertRndSat(HiVT, dl, VHi, DTyOpHi, STyOpHi, RndOp, SatOp, @@ -697,6 +731,20 @@ case SplitVector: GetSplitVector(N->getOperand(0), Lo, Hi); break; + case WidenVector: { + // If the result needs to be split and the input needs to be widened, + // the two types must have different lengths. Use the widened result + // and extract from it to do the split. + assert(LoVT == HiVT && "Legal non-power-of-two vector type?"); + SDValue InOp = GetWidenedVector(N->getOperand(0)); + MVT InNVT = MVT::getVectorVT(InVT.getVectorElementType(), + LoVT.getVectorNumElements()); + Lo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp, + DAG.getIntPtrConstant(0)); + Hi = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, InNVT, InOp, + DAG.getIntPtrConstant(InNVT.getVectorNumElements())); + break; + } } Lo = DAG.getNode(N->getOpcode(), dl, LoVT, Lo); Added: llvm/trunk/test/CodeGen/PowerPC/pr3711_widen_bit.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/pr3711_widen_bit.ll?rev=67175&view=auto ============================================================================== --- llvm/trunk/test/CodeGen/PowerPC/pr3711_widen_bit.ll (added) +++ llvm/trunk/test/CodeGen/PowerPC/pr3711_widen_bit.ll Wed Mar 18 01:24:04 2009 @@ -0,0 +1,18 @@ +; RUN: llvm-as < %s | llc -march=ppc32 -mcpu=g5 + +; Test that causes a abort in expanding a bit convert due to a missing support +; for widening. + +define i32 @main() nounwind { +entry: + br i1 icmp ne (i32 trunc (i64 bitcast (<2 x i32> to i64) to i32), i32 2), label %bb, label %bb1 + +bb: ; preds = %entry + tail call void @abort() noreturn nounwind + unreachable + +bb1: ; preds = %entry + ret i32 0 +} + +declare void @abort() noreturn nounwind From daniel_dunbar at apple.com Wed Mar 18 02:45:03 2009 From: daniel_dunbar at apple.com (Daniel Dunbar) Date: Wed, 18 Mar 2009 00:45:03 -0700 Subject: [llvm-commits] [llvm] r66827 - /llvm/trunk/include/llvm/Support/raw_ostream.h In-Reply-To: <2ED081ED-31F2-4D6C-9BD2-7FCDC6A160FB@apple.com> References: <200903122202.n2CM2kKb018031@zion.cs.uiuc.edu> <39A2A5FE-B36E-4526-8588-97CA50A71553@apple.com> <6a8523d60903161903v193b4f65lfff442742de940a4@mail.gmail.com> <2ED081ED-31F2-4D6C-9BD2-7FCDC6A160FB@apple.com> Message-ID: No, it still holds (as much as it ever did); I think the buffer size can be as low as 4, I believe the only place that relies on this is the fast path for small strings in write(). - Daniel On Mar 17, 2009, at 8:31 PM, Chris Lattner wrote: > > On Mar 16, 2009, at 7:03 PM, Daniel Dunbar wrote: > >> This should be addressed. Look better? > > Looks great! Should the assert in SetBufferSize be removed? > > -Chris > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/5afa75b8/attachment.html From zhousheng00 at gmail.com Wed Mar 18 02:56:15 2009 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Wed, 18 Mar 2009 07:56:15 -0000 Subject: [llvm-commits] [llvm] r67180 - in /llvm/trunk: lib/Transforms/Utils/Local.cpp test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll Message-ID: <200903180756.n2I7uFwe025145@zion.cs.uiuc.edu> Author: sheng Date: Wed Mar 18 02:56:13 2009 New Revision: 67180 URL: http://llvm.org/viewvc/llvm-project?rev=67180&view=rev Log: Fix a bug. If I->use_empty(), this method should return false. Added: llvm/trunk/test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll Modified: llvm/trunk/lib/Transforms/Utils/Local.cpp Modified: llvm/trunk/lib/Transforms/Utils/Local.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Local.cpp?rev=67180&r1=67179&r2=67180&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/Local.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/Local.cpp Wed Mar 18 02:56:13 2009 @@ -262,6 +262,9 @@ if (DbgInUses) DbgInUses->clear(); + if (I->use_empty()) + return false; + for (Value::use_iterator UI = I->use_begin(), UE = I->use_end(); UI != UE; ++UI) { if (DbgInfoIntrinsic *DI = dyn_cast(*UI)) { Added: llvm/trunk/test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll?rev=67180&view=auto ============================================================================== --- llvm/trunk/test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll (added) +++ llvm/trunk/test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll Wed Mar 18 02:56:13 2009 @@ -0,0 +1,3961 @@ +; RUN: llvm-as < %s | opt -scalarrepl | llvm-dis | grep store | not grep undef + +; ModuleID = '' +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32" +target triple = "i386-pc-linux-gnu" + type { } ; type %0 + type { double, double } ; type %1 + type { i32, void ()* } ; type %2 + %llvm.dbg.anchor.type = type { i32, i32 } + %llvm.dbg.basictype.type = type { i32, %0*, i8*, %0*, i32, i64, i64, i64, i32, i32 } + %llvm.dbg.compile_unit.type = type { i32, %0*, i32, i8*, i8*, i8*, i1, i1, i8*, i32 } + %llvm.dbg.composite.type = type { i32, %0*, i8*, %0*, i32, i64, i64, i64, i32, %0*, %0*, i32 } + %llvm.dbg.derivedtype.type = type { i32, %0*, i8*, %0*, i32, i64, i64, i64, i32, %0* } + %llvm.dbg.global_variable.type = type { i32, %0*, %0*, i8*, i8*, i8*, %0*, i32, %0*, i1, i1, %0* } + %llvm.dbg.subprogram.type = type { i32, %0*, %0*, i8*, i8*, i8*, %0*, i32, %0*, i1, i1 } + %llvm.dbg.subrange.type = type { i32, i64, i64 } + %llvm.dbg.variable.type = type { i32, %0*, i8*, %0*, i32, %0* } + %struct..0._50 = type { i32 } + %struct..1__pthread_mutex_s = type { i32, i32, i32, i32, i32, %struct..0._50 } + %struct.__class_type_info_pseudo = type { %struct.__type_info_pseudo } + %struct.__locale_struct = type { [13 x %struct.locale_data*], i16*, i32*, i32*, [13 x i8*] } + %struct.__pthread_slist_t = type { %struct.__pthread_slist_t* } + %struct.__si_class_type_info_pseudo = type { %struct.__type_info_pseudo, %"struct.std::type_info"* } + %struct.__type_info_pseudo = type { i8*, i8* } + %struct.locale_data = type opaque + %"struct.polynomial" = type { i32 (...)**, double*, i32 } + %"struct.polynomial >" = type { i32 (...)**, %"struct.std::complex"*, i32 } + %struct.pthread_attr_t = type { i32, [32 x i8] } + %struct.pthread_mutex_t = type { %struct..1__pthread_mutex_s } + %struct.pthread_mutexattr_t = type { i32 } + %"struct.std::allocator" = type <{ i8 }> + %"struct.std::basic_ios >" = type { %"struct.std::ios_base", %"struct.std::basic_ostream >"*, i8, i8, %"struct.std::basic_streambuf >"*, %"struct.std::ctype"*, %"struct.std::num_get > >"*, %"struct.std::num_get > >"* } + %"struct.std::basic_ostream >" = type { i32 (...)**, %"struct.std::basic_ios >" } + %"struct.std::basic_streambuf >" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"struct.std::locale" } + %"struct.std::basic_string,std::allocator >::_Alloc_hider" = type { i8* } + %"struct.std::complex" = type { %1 } + %"struct.std::ctype" = type { %"struct.std::locale::facet", %struct.__locale_struct*, i8, i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8 } + %"struct.std::exception" = type { i32 (...)** } + %"struct.std::ios_base" = type { i32 (...)**, i32, i32, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"struct.std::locale" } + %"struct.std::ios_base::Init" = type <{ i8 }> + %"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"struct.std::ios_base"*, i32)*, i32, i32 } + %"struct.std::ios_base::_Words" = type { i8*, i32 } + %"struct.std::locale" = type { %"struct.std::locale::_Impl"* } + %"struct.std::locale::_Impl" = type { i32, %"struct.std::locale::facet"**, i32, %"struct.std::locale::facet"**, i8** } + %"struct.std::locale::facet" = type { i32 (...)**, i32 } + %"struct.std::num_get > >" = type { %"struct.std::locale::facet" } + %"struct.std::num_put > >" = type { %"struct.std::locale::facet" } + %"struct.std::overflow_error" = type { %"struct.std::runtime_error" } + %"struct.std::runtime_error" = type { %"struct.std::exception", %"struct.std::string" } + %"struct.std::string" = type { %"struct.std::basic_string,std::allocator >::_Alloc_hider" } + %"struct.std::type_info" = type { i32 (...)**, i8* } + at llvm.dbg.compile_units = linkonce constant %llvm.dbg.anchor.type { i32 458752, i32 17 }, section "llvm.metadata" ; <%llvm.dbg.anchor.type*> [#uses=1] + at .str = internal constant [13 x i8] c"fftbench.cpp\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at .str1 = internal constant [42 x i8] c"/developer/home2/zsth/test/debug/tmp3/X3/\00", section "llvm.metadata" ; <[42 x i8]*> [#uses=1] + at .str2 = internal constant [52 x i8] c"4.2.1 (Based on Apple Inc. build 5641) (LLVM build)\00", section "llvm.metadata" ; <[52 x i8]*> [#uses=1] + at llvm.dbg.compile_unit = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([13 x i8]* @.str, i32 0, i32 0), i8* getelementptr ([42 x i8]* @.str1, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 true, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str3 = internal constant [8 x i8] c"complex\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str4 = internal constant [110 x i8] c"/developer/home2/zsth/projects/llvm.org/install/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../include/c++/4.2.1\00", section "llvm.metadata" ; <[110 x i8]*> [#uses=1] + at llvm.dbg.compile_unit5 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([110 x i8]* @.str4, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str6 = internal constant [16 x i8] c"complex\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at .str7 = internal constant [15 x i8] c"complex double\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.basictype = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str7, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 128, i64 64, i64 0, i32 0, i32 3 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at .str8 = internal constant [9 x i8] c"_M_value\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at llvm.dbg.derivedtype = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str8, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1195, i64 128, i64 64, i64 0, i32 1, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype9 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype9 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite10 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprograms = linkonce constant %llvm.dbg.anchor.type { i32 458752, i32 46 }, section "llvm.metadata" ; <%llvm.dbg.anchor.type*> [#uses=1] + at llvm.dbg.subprogram = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1161, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite10 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str11 = internal constant [7 x i8] c"double\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at llvm.dbg.basictype12 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str11, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 64, i64 64, i64 0, i32 0, i32 4 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at llvm.dbg.array13 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype9 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite14 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array13 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram15 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1215, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite14 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str16 = internal constant [15 x i8] c"complex\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at .str18 = internal constant [14 x i8] c"complex float\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.basictype19 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str18, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 64, i64 32, i64 0, i32 0, i32 3 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at llvm.dbg.derivedtype20 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str8, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1042, i64 64, i64 32, i64 0, i32 1, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype19 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype21 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite171 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array22 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype21 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype19 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite23 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array22 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram24 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1007, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite23 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str25 = internal constant [6 x i8] c"float\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at llvm.dbg.basictype26 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str25, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, i32 4 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at llvm.dbg.array27 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype21 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype26 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype26 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite28 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array27 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram29 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1062, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite28 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype30 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 128, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype31 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype30 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array32 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype21 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite33 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array32 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram34 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1464, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite33 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str35 = internal constant [21 x i8] c"complex\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at .str37 = internal constant [20 x i8] c"complex long double\00", section "llvm.metadata" ; <[20 x i8]*> [#uses=1] + at llvm.dbg.basictype38 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([20 x i8]* @.str37, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 192, i64 32, i64 0, i32 0, i32 3 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at llvm.dbg.derivedtype39 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str8, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1348, i64 192, i64 32, i64 0, i32 1, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype38 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype40 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite122 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array41 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype40 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype38 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite42 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array41 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram43 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1314, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite42 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str44 = internal constant [12 x i8] c"long double\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.basictype45 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str44, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 96, i64 32, i64 0, i32 0, i32 4 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at llvm.dbg.array46 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype40 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype45 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype45 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite47 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array46 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram48 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1352, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite47 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype49 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 64, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite171 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype50 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype49 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array51 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype40 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype50 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite52 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array51 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram53 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1480, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite52 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array54 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype40 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite55 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array54 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram56 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1484, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite55 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype57 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype45 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array58 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype57 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype40 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite59 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array58 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str60 = internal constant [5 x i8] c"real\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str61 = internal constant [24 x i8] c"_ZNSt7complexIeE4realEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram62 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str61, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1359, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite59 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str63 = internal constant [9 x i8] c"stddef.h\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at .str64 = internal constant [88 x i8] c"/developer/home2/zsth/projects/llvm.org/install/lib/gcc/i686-pc-linux-gnu/4.2.1/include\00", section "llvm.metadata" ; <[88 x i8]*> [#uses=1] + at llvm.dbg.compile_unit65 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([9 x i8]* @.str63, i32 0, i32 0), i8* getelementptr ([88 x i8]* @.str64, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str66 = internal constant [8 x i8] c"float_t\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype67 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str66, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit65 to %0*), i32 214, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype45 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str68 = internal constant [10 x i8] c"mathdef.h\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str69 = internal constant [18 x i8] c"/usr/include/bits\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.compile_unit70 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([10 x i8]* @.str68, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str69, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str71 = internal constant [9 x i8] c"double_t\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at llvm.dbg.derivedtype72 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str71, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit70 to %0*), i32 36, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype67 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype73 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 96, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype72 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype74 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype73 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype75 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 192, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite122 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype76 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype75 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array77 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype74 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype76 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite78 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array77 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str79 = internal constant [25 x i8] c"_ZNKSt7complexIeE4realEv\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram80 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str79, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1363, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite78 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str81 = internal constant [5 x i8] c"imag\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str82 = internal constant [24 x i8] c"_ZNSt7complexIeE4imagEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram83 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str82, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1367, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite59 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str84 = internal constant [25 x i8] c"_ZNKSt7complexIeE4imagEv\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram85 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str84, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1371, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite78 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype86 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite122 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array87 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype86 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype40 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype45 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite88 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array87 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str89 = internal constant [10 x i8] c"operator=\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str90 = internal constant [21 x i8] c"_ZNSt7complexIeEaSEe\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram91 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str90, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1375, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite88 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str92 = internal constant [11 x i8] c"operator+=\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str93 = internal constant [21 x i8] c"_ZNSt7complexIeEpLEe\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram94 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str93, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1383, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite88 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str95 = internal constant [11 x i8] c"operator-=\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str96 = internal constant [21 x i8] c"_ZNSt7complexIeEmIEe\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram97 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str96, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1390, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite88 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str98 = internal constant [11 x i8] c"operator*=\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str99 = internal constant [21 x i8] c"_ZNSt7complexIeEmLEe\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram100 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str99, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1397, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite88 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str101 = internal constant [11 x i8] c"operator/=\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str102 = internal constant [21 x i8] c"_ZNSt7complexIeEdVEe\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram103 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str102, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1404, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite88 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite104 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 55, i64 0, i64 0, i64 0, i32 4, %0* null, %0* null, i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype105 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 8, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite104 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype106 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype105 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array107 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype86 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype40 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype106 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite108 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array107 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram109 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1335, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite108 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram110 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1337, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite108 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram111 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1339, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite108 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram112 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1341, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite108 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram113 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1343, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite108 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype114 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 192, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype38 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype115 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype114 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array116 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype115 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype76 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite117 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array116 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str118 = internal constant [6 x i8] c"__rep\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at .str119 = internal constant [26 x i8] c"_ZNKSt7complexIeE5__repEv\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram120 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str119, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1345, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite117 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array121 = internal constant [20 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype39 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram43 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram48 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram53 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram56 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram62 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram80 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram83 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram85 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram91 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram94 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram97 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram100 to %0*)! , %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram103 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram109 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram110 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram111 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram112 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram113 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram120 to %0*)], section "llvm.metadata" ; <[20 x %0*]*> [#uses=1] + at llvm.dbg.composite122 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([21 x i8]* @.str35, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1310, i64 192, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([20 x %0*]* @llvm.dbg.array121 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype123 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 192, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite122 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype124 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype123 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array125 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype21 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype124 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite126 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array125 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram127 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1468, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite126 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype128 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype26 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array129 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype128 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype21 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite130 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array129 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str131 = internal constant [24 x i8] c"_ZNSt7complexIfE4realEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram132 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str131, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1046, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite130 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype133 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype26 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype134 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype133 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype135 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype49 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array136 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype134 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype135 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite137 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array136 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str138 = internal constant [25 x i8] c"_ZNKSt7complexIfE4realEv\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram139 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str138, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1050, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite137 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str140 = internal constant [24 x i8] c"_ZNSt7complexIfE4imagEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram141 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str140, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1054, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite130 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str142 = internal constant [25 x i8] c"_ZNKSt7complexIfE4imagEv\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram143 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str142, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1058, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite137 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype144 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite171 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array145 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype144 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype21 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype26 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite146 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array145 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str147 = internal constant [21 x i8] c"_ZNSt7complexIfEaSEf\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram148 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str147, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1069, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite146 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str149 = internal constant [21 x i8] c"_ZNSt7complexIfEpLEf\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram150 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str149, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1077, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite146 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str151 = internal constant [21 x i8] c"_ZNSt7complexIfEmIEf\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram152 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str151, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1084, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite146 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str153 = internal constant [21 x i8] c"_ZNSt7complexIfEmLEf\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram154 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str153, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1091, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite146 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str155 = internal constant [21 x i8] c"_ZNSt7complexIfEdVEf\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram156 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str155, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1098, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite146 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array157 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype144 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype21 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype106 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite158 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array157 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram159 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1029, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite158 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram160 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1031, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite158 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram161 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1033, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite158 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram162 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1035, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite158 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram163 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1037, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite158 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype164 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 64, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype19 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype165 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype164 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array166 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype165 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype135 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite167 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array166 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str168 = internal constant [26 x i8] c"_ZNKSt7complexIfE5__repEv\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram169 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str168, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1039, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite167 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array170 = internal constant [20 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype20 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram24 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram29 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram34 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram127 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram132 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram139 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram141 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram143 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram148 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram150 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram152 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram154! to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram156 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram159 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram160 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram161 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram162 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram163 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram169 to %0*)], section "llvm.metadata" ; <[20 x %0*]*> [#uses=1] + at llvm.dbg.composite171 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str16, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1003, i64 64, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([20 x %0*]* @llvm.dbg.array170 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype172 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 64, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite171 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype173 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype172 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array174 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype9 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype173 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite175 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array174 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram176 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1472, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite175 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array177 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype9 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype124 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite178 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array177 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram179 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1476, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite178 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype180 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array181 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype180 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype9 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite182 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array181 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str183 = internal constant [24 x i8] c"_ZNSt7complexIdE4realEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram184 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str183, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1199, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite182 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype185 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 64, i64 64, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype186 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype185 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype187 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype30 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array188 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype186 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype187 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite189 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array188 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str190 = internal constant [25 x i8] c"_ZNKSt7complexIdE4realEv\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram191 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str190, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1203, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite189 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str192 = internal constant [24 x i8] c"_ZNSt7complexIdE4imagEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram193 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str192, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1207, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite182 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str194 = internal constant [25 x i8] c"_ZNKSt7complexIdE4imagEv\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram195 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str194, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1211, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite189 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype196 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array197 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype196 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype9 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite198 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array197 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str199 = internal constant [21 x i8] c"_ZNSt7complexIdEaSEd\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram200 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str199, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1222, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite198 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str201 = internal constant [21 x i8] c"_ZNSt7complexIdEpLEd\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram202 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str201, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1230, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite198 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str203 = internal constant [21 x i8] c"_ZNSt7complexIdEmIEd\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram204 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str203, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1237, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite198 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str205 = internal constant [21 x i8] c"_ZNSt7complexIdEmLEd\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram206 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str205, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1244, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite198 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str207 = internal constant [21 x i8] c"_ZNSt7complexIdEdVEd\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram208 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str207, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1251, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite198 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array209 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype196 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype9 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype106 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite210 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array209 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram211 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1182, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite210 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram212 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1184, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite210 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram213 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1186, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite210 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram214 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1188, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite210 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram215 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1190, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite210 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype216 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 128, i64 64, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype217 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype216 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array218 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype217 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype187 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite219 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array218 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str220 = internal constant [26 x i8] c"_ZNKSt7complexIdE5__repEv\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram221 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str220, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1192, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite219 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array222 = internal constant [20 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram15 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram176 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram179 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram184 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram191 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram193 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram195 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram200 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram202 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram204 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram206 to! %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram208 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram211 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram212 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram213 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram214 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram215 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram221 to %0*)], section "llvm.metadata" ; <[20 x %0*]*> [#uses=1] + at llvm.dbg.composite223 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str6, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1157, i64 128, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([20 x %0*]* @llvm.dbg.array222 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype224 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array225 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype224 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array225 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str226 = internal constant [22 x i8] c"_ZNSt7complexIdEC1ECd\00", section "llvm.metadata" ; <[22 x i8]*> [#uses=1] + at llvm.dbg.subprogram227 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([22 x i8]* @.str226, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1161, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str230 = internal constant [4 x i8] c"__z\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1] + at llvm.dbg.variable231 = internal constant %llvm.dbg.variable.type { i32 459009, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram227 to %0*), i8* getelementptr ([4 x i8]* @.str230, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1161, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.subprogram232 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str118, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str220, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1192, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite219 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram235 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str183, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1199, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite182 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram237 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str60, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str190, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1203, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite189 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram239 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str81, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str194, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1211, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite189 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str241 = internal constant [22 x i8] c"_ZNSt7complexIdEC1Edd\00", section "llvm.metadata" ; <[22 x i8]*> [#uses=1] + at llvm.dbg.subprogram242 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str3, i32 0, i32 0), i8* getelementptr ([22 x i8]* @.str241, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1215, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite14 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str244 = internal constant [4 x i8] c"__r\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1] + at llvm.dbg.subprogram248 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str199, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1222, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite198 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram252 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str101, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str207, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1251, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite198 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array255 = internal constant [1 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*)], section "llvm.metadata" ; <[1 x %0*]*> [#uses=1] + at llvm.dbg.composite256 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([1 x %0*]* @llvm.dbg.array255 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str257 = internal constant [14 x i8] c"random_double\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram258 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str257, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str257, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 55, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite256 to %0*), i1 true, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=0] + at .str259 = internal constant [7 x i8] c"result\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at _ZZL13random_doublevE4seed = internal global i32 1325 ; [#uses=14] + at .str266 = internal constant [19 x i8] c"polynomial\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at .str268 = internal constant [4 x i8] c"int\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1] + at llvm.dbg.basictype269 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str268, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, i32 5 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at llvm.dbg.array270 = internal constant [1 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[1 x %0*]*> [#uses=1] + at llvm.dbg.composite271 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([1 x %0*]* @llvm.dbg.array270 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype272 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite271 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype273 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype272 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str274 = internal constant [17 x i8] c"_vptr.polynomial\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.derivedtype275 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str274, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 84, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype273 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype276 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str277 = internal constant [8 x i8] c"m_coeff\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype278 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str277, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 164, i64 32, i64 32, i64 32, i32 2, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype276 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str279 = internal constant [13 x i8] c"unsigned int\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.basictype280 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str279, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, i32 7 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at .str281 = internal constant [7 x i8] c"size_t\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at llvm.dbg.derivedtype282 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str281, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit65 to %0*), i32 152, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str283 = internal constant [9 x i8] c"m_degree\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at llvm.dbg.derivedtype284 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str283, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 167, i64 32, i64 32, i64 64, i32 2, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype285 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array286 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite287 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array286 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str288 = internal constant [11 x i8] c"polynomial\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.subprogram289 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 211, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite287 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype290 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype185 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array291 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype290 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite292 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array291 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram293 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 220, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite292 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array294 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype186 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite295 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array294 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram296 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 232, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite295 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype297 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 96, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype298 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype297 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array299 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype298 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite300 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array299 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram301 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 242, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite300 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array302 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite303 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array302 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str304 = internal constant [12 x i8] c"~polynomial\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.subprogram305 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 252, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite303 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype306 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array307 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype306 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype298 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite308 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array307 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str309 = internal constant [27 x i8] c"_ZN10polynomialIdEaSERKS0_\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram310 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str309, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 259, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite308 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array311 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype186 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite312 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array311 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str313 = internal constant [11 x i8] c"initialize\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str314 = internal constant [35 x i8] c"_ZN10polynomialIdE10initializeERKd\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram315 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str313, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str313, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str314, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 203, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite312 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array316 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype306 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite317 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array316 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str318 = internal constant [8 x i8] c"stretch\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str319 = internal constant [29 x i8] c"_ZN10polynomialIdE7stretchEj\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram320 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str318, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str318, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str319, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 276, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite317 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype321 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype297 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array322 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype321 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite323 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array322 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str324 = internal constant [7 x i8] c"degree\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at .str325 = internal constant [29 x i8] c"_ZNK10polynomialIdE6degreeEv\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram326 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str324, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str324, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str325, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 111, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite323 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array327 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype321 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite328 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array327 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str329 = internal constant [4 x i8] c"get\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1] + at .str330 = internal constant [26 x i8] c"_ZNK10polynomialIdE3getEj\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram331 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str329, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str329, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str330, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 300, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite328 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array332 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype180 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite333 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array332 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str334 = internal constant [11 x i8] c"operator[]\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str335 = internal constant [23 x i8] c"_ZN10polynomialIdEixEj\00", section "llvm.metadata" ; <[23 x i8]*> [#uses=1] + at llvm.dbg.subprogram336 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([23 x i8]* @.str335, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 306, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite333 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array337 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype12 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype321 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype186 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite338 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array337 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str339 = internal constant [11 x i8] c"operator()\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str340 = internal constant [26 x i8] c"_ZNK10polynomialIdEclERKd\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram341 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str339, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str339, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str340, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 313, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite338 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array342 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype321 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite343 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array342 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str344 = internal constant [10 x i8] c"operator-\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str345 = internal constant [24 x i8] c"_ZNK10polynomialIdEngEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram346 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str345, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 335, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite343 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str347 = internal constant [10 x i8] c"operator+\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str348 = internal constant [24 x i8] c"_ZNK10polynomialIdEpsEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram349 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str348, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 346, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite343 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array350 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype321 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype298 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite351 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array350 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str352 = internal constant [28 x i8] c"_ZNK10polynomialIdEplERKS0_\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram353 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str352, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 353, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite351 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str354 = internal constant [28 x i8] c"_ZNK10polynomialIdEmiERKS0_\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram355 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str354, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 376, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite351 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array356 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite357 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array356 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str358 = internal constant [5 x i8] c"log2\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str359 = internal constant [26 x i8] c"_ZN10polynomialIdE4log2Ej\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram360 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str358, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str358, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str359, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 404, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite357 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array361 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite362 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array361 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str363 = internal constant [10 x i8] c"flip_bits\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str364 = internal constant [32 x i8] c"_ZN10polynomialIdE9flip_bitsEjj\00", section "llvm.metadata" ; <[32 x i8]*> [#uses=1] + at llvm.dbg.subprogram365 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str363, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str363, i32 0, i32 0), i8* getelementptr ([32 x i8]* @.str364, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 423, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite362 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array366 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite367 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array366 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str368 = internal constant [12 x i8] c"stretch_fft\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at .str369 = internal constant [34 x i8] c"_ZN10polynomialIdE11stretch_fftEv\00", section "llvm.metadata" ; <[34 x i8]*> [#uses=1] + at llvm.dbg.subprogram370 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str368, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str368, i32 0, i32 0), i8* getelementptr ([34 x i8]* @.str369, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 443, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite367 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str371 = internal constant [34 x i8] c"polynomial >\00", section "llvm.metadata" ; <[34 x i8]*> [#uses=1] + at llvm.dbg.derivedtype373 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str274, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 84, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype273 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype374 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str277, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 164, i64 32, i64 32, i64 32, i32 2, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype224 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype375 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str283, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 167, i64 32, i64 32, i64 64, i32 2, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype376 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array377 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite378 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array377 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram379 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 211, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite378 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array380 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype187 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite381 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array380 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram382 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 220, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite381 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array383 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite384 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array383 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram385 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 232, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite384 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype386 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 96, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype387 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype386 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array388 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype387 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite389 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array388 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram390 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 242, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite389 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array391 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite392 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array391 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram393 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 252, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite392 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype394 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array395 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype394 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype387 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite396 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array395 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str397 = internal constant [39 x i8] c"_ZN10polynomialISt7complexIdEEaSERKS2_\00", section "llvm.metadata" ; <[39 x i8]*> [#uses=1] + at llvm.dbg.subprogram398 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([39 x i8]* @.str397, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 259, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite396 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array399 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite400 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array399 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str401 = internal constant [49 x i8] c"_ZN10polynomialISt7complexIdEE10initializeERKS1_\00", section "llvm.metadata" ; <[49 x i8]*> [#uses=1] + at llvm.dbg.subprogram402 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str313, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str313, i32 0, i32 0), i8* getelementptr ([49 x i8]* @.str401, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 203, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite400 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array403 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype394 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite404 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array403 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str405 = internal constant [41 x i8] c"_ZN10polynomialISt7complexIdEE7stretchEj\00", section "llvm.metadata" ; <[41 x i8]*> [#uses=1] + at llvm.dbg.subprogram406 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str318, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str318, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str405, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 276, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite404 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype407 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype386 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array408 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype407 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite409 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array408 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str410 = internal constant [41 x i8] c"_ZNK10polynomialISt7complexIdEE6degreeEv\00", section "llvm.metadata" ; <[41 x i8]*> [#uses=1] + at llvm.dbg.subprogram411 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str324, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str324, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str410, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 111, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite409 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array412 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype407 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite413 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array412 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str414 = internal constant [38 x i8] c"_ZNK10polynomialISt7complexIdEE3getEj\00", section "llvm.metadata" ; <[38 x i8]*> [#uses=1] + at llvm.dbg.subprogram415 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str329, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str329, i32 0, i32 0), i8* getelementptr ([38 x i8]* @.str414, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 300, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite413 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array416 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype196 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite417 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array416 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str418 = internal constant [35 x i8] c"_ZN10polynomialISt7complexIdEEixEj\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram419 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str418, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 306, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite417 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array420 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype407 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite421 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array420 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str422 = internal constant [40 x i8] c"_ZNK10polynomialISt7complexIdEEclERKS1_\00", section "llvm.metadata" ; <[40 x i8]*> [#uses=1] + at llvm.dbg.subprogram423 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str339, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str339, i32 0, i32 0), i8* getelementptr ([40 x i8]* @.str422, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 313, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite421 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array424 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype407 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite425 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array424 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str426 = internal constant [36 x i8] c"_ZNK10polynomialISt7complexIdEEngEv\00", section "llvm.metadata" ; <[36 x i8]*> [#uses=1] + at llvm.dbg.subprogram427 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([36 x i8]* @.str426, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 335, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite425 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str428 = internal constant [36 x i8] c"_ZNK10polynomialISt7complexIdEEpsEv\00", section "llvm.metadata" ; <[36 x i8]*> [#uses=1] + at llvm.dbg.subprogram429 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([36 x i8]* @.str428, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 346, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite425 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array430 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype407 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype387 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite431 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array430 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str432 = internal constant [40 x i8] c"_ZNK10polynomialISt7complexIdEEplERKS2_\00", section "llvm.metadata" ; <[40 x i8]*> [#uses=1] + at llvm.dbg.subprogram433 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([40 x i8]* @.str432, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 353, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite431 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str434 = internal constant [40 x i8] c"_ZNK10polynomialISt7complexIdEEmiERKS2_\00", section "llvm.metadata" ; <[40 x i8]*> [#uses=1] + at llvm.dbg.subprogram435 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([40 x i8]* @.str434, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 376, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite431 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str436 = internal constant [38 x i8] c"_ZN10polynomialISt7complexIdEE4log2Ej\00", section "llvm.metadata" ; <[38 x i8]*> [#uses=1] + at llvm.dbg.subprogram437 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str358, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str358, i32 0, i32 0), i8* getelementptr ([38 x i8]* @.str436, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 404, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite357 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str438 = internal constant [44 x i8] c"_ZN10polynomialISt7complexIdEE9flip_bitsEjj\00", section "llvm.metadata" ; <[44 x i8]*> [#uses=1] + at llvm.dbg.subprogram439 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str363, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str363, i32 0, i32 0), i8* getelementptr ([44 x i8]* @.str438, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 423, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite362 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array440 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite441 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array440 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str442 = internal constant [46 x i8] c"_ZN10polynomialISt7complexIdEE11stretch_fftEv\00", section "llvm.metadata" ; <[46 x i8]*> [#uses=1] + at llvm.dbg.subprogram443 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str368, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str368, i32 0, i32 0), i8* getelementptr ([46 x i8]* @.str442, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 443, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite441 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str444 = internal constant [49 x i8] c"polynomial > >\00", section "llvm.metadata" ; <[49 x i8]*> [#uses=1] + at llvm.dbg.composite445 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([49 x i8]* @.str444, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 84, i64 0, i64 0, i64 0, i32 4, %0* null, %0* null, i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array446 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite445 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype387 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite447 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array446 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str448 = internal constant [12 x i8] c"bit_reverse\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at .str449 = internal constant [50 x i8] c"_ZN10polynomialISt7complexIdEE11bit_reverseERKS2_\00", section "llvm.metadata" ; <[50 x i8]*> [#uses=1] + at llvm.dbg.subprogram450 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([50 x i8]* @.str449, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 469, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite447 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype451 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 8, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite445 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype452 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype451 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array453 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite445 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype452 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite454 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array453 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str455 = internal constant [59 x i8] c"_ZN10polynomialISt7complexIdEE11bit_reverseERKS_IS0_IS1_EE\00", section "llvm.metadata" ; <[59 x i8]*> [#uses=1] + at llvm.dbg.subprogram456 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([59 x i8]* @.str455, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 483, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite454 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str457 = internal constant [4 x i8] c"fft\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1] + at .str458 = internal constant [41 x i8] c"_ZN10polynomialISt7complexIdEE3fftERKS2_\00", section "llvm.metadata" ; <[41 x i8]*> [#uses=1] + at llvm.dbg.subprogram459 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str457, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str457, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str458, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 497, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite447 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str460 = internal constant [12 x i8] c"inverse_fft\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at .str461 = internal constant [59 x i8] c"_ZN10polynomialISt7complexIdEE11inverse_fftERKS_IS0_IS1_EE\00", section "llvm.metadata" ; <[59 x i8]*> [#uses=1] + at llvm.dbg.subprogram462 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str460, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str460, i32 0, i32 0), i8* getelementptr ([59 x i8]* @.str461, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 535, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite454 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str463 = internal constant [10 x i8] c"operator*\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str464 = internal constant [40 x i8] c"_ZNK10polynomialISt7complexIdEEmlERKS2_\00", section "llvm.metadata" ; <[40 x i8]*> [#uses=1] + at llvm.dbg.subprogram465 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str463, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str463, i32 0, i32 0), i8* getelementptr ([40 x i8]* @.str464, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 576, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite431 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str466 = internal constant [39 x i8] c"_ZN10polynomialISt7complexIdEEpLERKS2_\00", section "llvm.metadata" ; <[39 x i8]*> [#uses=1] + at llvm.dbg.subprogram467 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([39 x i8]* @.str466, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 625, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite396 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str468 = internal constant [39 x i8] c"_ZN10polynomialISt7complexIdEEmIERKS2_\00", section "llvm.metadata" ; <[39 x i8]*> [#uses=1] + at llvm.dbg.subprogram469 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([39 x i8]* @.str468, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 636, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite396 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str470 = internal constant [39 x i8] c"_ZN10polynomialISt7complexIdEEmLERKS2_\00", section "llvm.metadata" ; <[39 x i8]*> [#uses=1] + at llvm.dbg.subprogram471 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([39 x i8]* @.str470, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 647, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite396 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array472 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite473 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array472 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str474 = internal constant [8 x i8] c"acquire\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str475 = internal constant [41 x i8] c"_ZN10polynomialISt7complexIdEE7acquireEv\00", section "llvm.metadata" ; <[41 x i8]*> [#uses=1] + at llvm.dbg.subprogram476 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str474, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str474, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str475, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 181, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite473 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str477 = internal constant [8 x i8] c"release\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str478 = internal constant [41 x i8] c"_ZN10polynomialISt7complexIdEE7releaseEv\00", section "llvm.metadata" ; <[41 x i8]*> [#uses=1] + at llvm.dbg.subprogram479 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str477, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str477, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str478, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 188, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite473 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array480 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype376 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype187 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite481 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array480 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str482 = internal constant [10 x i8] c"deep_copy\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str483 = internal constant [47 x i8] c"_ZN10polynomialISt7complexIdEE9deep_copyEPKS1_\00", section "llvm.metadata" ; <[47 x i8]*> [#uses=1] + at llvm.dbg.subprogram484 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([47 x i8]* @.str483, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 195, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite481 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array485 = internal constant [33 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype373 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype374 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype375 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram379 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram382 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram385 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram390 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram393 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram398 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram402 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram406 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram411 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subpr! ogram415 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram419 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram423 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram427 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram429 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram433 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram435 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram437 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram439 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram443 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram450 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram456 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram459 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram462 to %0*), %0* bitcast (%llvm.db! g.subprogram.type* @llvm.dbg.subprogram465 to %0*), %0* bitcas! t (%llvm .dbg.subprogram.type* @llvm.dbg.subprogram467 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram469 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram471 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram476 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram479 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram484 to %0*)], section "llvm.metadata" ; <[33 x %0*]*> [#uses=1] + at llvm.dbg.composite486 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([34 x i8]* @.str371, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 84, i64 96, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([33 x %0*]* @llvm.dbg.array485 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array487 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype298 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite488 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array487 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str489 = internal constant [38 x i8] c"_ZN10polynomialIdE11bit_reverseERKS0_\00", section "llvm.metadata" ; <[38 x i8]*> [#uses=1] + at llvm.dbg.subprogram490 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([38 x i8]* @.str489, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 469, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite488 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array491 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype387 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite492 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array491 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str493 = internal constant [52 x i8] c"_ZN10polynomialIdE11bit_reverseERKS_ISt7complexIdEE\00", section "llvm.metadata" ; <[52 x i8]*> [#uses=1] + at llvm.dbg.subprogram494 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str493, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 483, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite492 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str495 = internal constant [29 x i8] c"_ZN10polynomialIdE3fftERKS0_\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram496 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str457, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str457, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str495, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 497, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite488 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str497 = internal constant [52 x i8] c"_ZN10polynomialIdE11inverse_fftERKS_ISt7complexIdEE\00", section "llvm.metadata" ; <[52 x i8]*> [#uses=1] + at llvm.dbg.subprogram498 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str460, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str460, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str497, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 535, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite492 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str499 = internal constant [28 x i8] c"_ZNK10polynomialIdEmlERKS0_\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram500 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str463, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str463, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str499, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 576, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite351 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str501 = internal constant [27 x i8] c"_ZN10polynomialIdEpLERKS0_\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram502 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str501, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 625, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite308 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str503 = internal constant [27 x i8] c"_ZN10polynomialIdEmIERKS0_\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram504 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str503, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 636, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite308 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str505 = internal constant [27 x i8] c"_ZN10polynomialIdEmLERKS0_\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram506 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str98, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str505, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 647, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite308 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array507 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite508 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array507 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str509 = internal constant [29 x i8] c"_ZN10polynomialIdE7acquireEv\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram510 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str474, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str474, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str509, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 181, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite508 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str511 = internal constant [29 x i8] c"_ZN10polynomialIdE7releaseEv\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram512 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str477, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str477, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str511, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 188, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite508 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array513 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype290 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite514 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array513 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str515 = internal constant [33 x i8] c"_ZN10polynomialIdE9deep_copyEPKd\00", section "llvm.metadata" ; <[33 x i8]*> [#uses=1] + at llvm.dbg.subprogram516 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([33 x i8]* @.str515, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 195, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite514 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array517 = internal constant [33 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype275 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype278 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype284 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram289 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram293 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram296 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram301 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram305 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram310 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram315 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram320 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram326 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subpr! ogram331 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram336 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram341 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram346 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram349 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram353 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram355 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram360 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram365 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram370 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram490 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram494 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram496 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram498 to %0*), %0* bitcast (%llvm.db! g.subprogram.type* @llvm.dbg.subprogram500 to %0*), %0* bitcas! t (%llvm .dbg.subprogram.type* @llvm.dbg.subprogram502 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram504 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram506 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram510 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram512 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram516 to %0*)], section "llvm.metadata" ; <[33 x %0*]*> [#uses=1] + at llvm.dbg.composite518 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([19 x i8]* @.str266, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 84, i64 96, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([33 x %0*]* @llvm.dbg.array517 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype519 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array520 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype180 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype519 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite521 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array520 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram522 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([23 x i8]* @.str335, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 306, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite521 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram527 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str324, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str324, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str325, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 111, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite323 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram530 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str418, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 306, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite417 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array534 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype196 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype224 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite535 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array534 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str536 = internal constant [19 x i8] c"operator*=\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at .str537 = internal constant [35 x i8] c"_ZNSt7complexIdEmLIdEERS0_RKS_IT_E\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram538 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([19 x i8]* @.str536, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str536, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str537, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1286, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite535 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str541 = internal constant [4 x i8] c"__t\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1] + at llvm.dbg.variable542 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram538 to %0*), i8* getelementptr ([4 x i8]* @.str541, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1288, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.subprogram543 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([33 x i8]* @.str515, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 195, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite514 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram549 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str358, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str358, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str359, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 404, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite357 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array555 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite556 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array555 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str557 = internal constant [18 x i8] c"operator*\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at .str558 = internal constant [32 x i8] c"_ZStmlIdESt7complexIT_ERKS2_S4_\00", section "llvm.metadata" ; <[32 x i8]*> [#uses=1] + at llvm.dbg.subprogram559 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str557, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str557, i32 0, i32 0), i8* getelementptr ([32 x i8]* @.str558, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 378, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite556 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable564 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram559 to %0*), i8* getelementptr ([4 x i8]* @.str244, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 380, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.subprogram565 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str482, i32 0, i32 0), i8* getelementptr ([47 x i8]* @.str483, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 195, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite481 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram569 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str324, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str324, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str410, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 111, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite409 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array572 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype31 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite573 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array572 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str574 = internal constant [18 x i8] c"operator-\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at .str575 = internal constant [29 x i8] c"_ZStngIdESt7complexIT_ERKS2_\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram576 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str574, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str574, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str575, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 443, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite573 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram578 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str329, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str329, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str330, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 300, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite328 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram581 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str363, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str363, i32 0, i32 0), i8* getelementptr ([32 x i8]* @.str364, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 423, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite362 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str591 = internal constant [19 x i8] c"operator/=\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at .str592 = internal constant [35 x i8] c"_ZNSt7complexIdEdVIdEERS0_RKS_IT_E\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram593 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([19 x i8]* @.str591, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str591, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str592, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1297, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite535 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable596 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram593 to %0*), i8* getelementptr ([4 x i8]* @.str541, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1299, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str597 = internal constant [18 x i8] c"operator/\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at .str598 = internal constant [32 x i8] c"_ZStdvIdESt7complexIT_ERKS2_S4_\00", section "llvm.metadata" ; <[32 x i8]*> [#uses=1] + at llvm.dbg.subprogram599 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str597, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str597, i32 0, i32 0), i8* getelementptr ([32 x i8]* @.str598, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 408, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite556 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable602 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram599 to %0*), i8* getelementptr ([4 x i8]* @.str244, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 410, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str603 = internal constant [19 x i8] c"operator+=\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at .str604 = internal constant [35 x i8] c"_ZNSt7complexIdEpLIdEERS0_RKS_IT_E\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram605 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([19 x i8]* @.str603, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str603, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str604, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1268, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite535 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str608 = internal constant [18 x i8] c"operator+\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at .str609 = internal constant [32 x i8] c"_ZStplIdESt7complexIT_ERKS2_S4_\00", section "llvm.metadata" ; <[32 x i8]*> [#uses=1] + at llvm.dbg.subprogram610 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str608, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str608, i32 0, i32 0), i8* getelementptr ([32 x i8]* @.str609, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 318, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite556 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable613 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram610 to %0*), i8* getelementptr ([4 x i8]* @.str244, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 320, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str614 = internal constant [19 x i8] c"operator-=\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at .str615 = internal constant [35 x i8] c"_ZNSt7complexIdEmIIdEERS0_RKS_IT_E\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram616 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([19 x i8]* @.str614, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str614, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str615, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 1277, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite535 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str619 = internal constant [32 x i8] c"_ZStmiIdESt7complexIT_ERKS2_S4_\00", section "llvm.metadata" ; <[32 x i8]*> [#uses=1] + at llvm.dbg.subprogram620 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str574, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str574, i32 0, i32 0), i8* getelementptr ([32 x i8]* @.str619, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 348, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite556 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable623 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram620 to %0*), i8* getelementptr ([4 x i8]* @.str244, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 350, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.subprogram624 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str329, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str329, i32 0, i32 0), i8* getelementptr ([38 x i8]* @.str414, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 300, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite413 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array627 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite628 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array627 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str629 = internal constant [42 x i8] c"__static_initialization_and_destruction_0\00", section "llvm.metadata" ; <[42 x i8]*> [#uses=1] + at llvm.dbg.subprogram630 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([42 x i8]* @.str629, i32 0, i32 0), i8* getelementptr ([42 x i8]* @.str629, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 703, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite628 to %0*), i1 true, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=0] + at .str635 = internal constant [9 x i8] c"iostream\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at llvm.dbg.compile_unit636 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([9 x i8]* @.str635, i32 0, i32 0), i8* getelementptr ([110 x i8]* @.str4, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at _ZStL8__ioinit = internal global %"struct.std::allocator" zeroinitializer ; <%"struct.std::allocator"*> [#uses=2] + at .str638 = internal constant [115 x i8] c"/developer/home2/zsth/projects/llvm.org/install/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits\00", section "llvm.metadata" ; <[115 x i8]*> [#uses=1] + at __dso_handle = external global i8* ; [#uses=1] + at _ZGVN10polynomialIdE4PI2IE = weak global i64 0, align 8 ; [#uses=1] + at _ZN10polynomialIdE4PI2IE = weak global %"struct.std::complex" zeroinitializer ; <%"struct.std::complex"*> [#uses=3] + at llvm.dbg.array654 = internal constant [1 x %0*] zeroinitializer, section "llvm.metadata" ; <[1 x %0*]*> [#uses=1] + at llvm.dbg.composite655 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([1 x %0*]* @llvm.dbg.array654 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str656 = internal constant [16 x i8] c"_GLOBAL__I_main\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram657 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str656, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str656, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 704, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite655 to %0*), i1 true, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype658 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* null }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array659 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype658 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite660 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array659 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str661 = internal constant [8 x i8] c"__tcf_0\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.subprogram662 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str661, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str661, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit636 to %0*), i32 77, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite660 to %0*), i1 true, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram665 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str477, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str477, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str511, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 188, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite508 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str667 = internal constant [23 x i8] c"_ZN10polynomialIdED0Ev\00", section "llvm.metadata" ; <[23 x i8]*> [#uses=1] + at llvm.dbg.subprogram668 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([23 x i8]* @.str667, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 252, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite508 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at _ZTV10polynomialIdE = weak constant [4 x i32 (...)*] [i32 (...)* null, i32 (...)* bitcast (%struct.__class_type_info_pseudo* @_ZTI10polynomialIdE to i32 (...)*), i32 (...)* bitcast (void (%"struct.polynomial"*)* @_ZN10polynomialIdED1Ev to i32 (...)*), i32 (...)* bitcast (void (%"struct.polynomial"*)* @_ZN10polynomialIdED0Ev to i32 (...)*)], align 8 ; <[4 x i32 (...)*]*> [#uses=1] + at _ZTI10polynomialIdE = 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 ([16 x i8]* @_ZTS10polynomialIdE, 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 _ZTS10polynomialIdE = weak constant [16 x i8] c"10polynomialIdE\00" ; <[16 x i8]*> [#uses=1] + at .str671 = internal constant [5 x i8] c"char\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at llvm.dbg.basictype672 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str671, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 8, i64 8, i64 0, i32 0, i32 6 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at .str676 = internal constant [11 x i8] c"\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.compile_unit677 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([11 x i8]* @.str676, i32 0, i32 0), i8* getelementptr ([42 x i8]* @.str1, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at llvm.dbg.array680 = internal constant [0 x %0*] zeroinitializer, section "llvm.metadata" ; <[0 x %0*]*> [#uses=1] + at .str690 = internal constant [23 x i8] c"_ZN10polynomialIdED1Ev\00", section "llvm.metadata" ; <[23 x i8]*> [#uses=1] + at llvm.dbg.subprogram691 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([23 x i8]* @.str690, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 252, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite508 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram693 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str477, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str477, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str478, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 188, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite473 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str695 = internal constant [35 x i8] c"_ZN10polynomialISt7complexIdEED0Ev\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram696 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str695, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 252, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite473 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at _ZTV10polynomialISt7complexIdEE = weak constant [4 x i32 (...)*] [i32 (...)* null, i32 (...)* bitcast (%struct.__class_type_info_pseudo* @_ZTI10polynomialISt7complexIdEE to i32 (...)*), i32 (...)* bitcast (void (%"struct.polynomial >"*)* @_ZN10polynomialISt7complexIdEED1Ev to i32 (...)*), i32 (...)* bitcast (void (%"struct.polynomial >"*)* @_ZN10polynomialISt7complexIdEED0Ev to i32 (...)*)], align 8 ; <[4 x i32 (...)*]*> [#uses=1] + at _ZTI10polynomialISt7complexIdEE = 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 ([28 x i8]* @_ZTS10polynomialISt7complexIdEE, i32 0, i32 0) } } ; <%struct.__class_type_info_pseudo*> [#uses=1] + at _ZTS10polynomialISt7complexIdEE = weak constant [28 x i8] c"10polynomialISt7complexIdEE\00" ; <[28 x i8]*> [#uses=1] + at .str707 = internal constant [35 x i8] c"_ZN10polynomialISt7complexIdEED1Ev\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram708 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str304, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str707, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 252, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite473 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram710 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str474, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str474, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str509, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 181, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite508 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str712 = internal constant [23 x i8] c"_ZN10polynomialIdEC1Ej\00", section "llvm.metadata" ; <[23 x i8]*> [#uses=1] + at llvm.dbg.subprogram713 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([23 x i8]* @.str712, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 211, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite287 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str716 = internal constant [27 x i8] c"_ZN10polynomialIdEC1ERKS0_\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram717 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str716, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 242, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite300 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram720 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str318, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str318, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str319, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 276, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite317 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram729 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str309, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 259, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite308 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram732 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str474, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str474, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str475, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 181, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite473 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str734 = internal constant [35 x i8] c"_ZN10polynomialISt7complexIdEEC1Ej\00", section "llvm.metadata" ; <[35 x i8]*> [#uses=1] + at llvm.dbg.subprogram735 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str288, i32 0, i32 0), i8* getelementptr ([35 x i8]* @.str734, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 211, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite378 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram738 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([38 x i8]* @.str489, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 469, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite488 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable744 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram738 to %0*), i8* getelementptr ([7 x i8]* @.str259, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 473, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.subprogram747 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str448, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str493, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 483, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite492 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable751 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram747 to %0*), i8* getelementptr ([7 x i8]* @.str259, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 487, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.subprogram753 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([39 x i8]* @.str397, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 259, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite396 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram756 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str368, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str368, i32 0, i32 0), i8* getelementptr ([34 x i8]* @.str369, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 443, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite367 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str759 = internal constant [35 x i8] c"overflow in fft polynomial stretch\00" ; <[35 x i8]*> [#uses=1] + at _ZTISt14overflow_error = weak constant %struct.__si_class_type_info_pseudo { %struct.__type_info_pseudo { i8* inttoptr (i32 add (i32 ptrtoint ([0 x i32 (...)*]* @_ZTVN10__cxxabiv120__si_class_type_infoE to i32), i32 8) to i8*), i8* getelementptr ([19 x i8]* @_ZTSSt14overflow_error, i32 0, i32 0) }, %"struct.std::type_info"* bitcast (%struct.__si_class_type_info_pseudo* @_ZTISt13runtime_error to %"struct.std::type_info"*) } ; <%struct.__si_class_type_info_pseudo*> [#uses=2] + at _ZTVN10__cxxabiv120__si_class_type_infoE = external constant [0 x i32 (...)*] ; <[0 x i32 (...)*]*> [#uses=1] + at _ZTSSt14overflow_error = weak constant [19 x i8] c"St14overflow_error\00" ; <[19 x i8]*> [#uses=1] + at _ZTISt13runtime_error = external constant %struct.__si_class_type_info_pseudo ; <%struct.__si_class_type_info_pseudo*> [#uses=1] + at .str769 = internal constant [10 x i8] c"stdexcept\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.compile_unit770 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([10 x i8]* @.str769, i32 0, i32 0), i8* getelementptr ([110 x i8]* @.str4, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str773 = internal constant [15 x i8] c"overflow_error\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at .str775 = internal constant [14 x i8] c"runtime_error\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at .str777 = internal constant [10 x i8] c"exception\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.compile_unit778 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([10 x i8]* @.str777, i32 0, i32 0), i8* getelementptr ([110 x i8]* @.str4, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str780 = internal constant [16 x i8] c"_vptr.exception\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.derivedtype781 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str780, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit778 to %0*), i32 57, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype273 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype782 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite800 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array783 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype782 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite784 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array783 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram785 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str777, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str777, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit778 to %0*), i32 59, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite784 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array786 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype782 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite787 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array786 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str788 = internal constant [11 x i8] c"~exception\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.subprogram789 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str788, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str788, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit778 to %0*), i32 60, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite787 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype790 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 8, i64 8, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype791 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype790 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype792 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite800 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype793 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype792 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array794 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype793 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite795 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array794 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str796 = internal constant [5 x i8] c"what\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str797 = internal constant [24 x i8] c"_ZNKSt9exception4whatEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram798 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str796, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str796, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str797, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit778 to %0*), i32 63, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite795 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array799 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype781 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram785 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram789 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram798 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite800 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str777, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit778 to %0*), i32 57, i64 32, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array799 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype801 = internal constant %llvm.dbg.derivedtype.type { i32 458780, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite800 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str802 = internal constant [12 x i8] c"stringfwd.h\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.compile_unit803 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([12 x i8]* @.str802, i32 0, i32 0), i8* getelementptr ([115 x i8]* @.str638, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str804 = internal constant [64 x i8] c"basic_string,std::allocator >\00", section "llvm.metadata" ; <[64 x i8]*> [#uses=1] + at .str806 = internal constant [15 x i8] c"basic_string.h\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.compile_unit807 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([15 x i8]* @.str806, i32 0, i32 0), i8* getelementptr ([115 x i8]* @.str638, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str808 = internal constant [13 x i8] c"_Alloc_hider\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at .str810 = internal constant [16 x i8] c"allocator\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at .str812 = internal constant [16 x i8] c"new_allocator.h\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at .str813 = internal constant [114 x i8] c"/developer/home2/zsth/projects/llvm.org/install/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../include/c++/4.2.1/ext\00", section "llvm.metadata" ; <[114 x i8]*> [#uses=1] + at llvm.dbg.compile_unit814 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([16 x i8]* @.str812, i32 0, i32 0), i8* getelementptr ([114 x i8]* @.str813, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str815 = internal constant [20 x i8] c"new_allocator\00", section "llvm.metadata" ; <[20 x i8]*> [#uses=1] + at llvm.dbg.derivedtype817 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite877 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array818 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype817 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite819 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array818 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str820 = internal constant [14 x i8] c"new_allocator\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram821 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str820, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str820, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 68, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite819 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype822 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 8, i64 8, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite877 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype823 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype822 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array824 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype817 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype823 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite825 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array824 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram826 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str820, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str820, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 70, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite825 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite827 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 54, i64 0, i64 0, i64 0, i32 4, %0* null, %0* null, i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype828 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 8, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite827 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype829 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype828 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array830 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype817 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype829 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite831 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array830 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram832 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str820, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str820, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 73, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite831 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array833 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype817 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite834 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array833 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str835 = internal constant [15 x i8] c"~new_allocator\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram836 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str835, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str835, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 75, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite834 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype837 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype838 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype822 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype839 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array840 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype838 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype839 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite841 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array840 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str842 = internal constant [8 x i8] c"address\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str843 = internal constant [44 x i8] c"_ZNK9__gnu_cxx13new_allocatorIcE7addressERc\00", section "llvm.metadata" ; <[44 x i8]*> [#uses=1] + at llvm.dbg.subprogram844 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str842, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str842, i32 0, i32 0), i8* getelementptr ([44 x i8]* @.str843, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 78, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite841 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype845 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype790 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array846 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype838 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype845 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite847 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array846 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str848 = internal constant [45 x i8] c"_ZNK9__gnu_cxx13new_allocatorIcE7addressERKc\00", section "llvm.metadata" ; <[45 x i8]*> [#uses=1] + at llvm.dbg.subprogram849 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str842, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str842, i32 0, i32 0), i8* getelementptr ([45 x i8]* @.str848, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 81, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite847 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype850 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* null }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array851 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype817 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype850 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite852 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array851 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str853 = internal constant [9 x i8] c"allocate\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at .str854 = internal constant [46 x i8] c"_ZN9__gnu_cxx13new_allocatorIcE8allocateEjPKv\00", section "llvm.metadata" ; <[46 x i8]*> [#uses=1] + at llvm.dbg.subprogram855 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str853, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str853, i32 0, i32 0), i8* getelementptr ([46 x i8]* @.str854, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 86, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite852 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array856 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype817 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite857 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array856 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str858 = internal constant [11 x i8] c"deallocate\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str859 = internal constant [48 x i8] c"_ZN9__gnu_cxx13new_allocatorIcE10deallocateEPcj\00", section "llvm.metadata" ; <[48 x i8]*> [#uses=1] + at llvm.dbg.subprogram860 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str858, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str858, i32 0, i32 0), i8* getelementptr ([48 x i8]* @.str859, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 96, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite857 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array861 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype838 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite862 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array861 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str863 = internal constant [9 x i8] c"max_size\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at .str864 = internal constant [44 x i8] c"_ZNK9__gnu_cxx13new_allocatorIcE8max_sizeEv\00", section "llvm.metadata" ; <[44 x i8]*> [#uses=1] + at llvm.dbg.subprogram865 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str863, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str863, i32 0, i32 0), i8* getelementptr ([44 x i8]* @.str864, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 100, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite862 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array866 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype817 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype845 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite867 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array866 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str868 = internal constant [10 x i8] c"construct\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str869 = internal constant [48 x i8] c"_ZN9__gnu_cxx13new_allocatorIcE9constructEPcRKc\00", section "llvm.metadata" ; <[48 x i8]*> [#uses=1] + at llvm.dbg.subprogram870 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str868, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str868, i32 0, i32 0), i8* getelementptr ([48 x i8]* @.str869, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 106, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite867 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array871 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype817 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite872 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array871 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str873 = internal constant [8 x i8] c"destroy\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str874 = internal constant [43 x i8] c"_ZN9__gnu_cxx13new_allocatorIcE7destroyEPc\00", section "llvm.metadata" ; <[43 x i8]*> [#uses=1] + at llvm.dbg.subprogram875 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str873, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str873, i32 0, i32 0), i8* getelementptr ([43 x i8]* @.str874, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 110, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite872 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array876 = internal constant [11 x %0*] [%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram821 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram826 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram832 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram836 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram844 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram849 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram855 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram860 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram865 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram870 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram875 to %0*)], section "llvm.metadata" ; <[11 x %0*]*> [#uses=1] + at llvm.dbg.composite877 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([20 x i8]* @.str815, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit814 to %0*), i32 54, i64 8, i64 8, i64 0, i32 0, %0* null, %0* bitcast ([11 x %0*]* @llvm.dbg.array876 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype878 = internal constant %llvm.dbg.derivedtype.type { i32 458780, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit803 to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite877 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype879 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite902 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array880 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype879 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite881 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array880 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str882 = internal constant [12 x i8] c"allocator.h\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.compile_unit883 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([12 x i8]* @.str882, i32 0, i32 0), i8* getelementptr ([115 x i8]* @.str638, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str884 = internal constant [10 x i8] c"allocator\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.subprogram885 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str884, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str884, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit883 to %0*), i32 100, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite881 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype886 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 8, i64 8, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite902 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype887 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype886 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array888 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype879 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite889 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array888 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram890 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str884, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str884, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit883 to %0*), i32 102, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite889 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite891 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit803 to %0*), i32 49, i64 0, i64 0, i64 0, i32 4, %0* null, %0* null, i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype892 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 8, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite891 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype893 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype892 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array894 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype879 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype893 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite895 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array894 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram896 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str884, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str884, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit883 to %0*), i32 106, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite895 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array897 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype879 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite898 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array897 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str899 = internal constant [11 x i8] c"~allocator\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.subprogram900 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str899, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str899, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit883 to %0*), i32 108, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite898 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array901 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype878 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram885 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram890 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram896 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram900 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite902 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str810, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit803 to %0*), i32 49, i64 8, i64 8, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array901 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype903 = internal constant %llvm.dbg.derivedtype.type { i32 458780, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite902 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str904 = internal constant [5 x i8] c"_M_p\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at llvm.dbg.derivedtype905 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str904, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 264, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype906 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite911 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array907 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype906 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite908 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array907 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram909 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str808, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str808, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 261, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite908 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array910 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype903 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype905 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram909 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite911 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str808, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 260, i64 32, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array910 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str912 = internal constant [12 x i8] c"_M_dataplus\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.derivedtype913 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str912, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 276, i64 32, i64 32, i64 0, i32 1, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite911 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str914 = internal constant [7 x i8] c"string\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at llvm.dbg.derivedtype915 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str914, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit803 to %0*), i32 56, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1693 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype916 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype915 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype917 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype916 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array918 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite919 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array918 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str920 = internal constant [8 x i8] c"_M_data\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str921 = internal constant [17 x i8] c"_ZNKSs7_M_dataEv\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram922 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str920, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str920, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str921, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 279, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite919 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype923 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1693 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array924 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite925 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array924 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str926 = internal constant [17 x i8] c"_ZNSs7_M_dataEPc\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram927 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str920, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str920, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str926, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 283, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite925 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str928 = internal constant [5 x i8] c"_Rep\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str930 = internal constant [10 x i8] c"_Rep_base\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str932 = internal constant [10 x i8] c"_M_length\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.derivedtype933 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str932, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 149, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str934 = internal constant [12 x i8] c"_M_capacity\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.derivedtype935 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str934, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 150, i64 32, i64 32, i64 32, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str936 = internal constant [10 x i8] c"ptrdiff_t\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.derivedtype937 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str936, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit677 to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype938 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype937 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str939 = internal constant [8 x i8] c"types.h\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.compile_unit940 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([8 x i8]* @.str939, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str69, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str941 = internal constant [10 x i8] c"__int32_t\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.derivedtype942 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str941, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 43, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype938 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str943 = internal constant [8 x i8] c"__pid_t\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype944 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str943, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 145, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype942 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str945 = internal constant [10 x i8] c"__daddr_t\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.derivedtype946 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str945, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 154, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype944 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str947 = internal constant [8 x i8] c"__key_t\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype948 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str947, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 157, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype946 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str949 = internal constant [12 x i8] c"__clockid_t\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.derivedtype950 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str949, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 158, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype948 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str951 = internal constant [10 x i8] c"__ssize_t\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.derivedtype952 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str951, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 181, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype950 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str953 = internal constant [11 x i8] c"__intptr_t\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.derivedtype954 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str953, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 189, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype952 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str955 = internal constant [12 x i8] c"_G_config.h\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at .str956 = internal constant [13 x i8] c"/usr/include\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.compile_unit957 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([12 x i8]* @.str955, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str956, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str958 = internal constant [11 x i8] c"_G_int32_t\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.derivedtype959 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str958, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit957 to %0*), i32 55, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype954 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str960 = internal constant [11 x i8] c"nl_types.h\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.compile_unit961 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([11 x i8]* @.str960, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str956, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str962 = internal constant [8 x i8] c"nl_item\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype963 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str962, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit961 to %0*), i32 34, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype959 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str964 = internal constant [7 x i8] c"time.h\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at llvm.dbg.compile_unit965 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([7 x i8]* @.str964, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str956, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str966 = internal constant [10 x i8] c"clockid_t\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.derivedtype967 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str966, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit965 to %0*), i32 77, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype963 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str968 = internal constant [6 x i8] c"pid_t\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at llvm.dbg.derivedtype969 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str968, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit965 to %0*), i32 105, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype967 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str970 = internal constant [15 x i8] c"__sig_atomic_t\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.derivedtype971 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str970, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit965 to %0*), i32 413, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype969 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str972 = internal constant [15 x i8] c"pthreadtypes.h\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.compile_unit973 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([15 x i8]* @.str972, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str69, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str974 = internal constant [15 x i8] c"pthread_once_t\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.derivedtype975 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str974, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit973 to %0*), i32 109, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype971 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype976 = internal constant %llvm.dbg.derivedtype.type { i32 458805, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype975 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str977 = internal constant [19 x i8] c"pthread_spinlock_t\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.derivedtype978 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([19 x i8]* @.str977, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit973 to %0*), i32 142, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype976 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str979 = internal constant [10 x i8] c"pthread.h\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.compile_unit980 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([10 x i8]* @.str979, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str956, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str981 = internal constant [8 x i8] c"ssize_t\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype982 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str981, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit980 to %0*), i32 1101, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype978 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str983 = internal constant [9 x i8] c"unistd.h\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at llvm.dbg.compile_unit984 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([9 x i8]* @.str983, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str956, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str985 = internal constant [9 x i8] c"intptr_t\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at llvm.dbg.derivedtype986 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str985, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit984 to %0*), i32 226, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype982 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str987 = internal constant [15 x i8] c"gthr-default.h\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at .str988 = internal constant [133 x i8] c"/developer/home2/zsth/projects/llvm.org/install/lib/gcc/i686-pc-linux-gnu/4.2.1/../../../../include/c++/4.2.1/i686-pc-linux-gnu/bits\00", section "llvm.metadata" ; <[133 x i8]*> [#uses=1] + at llvm.dbg.compile_unit989 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([15 x i8]* @.str987, i32 0, i32 0), i8* getelementptr ([133 x i8]* @.str988, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str990 = internal constant [17 x i8] c"__gthread_once_t\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.derivedtype991 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str990, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit989 to %0*), i32 46, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype986 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype992 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str941, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 43, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype991 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str993 = internal constant [9 x i8] c"stdint.h\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at llvm.dbg.compile_unit994 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([9 x i8]* @.str993, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str956, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str995 = internal constant [8 x i8] c"int32_t\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype996 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str995, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit994 to %0*), i32 38, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype992 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str997 = internal constant [14 x i8] c"int_least32_t\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.derivedtype998 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str997, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit994 to %0*), i32 67, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype996 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str999 = internal constant [13 x i8] c"int_fast16_t\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1000 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str999, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit994 to %0*), i32 91, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype998 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1001 = internal constant [13 x i8] c"int_fast32_t\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1002 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1001, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit994 to %0*), i32 97, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1000 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1003 = internal constant [11 x i8] c"postypes.h\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.compile_unit1004 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([11 x i8]* @.str1003, i32 0, i32 0), i8* getelementptr ([115 x i8]* @.str638, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str1005 = internal constant [11 x i8] c"streamsize\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1006 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1005, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1004 to %0*), i32 72, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1002 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1007 = internal constant [17 x i8] c"/usr/include/sys\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.compile_unit1008 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([8 x i8]* @.str939, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1007, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str1009 = internal constant [8 x i8] c"daddr_t\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1010 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1009, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1008 to %0*), i32 105, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1006 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1011 = internal constant [6 x i8] c"key_t\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1012 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1011, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1008 to %0*), i32 117, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1010 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1013 = internal constant [11 x i8] c"register_t\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1014 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1013, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1008 to %0*), i32 204, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1012 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1015 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str936, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit677 to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1014 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1016 = internal constant [9 x i8] c"stdlib.h\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at llvm.dbg.compile_unit1017 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([9 x i8]* @.str1016, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str956, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str1018 = internal constant [13 x i8] c"_Atomic_word\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1019 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1018, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1017 to %0*), i32 962, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1015 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1020 = internal constant [12 x i8] c"_M_refcount\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1021 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str1020, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 151, i64 32, i64 32, i64 64, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1019 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1022 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype933 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype935 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1021 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1023 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str930, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 148, i64 96, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1022 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype1024 = internal constant %llvm.dbg.derivedtype.type { i32 458780, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1023 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1025 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1091 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1026 = internal constant [1 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1025 to %0*)], section "llvm.metadata" ; <[1 x %0*]*> [#uses=1] + at llvm.dbg.composite1027 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([1 x %0*]* @llvm.dbg.array1026 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1028 = internal constant [13 x i8] c"_S_empty_rep\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at .str1029 = internal constant [27 x i8] c"_ZNSs4_Rep12_S_empty_repEv\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram1030 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1028, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1028, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str1029, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 180, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1027 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1031 = internal constant [5 x i8] c"bool\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at llvm.dbg.basictype1032 = internal constant %llvm.dbg.basictype.type { i32 458788, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1031, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 8, i64 8, i64 0, i32 0, i32 2 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1] + at llvm.dbg.derivedtype1033 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 96, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1091 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1034 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1033 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1035 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype1032 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1034 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1036 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1035 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1037 = internal constant [13 x i8] c"_M_is_leaked\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at .str1038 = internal constant [28 x i8] c"_ZNKSs4_Rep12_M_is_leakedEv\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram1039 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1037, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1037, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str1038, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 190, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1036 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1040 = internal constant [13 x i8] c"_M_is_shared\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at .str1041 = internal constant [28 x i8] c"_ZNKSs4_Rep12_M_is_sharedEv\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram1042 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1040, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1040, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str1041, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 194, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1036 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype1043 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1091 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1044 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1043 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1045 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1044 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1046 = internal constant [14 x i8] c"_M_set_leaked\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at .str1047 = internal constant [28 x i8] c"_ZNSs4_Rep13_M_set_leakedEv\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram1048 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1046, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1046, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str1047, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 198, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1045 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1049 = internal constant [16 x i8] c"_M_set_sharable\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at .str1050 = internal constant [30 x i8] c"_ZNSs4_Rep15_M_set_sharableEv\00", section "llvm.metadata" ; <[30 x i8]*> [#uses=1] + at llvm.dbg.subprogram1051 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str1049, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1049, i32 0, i32 0), i8* getelementptr ([30 x i8]* @.str1050, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 202, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1045 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1052 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1043 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1053 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1052 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1054 = internal constant [27 x i8] c"_M_set_length_and_sharable\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at .str1055 = internal constant [41 x i8] c"_ZNSs4_Rep26_M_set_length_and_sharableEj\00", section "llvm.metadata" ; <[41 x i8]*> [#uses=1] + at llvm.dbg.subprogram1056 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([27 x i8]* @.str1054, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str1054, i32 0, i32 0), i8* getelementptr ([41 x i8]* @.str1055, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 206, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1053 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1057 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1043 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1058 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1057 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1059 = internal constant [11 x i8] c"_M_refdata\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str1060 = internal constant [25 x i8] c"_ZNSs4_Rep10_M_refdataEv\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram1061 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1059, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1059, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str1060, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 216, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1058 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1062 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1043 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1063 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1062 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1064 = internal constant [8 x i8] c"_M_grab\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str1065 = internal constant [30 x i8] c"_ZNSs4_Rep7_M_grabERKSaIcES2_\00", section "llvm.metadata" ; <[30 x i8]*> [#uses=1] + at llvm.dbg.subprogram1066 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1064, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1064, i32 0, i32 0), i8* getelementptr ([30 x i8]* @.str1065, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 220, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1063 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1067 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1043 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1068 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1067 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1069 = internal constant [17 x i8] c"basic_string.tcc\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.compile_unit1070 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([17 x i8]* @.str1069, i32 0, i32 0), i8* getelementptr ([115 x i8]* @.str638, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str1071 = internal constant [10 x i8] c"_S_create\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str1072 = internal constant [31 x i8] c"_ZNSs4_Rep9_S_createEjjRKSaIcE\00", section "llvm.metadata" ; <[31 x i8]*> [#uses=1] + at llvm.dbg.subprogram1073 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str1071, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str1071, i32 0, i32 0), i8* getelementptr ([31 x i8]* @.str1072, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 529, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1068 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1074 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1043 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1075 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1074 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1076 = internal constant [11 x i8] c"_M_dispose\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str1077 = internal constant [31 x i8] c"_ZNSs4_Rep10_M_disposeERKSaIcE\00", section "llvm.metadata" ; <[31 x i8]*> [#uses=1] + at llvm.dbg.subprogram1078 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1076, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1076, i32 0, i32 0), i8* getelementptr ([31 x i8]* @.str1077, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 231, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1075 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1079 = internal constant [11 x i8] c"_M_destroy\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str1080 = internal constant [31 x i8] c"_ZNSs4_Rep10_M_destroyERKSaIcE\00", section "llvm.metadata" ; <[31 x i8]*> [#uses=1] + at llvm.dbg.subprogram1081 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1079, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1079, i32 0, i32 0), i8* getelementptr ([31 x i8]* @.str1080, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 427, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1075 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1082 = internal constant [11 x i8] c"_M_refcopy\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str1083 = internal constant [25 x i8] c"_ZNSs4_Rep10_M_refcopyEv\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram1084 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1082, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1082, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str1083, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 245, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1058 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1085 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1043 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1086 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1085 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1087 = internal constant [9 x i8] c"_M_clone\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at .str1088 = internal constant [29 x i8] c"_ZNSs4_Rep8_M_cloneERKSaIcEj\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram1089 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str1087, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str1087, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str1088, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 606, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1086 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1090 = internal constant [14 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1024 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1030 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1039 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1042 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1048 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1051 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1056 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1061 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1066 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1073 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1078 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1081 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.! dbg.subprogram1084 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1089 to %0*)], section "llvm.metadata" ; <[14 x %0*]*> [#uses=1] + at llvm.dbg.composite1091 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str928, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 155, i64 96, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([14 x %0*]* @llvm.dbg.array1090 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype1092 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1091 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1093 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1092 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1094 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1093 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1095 = internal constant [16 x i8] c"_ZNKSs6_M_repEv\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1096 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str1087, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str1087, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1095, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 287, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1094 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1097 = internal constant [15 x i8] c"stl_iterator.h\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.compile_unit1098 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([15 x i8]* @.str1097, i32 0, i32 0), i8* getelementptr ([115 x i8]* @.str638, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str1099 = internal constant [97 x i8] c"__normal_iterator, std::allocator > >\00", section "llvm.metadata" ; <[97 x i8]*> [#uses=1] + at .str1101 = internal constant [11 x i8] c"_M_current\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1102 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1101, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 639, i64 32, i64 32, i64 0, i32 2, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1103 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1104 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1103 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1105 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1104 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1106 = internal constant [18 x i8] c"__normal_iterator\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1107 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str1106, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1106, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 650, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1105 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1108 = internal constant [10 x i8] c"__caddr_t\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1109 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str1108, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit940 to %0*), i32 188, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1110 = internal constant [15 x i8] c"__gnuc_va_list\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1111 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str1110, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit957 to %0*), i32 58, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1109 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1112 = internal constant [8 x i8] c"libio.h\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.compile_unit1113 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([8 x i8]* @.str1112, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str956, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str1114 = internal constant [8 x i8] c"va_list\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1115 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1114, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1113 to %0*), i32 491, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1111 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1116 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1115 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1117 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1116 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1118 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1103 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1117 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1119 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1118 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1120 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str1106, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1106, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 653, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1119 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite1121 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 637, i64 0, i64 0, i64 0, i32 4, %0* null, %0* null, i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype1122 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 8, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1121 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1123 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1122 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1124 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1103 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1123 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1125 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1124 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1126 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str1106, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1106, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 660, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1125 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype1127 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1128 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1127 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1129 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype839 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1128 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1130 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1129 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1131 = internal constant [44 x i8] c"_ZNK9__gnu_cxx17__normal_iteratorIPcSsEdeEv\00", section "llvm.metadata" ; <[44 x i8]*> [#uses=1] + at llvm.dbg.subprogram1132 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str463, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str463, i32 0, i32 0), i8* getelementptr ([44 x i8]* @.str1131, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 665, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1130 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1133 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1128 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1134 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1133 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1135 = internal constant [11 x i8] c"operator->\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str1136 = internal constant [44 x i8] c"_ZNK9__gnu_cxx17__normal_iteratorIPcSsEptEv\00", section "llvm.metadata" ; <[44 x i8]*> [#uses=1] + at llvm.dbg.subprogram1137 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1135, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1135, i32 0, i32 0), i8* getelementptr ([44 x i8]* @.str1136, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 669, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1134 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype1138 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1139 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1138 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1103 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1140 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1139 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1141 = internal constant [11 x i8] c"operator++\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str1142 = internal constant [43 x i8] c"_ZN9__gnu_cxx17__normal_iteratorIPcSsEppEv\00", section "llvm.metadata" ; <[43 x i8]*> [#uses=1] + at llvm.dbg.subprogram1143 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1141, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1141, i32 0, i32 0), i8* getelementptr ([43 x i8]* @.str1142, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 673, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1140 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1144 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1103 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1145 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1144 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1146 = internal constant [43 x i8] c"_ZN9__gnu_cxx17__normal_iteratorIPcSsEppEi\00", section "llvm.metadata" ; <[43 x i8]*> [#uses=1] + at llvm.dbg.subprogram1147 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1141, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1141, i32 0, i32 0), i8* getelementptr ([43 x i8]* @.str1146, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 680, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1145 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1148 = internal constant [11 x i8] c"operator--\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at .str1149 = internal constant [43 x i8] c"_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEv\00", section "llvm.metadata" ; <[43 x i8]*> [#uses=1] + at llvm.dbg.subprogram1150 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1148, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1148, i32 0, i32 0), i8* getelementptr ([43 x i8]* @.str1149, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 685, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1140 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1151 = internal constant [43 x i8] c"_ZN9__gnu_cxx17__normal_iteratorIPcSsEmmEi\00", section "llvm.metadata" ; <[43 x i8]*> [#uses=1] + at llvm.dbg.subprogram1152 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str1148, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1148, i32 0, i32 0), i8* getelementptr ([43 x i8]* @.str1151, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 692, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1145 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype1153 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1015 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1154 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype839 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1128 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1153 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1155 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1154 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1156 = internal constant [46 x i8] c"_ZNK9__gnu_cxx17__normal_iteratorIPcSsEixERKi\00", section "llvm.metadata" ; <[46 x i8]*> [#uses=1] + at llvm.dbg.subprogram1157 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([46 x i8]* @.str1156, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 697, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1155 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1158 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1138 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1103 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1153 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1159 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1158 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1160 = internal constant [45 x i8] c"_ZN9__gnu_cxx17__normal_iteratorIPcSsEpLERKi\00", section "llvm.metadata" ; <[45 x i8]*> [#uses=1] + at llvm.dbg.subprogram1161 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([45 x i8]* @.str1160, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 701, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1159 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1162 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1128 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1153 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1163 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1162 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1164 = internal constant [46 x i8] c"_ZNK9__gnu_cxx17__normal_iteratorIPcSsEplERKi\00", section "llvm.metadata" ; <[46 x i8]*> [#uses=1] + at llvm.dbg.subprogram1165 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str347, i32 0, i32 0), i8* getelementptr ([46 x i8]* @.str1164, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 705, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1163 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1166 = internal constant [45 x i8] c"_ZN9__gnu_cxx17__normal_iteratorIPcSsEmIERKi\00", section "llvm.metadata" ; <[45 x i8]*> [#uses=1] + at llvm.dbg.subprogram1167 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str95, i32 0, i32 0), i8* getelementptr ([45 x i8]* @.str1166, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 709, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1159 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1168 = internal constant [46 x i8] c"_ZNK9__gnu_cxx17__normal_iteratorIPcSsEmiERKi\00", section "llvm.metadata" ; <[46 x i8]*> [#uses=1] + at llvm.dbg.subprogram1169 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str344, i32 0, i32 0), i8* getelementptr ([46 x i8]* @.str1168, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 713, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1163 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1170 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1117 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1128 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1171 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1170 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1172 = internal constant [5 x i8] c"base\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str1173 = internal constant [47 x i8] c"_ZNK9__gnu_cxx17__normal_iteratorIPcSsE4baseEv\00", section "llvm.metadata" ; <[47 x i8]*> [#uses=1] + at llvm.dbg.subprogram1174 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1172, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1172, i32 0, i32 0), i8* getelementptr ([47 x i8]* @.str1173, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 717, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1171 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1175 = internal constant [16 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1102 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1107 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1120 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1126 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1132 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1137 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1143 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1147 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1150 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1152 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1157 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1161 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.! dbg.subprogram1165 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1167 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1169 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1174 to %0*)], section "llvm.metadata" ; <[16 x %0*]*> [#uses=1] + at llvm.dbg.composite1176 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([97 x i8]* @.str1099, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 637, i64 32, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([16 x %0*]* @llvm.dbg.array1175 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array1177 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1178 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1177 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1179 = internal constant [19 x i8] c"_ZNKSs9_M_ibeginEv\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.subprogram1180 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1172, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1172, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str1179, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 293, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1178 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1181 = internal constant [8 x i8] c"_M_iend\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str1182 = internal constant [17 x i8] c"_ZNKSs7_M_iendEv\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram1183 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1181, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1181, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1182, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 297, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1178 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1184 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1185 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1184 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1186 = internal constant [8 x i8] c"_M_leak\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str1187 = internal constant [16 x i8] c"_ZNSs7_M_leakEv\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1188 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1186, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1186, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1187, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 301, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1185 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1189 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1190 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1189 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1191 = internal constant [9 x i8] c"_M_check\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at .str1192 = internal constant [21 x i8] c"_ZNKSs8_M_checkEjPKc\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram1193 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str1191, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str1191, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str1192, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 308, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1190 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1194 = internal constant [5 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1195 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1194 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1196 = internal constant [16 x i8] c"_M_check_length\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at .str1197 = internal constant [30 x i8] c"_ZNKSs15_M_check_lengthEjjPKc\00", section "llvm.metadata" ; <[30 x i8]*> [#uses=1] + at llvm.dbg.subprogram1198 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str1196, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1196, i32 0, i32 0), i8* getelementptr ([30 x i8]* @.str1197, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 316, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1195 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1199 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1200 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1199 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1201 = internal constant [9 x i8] c"_M_limit\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at .str1202 = internal constant [19 x i8] c"_ZNKSs8_M_limitEjj\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.subprogram1203 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str1201, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str1201, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str1202, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 324, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1200 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1204 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype1032 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1205 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1204 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1206 = internal constant [12 x i8] c"_M_disjunct\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at .str1207 = internal constant [24 x i8] c"_ZNKSs11_M_disjunctEPKc\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram1208 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str1206, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str1206, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str1207, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 332, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1205 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1209 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1210 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1209 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1211 = internal constant [8 x i8] c"_M_copy\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str1212 = internal constant [21 x i8] c"_ZNSs7_M_copyEPcPKcj\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram1213 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1211, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1211, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str1212, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 341, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1210 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1214 = internal constant [8 x i8] c"_M_move\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str1215 = internal constant [21 x i8] c"_ZNSs7_M_moveEPcPKcj\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram1216 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1214, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1214, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str1215, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 350, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1210 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1217 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1218 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1217 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1219 = internal constant [10 x i8] c"_M_assign\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str1220 = internal constant [21 x i8] c"_ZNSs9_M_assignEPcjc\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram1221 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str1219, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str1219, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str1220, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 359, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1218 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1222 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* null, %0* null], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1223 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1222 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1224 = internal constant [14 x i8] c"_S_copy_chars\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram1225 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 371, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1223 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1226 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1227 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1226 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1228 = internal constant [64 x i8] c"_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_\00", section "llvm.metadata" ; <[64 x i8]*> [#uses=1] + at llvm.dbg.subprogram1229 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([64 x i8]* @.str1228, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 378, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1227 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1230 = internal constant [103 x i8] c"__normal_iterator, std::allocator > >\00", section "llvm.metadata" ; <[103 x i8]*> [#uses=1] + at llvm.dbg.composite1231 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([103 x i8]* @.str1230, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 637, i64 0, i64 0, i64 0, i32 4, %0* null, %0* null, i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array1232 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1231 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1231 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1233 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1232 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1234 = internal constant [65 x i8] c"_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_\00", section "llvm.metadata" ; <[65 x i8]*> [#uses=1] + at llvm.dbg.subprogram1235 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([65 x i8]* @.str1234, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 382, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1233 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1236 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1237 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1236 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1238 = internal constant [28 x i8] c"_ZNSs13_S_copy_charsEPcS_S_\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram1239 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str1238, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 386, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1237 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1240 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1241 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1240 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1242 = internal constant [30 x i8] c"_ZNSs13_S_copy_charsEPcPKcS1_\00", section "llvm.metadata" ; <[30 x i8]*> [#uses=1] + at llvm.dbg.subprogram1243 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1224, i32 0, i32 0), i8* getelementptr ([30 x i8]* @.str1242, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 390, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1241 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1244 = internal constant [5 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1245 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1244 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1246 = internal constant [10 x i8] c"_M_mutate\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str1247 = internal constant [20 x i8] c"_ZNSs9_M_mutateEjjj\00", section "llvm.metadata" ; <[20 x i8]*> [#uses=1] + at llvm.dbg.subprogram1248 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str1246, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str1246, i32 0, i32 0), i8* getelementptr ([20 x i8]* @.str1247, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 451, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1245 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1249 = internal constant [13 x i8] c"_M_leak_hard\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at .str1250 = internal constant [22 x i8] c"_ZNSs12_M_leak_hardEv\00", section "llvm.metadata" ; <[22 x i8]*> [#uses=1] + at llvm.dbg.subprogram1251 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1249, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1249, i32 0, i32 0), i8* getelementptr ([22 x i8]* @.str1250, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 437, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1185 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1252 = internal constant [22 x i8] c"_ZNSs12_S_empty_repEv\00", section "llvm.metadata" ; <[22 x i8]*> [#uses=1] + at llvm.dbg.subprogram1253 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1028, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1028, i32 0, i32 0), i8* getelementptr ([22 x i8]* @.str1252, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 400, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1027 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1254 = internal constant [13 x i8] c"basic_string\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.subprogram1255 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 2055, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1185 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1256 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1257 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1256 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1258 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 191, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1257 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype1259 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype916 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1260 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1261 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1260 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1262 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 183, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1261 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1263 = internal constant [5 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1264 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1263 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1265 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 197, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1264 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1266 = internal constant [6 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1267 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1266 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1268 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 208, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1267 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1269 = internal constant [5 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1270 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1269 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1271 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 219, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1270 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1272 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1273 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1272 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1274 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 226, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1273 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1275 = internal constant [5 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1276 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1275 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1277 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 233, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1276 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1278 = internal constant [5 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* null, %0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1279 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1278 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1280 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1254, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 477, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1279 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1281 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1282 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1281 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1283 = internal constant [14 x i8] c"~basic_string\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram1284 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1283, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1283, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 482, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1282 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype1285 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1693 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1286 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1287 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1286 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1288 = internal constant [13 x i8] c"_ZNSsaSERKSs\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.subprogram1289 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1288, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 490, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1287 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1290 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1291 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1290 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1292 = internal constant [12 x i8] c"_ZNSsaSEPKc\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.subprogram1293 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str1292, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 498, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1291 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1294 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1295 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1294 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1296 = internal constant [10 x i8] c"_ZNSsaSEc\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.subprogram1297 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str89, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str1296, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 509, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1295 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1298 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1299 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1298 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1300 = internal constant [6 x i8] c"begin\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at .str1301 = internal constant [14 x i8] c"_ZNSs5beginEv\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram1302 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1300, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1300, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1301, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 521, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1299 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1303 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1231 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1304 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1303 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1305 = internal constant [15 x i8] c"_ZNKSs5beginEv\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1306 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1300, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1300, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1305, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 532, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1304 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1307 = internal constant [4 x i8] c"end\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1] + at .str1308 = internal constant [12 x i8] c"_ZNSs3endEv\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.subprogram1309 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str1307, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str1307, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str1308, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 540, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1299 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1310 = internal constant [13 x i8] c"_ZNKSs3endEv\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.subprogram1311 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str1307, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str1307, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1310, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 551, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1304 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1312 = internal constant [128 x i8] c"reverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >\00", section "llvm.metadata" ; <[128 x i8]*> [#uses=1] + at llvm.dbg.composite1313 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([128 x i8]* @.str1312, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 100, i64 0, i64 0, i64 0, i32 4, %0* null, %0* null, i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array1314 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1313 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1315 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1314 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1316 = internal constant [7 x i8] c"rbegin\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at .str1317 = internal constant [15 x i8] c"_ZNSs6rbeginEv\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1318 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1316, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1316, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1317, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 560, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1315 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1319 = internal constant [134 x i8] c"reverse_iterator<__gnu_cxx::__normal_iterator, std::allocator > > >\00", section "llvm.metadata" ; <[134 x i8]*> [#uses=1] + at llvm.dbg.composite1320 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([134 x i8]* @.str1319, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1098 to %0*), i32 100, i64 0, i64 0, i64 0, i32 4, %0* null, %0* null, i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array1321 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1320 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1322 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1321 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1323 = internal constant [16 x i8] c"_ZNKSs6rbeginEv\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1324 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1316, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1316, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1323, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 569, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1322 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1325 = internal constant [5 x i8] c"rend\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str1326 = internal constant [13 x i8] c"_ZNSs4rendEv\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.subprogram1327 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1325, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1325, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1326, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 578, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1315 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1328 = internal constant [14 x i8] c"_ZNKSs4rendEv\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram1329 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1325, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1325, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1328, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 587, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1322 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1330 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1331 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1330 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1332 = internal constant [5 x i8] c"size\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str1333 = internal constant [14 x i8] c"_ZNKSs4sizeEv\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram1334 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1332, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1332, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1333, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 595, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1331 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1335 = internal constant [7 x i8] c"length\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at .str1336 = internal constant [16 x i8] c"_ZNKSs6lengthEv\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1337 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1335, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1335, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1336, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 601, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1331 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1338 = internal constant [18 x i8] c"_ZNKSs8max_sizeEv\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1339 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str863, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str863, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1338, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 606, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1331 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1340 = internal constant [4 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1341 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1340 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1342 = internal constant [7 x i8] c"resize\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at .str1343 = internal constant [16 x i8] c"_ZNSs6resizeEjc\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1344 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1342, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1342, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1343, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 622, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1341 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1345 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1346 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1345 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1347 = internal constant [15 x i8] c"_ZNSs6resizeEj\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1348 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1342, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1342, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1347, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 633, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1346 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1349 = internal constant [9 x i8] c"capacity\00", section "llvm.metadata" ; <[9 x i8]*> [#uses=1] + at .str1350 = internal constant [18 x i8] c"_ZNKSs8capacityEv\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1351 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([9 x i8]* @.str1349, i32 0, i32 0), i8* getelementptr ([9 x i8]* @.str1349, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1350, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 641, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1331 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite1352 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1345 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1353 = internal constant [8 x i8] c"reserve\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str1354 = internal constant [16 x i8] c"_ZNSs7reserveEj\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1355 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1353, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1353, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1354, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 484, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1352 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1356 = internal constant [6 x i8] c"clear\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at .str1357 = internal constant [14 x i8] c"_ZNSs5clearEv\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram1358 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1356, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1356, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1357, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 668, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1185 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1359 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype1032 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1360 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1359 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1361 = internal constant [6 x i8] c"empty\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at .str1362 = internal constant [15 x i8] c"_ZNKSs5emptyEv\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1363 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1361, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1361, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1362, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 675, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1360 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1364 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype845 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1365 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1364 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1366 = internal constant [11 x i8] c"_ZNKSsixEj\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.subprogram1367 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1366, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 690, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1365 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1368 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype839 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1369 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1368 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1370 = internal constant [10 x i8] c"_ZNSsixEj\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.subprogram1371 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str334, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str1370, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 707, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1369 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1372 = internal constant [3 x i8] c"at\00", section "llvm.metadata" ; <[3 x i8]*> [#uses=1] + at .str1373 = internal constant [12 x i8] c"_ZNKSs2atEj\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.subprogram1374 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([3 x i8]* @.str1372, i32 0, i32 0), i8* getelementptr ([3 x i8]* @.str1372, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str1373, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 728, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1365 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1375 = internal constant [11 x i8] c"_ZNSs2atEj\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1] + at llvm.dbg.subprogram1376 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([3 x i8]* @.str1372, i32 0, i32 0), i8* getelementptr ([3 x i8]* @.str1372, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str1375, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 747, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1369 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1377 = internal constant [13 x i8] c"_ZNSspLERKSs\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.subprogram1378 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1377, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 762, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1287 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1379 = internal constant [12 x i8] c"_ZNSspLEPKc\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.subprogram1380 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str1379, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 771, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1291 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1381 = internal constant [10 x i8] c"_ZNSspLEc\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at llvm.dbg.subprogram1382 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([11 x i8]* @.str92, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str1381, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 780, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1295 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1383 = internal constant [7 x i8] c"append\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at .str1384 = internal constant [18 x i8] c"_ZNSs6appendERKSs\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1385 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1384, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 330, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1287 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1386 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1387 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1386 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1388 = internal constant [20 x i8] c"_ZNSs6appendERKSsjj\00", section "llvm.metadata" ; <[20 x i8]*> [#uses=1] + at llvm.dbg.subprogram1389 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([20 x i8]* @.str1388, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 347, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1387 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1390 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1391 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1390 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1392 = internal constant [18 x i8] c"_ZNSs6appendEPKcj\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1393 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1392, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 303, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1391 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1394 = internal constant [17 x i8] c"_ZNSs6appendEPKc\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram1395 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1394, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 824, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1291 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1396 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1397 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1396 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1398 = internal constant [16 x i8] c"_ZNSs6appendEjc\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1399 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1398, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 286, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1397 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1400 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* null, %0* null], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1401 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1400 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1402 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1383, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 851, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1401 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1403 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1404 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1403 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1405 = internal constant [10 x i8] c"push_back\00", section "llvm.metadata" ; <[10 x i8]*> [#uses=1] + at .str1406 = internal constant [18 x i8] c"_ZNSs9push_backEc\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1407 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str1405, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str1405, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1406, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 859, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1404 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1408 = internal constant [7 x i8] c"assign\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at .str1409 = internal constant [18 x i8] c"_ZNSs6assignERKSs\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1410 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1409, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 248, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1287 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1411 = internal constant [20 x i8] c"_ZNSs6assignERKSsjj\00", section "llvm.metadata" ; <[20 x i8]*> [#uses=1] + at llvm.dbg.subprogram1412 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([20 x i8]* @.str1411, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 889, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1387 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1413 = internal constant [18 x i8] c"_ZNSs6assignEPKcj\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1414 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1413, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 264, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1391 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1415 = internal constant [17 x i8] c"_ZNSs6assignEPKc\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram1416 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1415, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 917, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1291 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1417 = internal constant [16 x i8] c"_ZNSs6assignEjc\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1418 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1417, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 933, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1397 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite1419 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1400 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1420 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1408, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 946, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1419 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1421 = internal constant [5 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1422 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1421 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1423 = internal constant [7 x i8] c"insert\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at .str1424 = internal constant [53 x i8] c"_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEjc\00", section "llvm.metadata" ; <[53 x i8]*> [#uses=1] + at llvm.dbg.subprogram1425 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([53 x i8]* @.str1424, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 962, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1422 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1426 = internal constant [5 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* null, %0* null], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1427 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1426 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1428 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 978, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1427 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1429 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1430 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1429 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1431 = internal constant [19 x i8] c"_ZNSs6insertEjRKSs\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.subprogram1432 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str1431, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 993, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1430 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1433 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1434 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1433 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1435 = internal constant [21 x i8] c"_ZNSs6insertEjRKSsjj\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram1436 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str1435, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1016, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1434 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1437 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1438 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1437 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1439 = internal constant [19 x i8] c"_ZNSs6insertEjPKcj\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.subprogram1440 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str1439, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 365, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1438 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1441 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1442 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1441 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1443 = internal constant [18 x i8] c"_ZNSs6insertEjPKc\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1444 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1443, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1056, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1442 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1445 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1446 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1445 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1447 = internal constant [17 x i8] c"_ZNSs6insertEjjc\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram1448 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1447, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1079, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1446 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1449 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1450 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1449 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1451 = internal constant [52 x i8] c"_ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEEc\00", section "llvm.metadata" ; <[52 x i8]*> [#uses=1] + at llvm.dbg.subprogram1452 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1423, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str1451, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1096, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1450 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1453 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1454 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1453 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1455 = internal constant [6 x i8] c"erase\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at .str1456 = internal constant [15 x i8] c"_ZNSs5eraseEjj\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1457 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1455, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1455, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1456, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1120, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1454 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1458 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1459 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1458 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1460 = internal constant [50 x i8] c"_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEE\00", section "llvm.metadata" ; <[50 x i8]*> [#uses=1] + at llvm.dbg.subprogram1461 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1455, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1455, i32 0, i32 0), i8* getelementptr ([50 x i8]* @.str1460, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1136, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1459 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1462 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1463 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1462 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1464 = internal constant [53 x i8] c"_ZNSs5eraseEN9__gnu_cxx17__normal_iteratorIPcSsEES2_\00", section "llvm.metadata" ; <[53 x i8]*> [#uses=1] + at llvm.dbg.subprogram1465 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1455, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1455, i32 0, i32 0), i8* getelementptr ([53 x i8]* @.str1464, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1156, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1463 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1466 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1467 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1466 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1468 = internal constant [8 x i8] c"replace\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str1469 = internal constant [21 x i8] c"_ZNSs7replaceEjjRKSs\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram1470 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str1469, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1183, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1467 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1471 = internal constant [7 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[7 x %0*]*> [#uses=1] + at llvm.dbg.composite1472 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([7 x %0*]* @llvm.dbg.array1471 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1473 = internal constant [23 x i8] c"_ZNSs7replaceEjjRKSsjj\00", section "llvm.metadata" ; <[23 x i8]*> [#uses=1] + at llvm.dbg.subprogram1474 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([23 x i8]* @.str1473, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1206, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1472 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1475 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1476 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1475 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1477 = internal constant [21 x i8] c"_ZNSs7replaceEjjPKcj\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram1478 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str1477, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 397, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1476 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1479 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1480 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1479 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1481 = internal constant [20 x i8] c"_ZNSs7replaceEjjPKc\00", section "llvm.metadata" ; <[20 x i8]*> [#uses=1] + at llvm.dbg.subprogram1482 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([20 x i8]* @.str1481, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1248, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1480 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1483 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1484 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1483 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1485 = internal constant [19 x i8] c"_ZNSs7replaceEjjjc\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.subprogram1486 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str1485, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1271, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1484 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1487 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1488 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1487 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1489 = internal constant [59 x i8] c"_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_RKSs\00", section "llvm.metadata" ; <[59 x i8]*> [#uses=1] + at llvm.dbg.subprogram1490 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([59 x i8]* @.str1489, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1289, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1488 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1491 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1492 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1491 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1493 = internal constant [59 x i8] c"_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcj\00", section "llvm.metadata" ; <[59 x i8]*> [#uses=1] + at llvm.dbg.subprogram1494 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([59 x i8]* @.str1493, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1307, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1492 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1495 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1496 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1495 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1497 = internal constant [58 x i8] c"_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKc\00", section "llvm.metadata" ; <[58 x i8]*> [#uses=1] + at llvm.dbg.subprogram1498 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([58 x i8]* @.str1497, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1328, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1496 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1499 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1500 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1499 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1501 = internal constant [57 x i8] c"_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_jc\00", section "llvm.metadata" ; <[57 x i8]*> [#uses=1] + at llvm.dbg.subprogram1502 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([57 x i8]* @.str1501, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1349, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1500 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1503 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* null, %0* null], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1504 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1503 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1505 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1373, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1504 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1506 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1507 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1506 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1508 = internal constant [61 x i8] c"_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S1_S1_\00", section "llvm.metadata" ; <[61 x i8]*> [#uses=1] + at llvm.dbg.subprogram1509 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([61 x i8]* @.str1508, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1385, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1507 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1510 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1511 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1510 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1512 = internal constant [61 x i8] c"_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_PKcS4_\00", section "llvm.metadata" ; <[61 x i8]*> [#uses=1] + at llvm.dbg.subprogram1513 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([61 x i8]* @.str1512, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1396, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1511 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1514 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1515 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1514 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1516 = internal constant [61 x i8] c"_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_S2_S2_\00", section "llvm.metadata" ; <[61 x i8]*> [#uses=1] + at llvm.dbg.subprogram1517 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([61 x i8]* @.str1516, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1406, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1515 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1518 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1231 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1231 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1519 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1518 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1520 = internal constant [70 x i8] c"_ZNSs7replaceEN9__gnu_cxx17__normal_iteratorIPcSsEES2_NS0_IPKcSsEES5_\00", section "llvm.metadata" ; <[70 x i8]*> [#uses=1] + at llvm.dbg.subprogram1521 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1468, i32 0, i32 0), i8* getelementptr ([70 x i8]* @.str1520, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1417, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1519 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1522 = internal constant [18 x i8] c"cpp_type_traits.h\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.compile_unit1523 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([18 x i8]* @.str1522, i32 0, i32 0), i8* getelementptr ([115 x i8]* @.str638, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str1524 = internal constant [12 x i8] c"__true_type\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at llvm.dbg.composite1526 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str1524, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1523 to %0*), i32 97, i64 8, i64 8, i64 0, i32 0, %0* null, %0* bitcast ([0 x %0*]* @llvm.dbg.array680 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array1527 = internal constant [7 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* null, %0* null, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1526 to %0*)], section "llvm.metadata" ; <[7 x %0*]*> [#uses=1] + at llvm.dbg.composite1528 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([7 x %0*]* @llvm.dbg.array1527 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1529 = internal constant [20 x i8] c"_M_replace_dispatch\00", section "llvm.metadata" ; <[20 x i8]*> [#uses=1] + at llvm.dbg.subprogram1530 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([20 x i8]* @.str1529, i32 0, i32 0), i8* getelementptr ([20 x i8]* @.str1529, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1430, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1528 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1531 = internal constant [13 x i8] c"__false_type\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.composite1533 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1531, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1523 to %0*), i32 98, i64 8, i64 8, i64 0, i32 0, %0* null, %0* bitcast ([0 x %0*]* @llvm.dbg.array680 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array1534 = internal constant [7 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1176 to %0*), %0* null, %0* null, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1533 to %0*)], section "llvm.metadata" ; <[7 x %0*]*> [#uses=1] + at llvm.dbg.composite1535 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([7 x %0*]* @llvm.dbg.array1534 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1536 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([20 x i8]* @.str1529, i32 0, i32 0), i8* getelementptr ([20 x i8]* @.str1529, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1436, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1535 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1537 = internal constant [15 x i8] c"_M_replace_aux\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at .str1538 = internal constant [27 x i8] c"_ZNSs14_M_replace_auxEjjjc\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram1539 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str1537, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1537, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str1538, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 651, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1484 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1540 = internal constant [16 x i8] c"_M_replace_safe\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at .str1541 = internal constant [30 x i8] c"_ZNSs15_M_replace_safeEjjPKcj\00", section "llvm.metadata" ; <[30 x i8]*> [#uses=1] + at llvm.dbg.subprogram1542 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str1540, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1540, i32 0, i32 0), i8* getelementptr ([30 x i8]* @.str1541, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 664, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1476 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1543 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* null, %0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1533 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1544 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1543 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1545 = internal constant [17 x i8] c"_S_construct_aux\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram1546 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str1545, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1545, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1451, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1544 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1547 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* null, %0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1526 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1548 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1547 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1549 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str1545, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1545, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1460, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1548 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1550 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* null, %0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1551 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1550 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1552 = internal constant [13 x i8] c"_S_construct\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at llvm.dbg.subprogram1553 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1552, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1552, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1466, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1551 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1554 = internal constant [26 x i8] c"stl_iterator_base_types.h\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.compile_unit1555 = internal constant %llvm.dbg.compile_unit.type { i32 458769, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to %0*), i32 4, i8* getelementptr ([26 x i8]* @.str1554, i32 0, i32 0), i8* getelementptr ([115 x i8]* @.str638, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str2, i32 0, i32 0), i1 false, i1 false, i8* null, i32 -1 }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1] + at .str1556 = internal constant [19 x i8] c"input_iterator_tag\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.composite1558 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([19 x i8]* @.str1556, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1555 to %0*), i32 80, i64 8, i64 8, i64 0, i32 0, %0* null, %0* bitcast ([0 x %0*]* @llvm.dbg.array680 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array1559 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* null, %0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1558 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1560 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1559 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1561 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1552, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1552, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1476, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1560 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1562 = internal constant [21 x i8] c"forward_iterator_tag\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1564 = internal constant %llvm.dbg.derivedtype.type { i32 458780, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1555 to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1558 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1565 = internal constant [1 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1564 to %0*)], section "llvm.metadata" ; <[1 x %0*]*> [#uses=1] + at llvm.dbg.composite1566 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([21 x i8]* @.str1562, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1555 to %0*), i32 84, i64 8, i64 8, i64 0, i32 0, %0* null, %0* bitcast ([1 x %0*]* @llvm.dbg.array1565 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.array1567 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* null, %0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*), %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1566 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1568 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1567 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1569 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1552, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1552, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1483, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1568 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1570 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype887 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1571 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1570 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1572 = internal constant [30 x i8] c"_ZNSs12_S_constructEjcRKSaIcE\00", section "llvm.metadata" ; <[30 x i8]*> [#uses=1] + at llvm.dbg.subprogram1573 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1552, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1552, i32 0, i32 0), i8* getelementptr ([30 x i8]* @.str1572, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 166, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1571 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1574 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1575 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1574 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1576 = internal constant [5 x i8] c"copy\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str1577 = internal constant [17 x i8] c"_ZNKSs4copyEPcjj\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram1578 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1576, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1576, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1577, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 705, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1575 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1579 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype923 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1285 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1580 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1579 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1581 = internal constant [5 x i8] c"swap\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str1582 = internal constant [15 x i8] c"_ZNSs4swapERSs\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1583 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1581, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1581, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1582, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 501, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1580 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1584 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1585 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1584 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1586 = internal constant [6 x i8] c"c_str\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at .str1587 = internal constant [15 x i8] c"_ZNKSs5c_strEv\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1588 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1586, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1586, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1587, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1522, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1585 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1589 = internal constant [5 x i8] c"data\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str1590 = internal constant [14 x i8] c"_ZNKSs4dataEv\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at llvm.dbg.subprogram1591 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1589, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1589, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1590, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1532, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1585 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1592 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite902 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1593 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1592 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1594 = internal constant [14 x i8] c"get_allocator\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at .str1595 = internal constant [24 x i8] c"_ZNKSs13get_allocatorEv\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram1596 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1594, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1594, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str1595, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1539, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1593 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1597 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1598 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1597 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1599 = internal constant [5 x i8] c"find\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at .str1600 = internal constant [18 x i8] c"_ZNKSs4findEPKcjj\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1601 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1599, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1599, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1600, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 719, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1598 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1602 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1603 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1602 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1604 = internal constant [18 x i8] c"_ZNKSs4findERKSsj\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1605 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1599, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1599, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1604, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1567, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1603 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1606 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1607 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1606 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1608 = internal constant [17 x i8] c"_ZNKSs4findEPKcj\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram1609 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1599, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1599, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1608, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1581, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1607 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1610 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype282 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype672 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1611 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1610 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1612 = internal constant [15 x i8] c"_ZNKSs4findEcj\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1613 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1599, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1599, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1612, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 742, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1611 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite1614 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1602 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1615 = internal constant [6 x i8] c"rfind\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at .str1616 = internal constant [19 x i8] c"_ZNKSs5rfindERKSsj\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.subprogram1617 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1615, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1615, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str1616, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1611, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1614 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1618 = internal constant [19 x i8] c"_ZNKSs5rfindEPKcjj\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.subprogram1619 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1615, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1615, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str1618, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 760, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1598 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite1620 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1606 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1621 = internal constant [18 x i8] c"_ZNKSs5rfindEPKcj\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at llvm.dbg.subprogram1622 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1615, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1615, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1621, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1639, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1620 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.composite1623 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1610 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1624 = internal constant [16 x i8] c"_ZNKSs5rfindEcj\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at llvm.dbg.subprogram1625 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([6 x i8]* @.str1615, i32 0, i32 0), i8* getelementptr ([6 x i8]* @.str1615, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1624, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 781, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1623 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1626 = internal constant [14 x i8] c"find_first_of\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at .str1627 = internal constant [28 x i8] c"_ZNKSs13find_first_ofERKSsj\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram1628 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1626, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1626, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str1627, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1669, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1603 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1629 = internal constant [28 x i8] c"_ZNKSs13find_first_ofEPKcjj\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram1630 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1626, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1626, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str1629, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 798, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1598 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1631 = internal constant [27 x i8] c"_ZNKSs13find_first_ofEPKcj\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram1632 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1626, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1626, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str1631, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1697, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1607 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1633 = internal constant [25 x i8] c"_ZNKSs13find_first_ofEcj\00", section "llvm.metadata" ; <[25 x i8]*> [#uses=1] + at llvm.dbg.subprogram1634 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1626, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1626, i32 0, i32 0), i8* getelementptr ([25 x i8]* @.str1633, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1716, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1611 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1635 = internal constant [13 x i8] c"find_last_of\00", section "llvm.metadata" ; <[13 x i8]*> [#uses=1] + at .str1636 = internal constant [27 x i8] c"_ZNKSs12find_last_ofERKSsj\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram1637 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1635, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1635, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str1636, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1730, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1614 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1638 = internal constant [27 x i8] c"_ZNKSs12find_last_ofEPKcjj\00", section "llvm.metadata" ; <[27 x i8]*> [#uses=1] + at llvm.dbg.subprogram1639 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1635, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1635, i32 0, i32 0), i8* getelementptr ([27 x i8]* @.str1638, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 813, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1598 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1640 = internal constant [26 x i8] c"_ZNKSs12find_last_ofEPKcj\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram1641 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1635, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1635, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str1640, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1758, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1620 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1642 = internal constant [24 x i8] c"_ZNKSs12find_last_ofEcj\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram1643 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([13 x i8]* @.str1635, i32 0, i32 0), i8* getelementptr ([13 x i8]* @.str1635, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str1642, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1777, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1623 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1644 = internal constant [18 x i8] c"find_first_not_of\00", section "llvm.metadata" ; <[18 x i8]*> [#uses=1] + at .str1645 = internal constant [32 x i8] c"_ZNKSs17find_first_not_ofERKSsj\00", section "llvm.metadata" ; <[32 x i8]*> [#uses=1] + at llvm.dbg.subprogram1646 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str1644, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1644, i32 0, i32 0), i8* getelementptr ([32 x i8]* @.str1645, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1791, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1603 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1647 = internal constant [32 x i8] c"_ZNKSs17find_first_not_ofEPKcjj\00", section "llvm.metadata" ; <[32 x i8]*> [#uses=1] + at llvm.dbg.subprogram1648 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str1644, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1644, i32 0, i32 0), i8* getelementptr ([32 x i8]* @.str1647, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 834, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1598 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1649 = internal constant [31 x i8] c"_ZNKSs17find_first_not_ofEPKcj\00", section "llvm.metadata" ; <[31 x i8]*> [#uses=1] + at llvm.dbg.subprogram1650 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str1644, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1644, i32 0, i32 0), i8* getelementptr ([31 x i8]* @.str1649, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1820, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1607 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1651 = internal constant [29 x i8] c"_ZNKSs17find_first_not_ofEcj\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram1652 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([18 x i8]* @.str1644, i32 0, i32 0), i8* getelementptr ([18 x i8]* @.str1644, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str1651, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 846, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1611 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1653 = internal constant [17 x i8] c"find_last_not_of\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at .str1654 = internal constant [31 x i8] c"_ZNKSs16find_last_not_ofERKSsj\00", section "llvm.metadata" ; <[31 x i8]*> [#uses=1] + at llvm.dbg.subprogram1655 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str1653, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1653, i32 0, i32 0), i8* getelementptr ([31 x i8]* @.str1654, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1850, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1614 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1656 = internal constant [31 x i8] c"_ZNKSs16find_last_not_ofEPKcjj\00", section "llvm.metadata" ; <[31 x i8]*> [#uses=1] + at llvm.dbg.subprogram1657 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str1653, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1653, i32 0, i32 0), i8* getelementptr ([31 x i8]* @.str1656, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 857, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1598 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1658 = internal constant [30 x i8] c"_ZNKSs16find_last_not_ofEPKcj\00", section "llvm.metadata" ; <[30 x i8]*> [#uses=1] + at llvm.dbg.subprogram1659 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str1653, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1653, i32 0, i32 0), i8* getelementptr ([30 x i8]* @.str1658, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1879, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1620 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1660 = internal constant [28 x i8] c"_ZNKSs16find_last_not_ofEcj\00", section "llvm.metadata" ; <[28 x i8]*> [#uses=1] + at llvm.dbg.subprogram1661 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([17 x i8]* @.str1653, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1653, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str1660, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 878, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1623 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1662 = internal constant [4 x %0*] [%0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1693 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[4 x %0*]*> [#uses=1] + at llvm.dbg.composite1663 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([4 x %0*]* @llvm.dbg.array1662 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1664 = internal constant [7 x i8] c"substr\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at .str1665 = internal constant [17 x i8] c"_ZNKSs6substrEjj\00", section "llvm.metadata" ; <[17 x i8]*> [#uses=1] + at llvm.dbg.subprogram1666 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1664, i32 0, i32 0), i8* getelementptr ([7 x i8]* @.str1664, i32 0, i32 0), i8* getelementptr ([17 x i8]* @.str1665, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1911, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1663 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1667 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1668 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1667 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1669 = internal constant [8 x i8] c"compare\00", section "llvm.metadata" ; <[8 x i8]*> [#uses=1] + at .str1670 = internal constant [20 x i8] c"_ZNKSs7compareERKSs\00", section "llvm.metadata" ; <[20 x i8]*> [#uses=1] + at llvm.dbg.subprogram1671 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([20 x i8]* @.str1670, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit807 to %0*), i32 1929, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1668 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1672 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1673 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1672 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1674 = internal constant [22 x i8] c"_ZNKSs7compareEjjRKSs\00", section "llvm.metadata" ; <[22 x i8]*> [#uses=1] + at llvm.dbg.subprogram1675 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([22 x i8]* @.str1674, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 898, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1673 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1676 = internal constant [7 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1259 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[7 x %0*]*> [#uses=1] + at llvm.dbg.composite1677 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([7 x %0*]* @llvm.dbg.array1676 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1678 = internal constant [24 x i8] c"_ZNKSs7compareEjjRKSsjj\00", section "llvm.metadata" ; <[24 x i8]*> [#uses=1] + at llvm.dbg.subprogram1679 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([24 x i8]* @.str1678, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 914, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1677 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1680 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1681 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1680 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1682 = internal constant [19 x i8] c"_ZNKSs7compareEPKc\00", section "llvm.metadata" ; <[19 x i8]*> [#uses=1] + at llvm.dbg.subprogram1683 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([19 x i8]* @.str1682, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 931, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1681 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1684 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1685 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1684 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1686 = internal constant [21 x i8] c"_ZNKSs7compareEjjPKc\00", section "llvm.metadata" ; <[21 x i8]*> [#uses=1] + at llvm.dbg.subprogram1687 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([21 x i8]* @.str1686, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 946, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1685 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1688 = internal constant [6 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype917 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype280 to %0*)], section "llvm.metadata" ; <[6 x %0*]*> [#uses=1] + at llvm.dbg.composite1689 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([6 x %0*]* @llvm.dbg.array1688 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1690 = internal constant [22 x i8] c"_ZNKSs7compareEjjPKcj\00", section "llvm.metadata" ; <[22 x i8]*> [#uses=1] + at llvm.dbg.subprogram1691 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([8 x i8]* @.str1669, i32 0, i32 0), i8* getelementptr ([22 x i8]* @.str1690, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit1070 to %0*), i32 963, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1689 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1692 = internal constant [143 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype913 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram922 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram927 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1096 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1180 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1183 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1188 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1193 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1198 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1203 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1208 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1213 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.db! g.subprogram1216 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1221 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1225 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1229 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1235 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1239 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1243 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1248 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1251 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1253 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1255 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1258 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1262 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1265 to %0*), ! %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram12! 68 to %0 *), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1271 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1274 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1277 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1280 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1284 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1289 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1293 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1297 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1302 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1306 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1309 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1311 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1318 to %0*), %0* bitcast (%llvm.dbg.! subprogram.type* @llvm.dbg.subprogram1324 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1327 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1329 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1334 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1337 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1339 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1344 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1348 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1351 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1355 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1358 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1363 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1367 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg! .subprogram1371 to %0*), %0* bitcast (%llvm.dbg.subprogram.typ! e* @llvm .dbg.subprogram1374 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1376 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1378 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1380 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1382 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1385 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1389 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1393 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1395 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1399 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1402 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1407 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1410 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1412 to %0*)! , %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1414 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1416 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1418 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1420 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1425 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1428 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1432 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1436 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1440 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1444 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1448 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1452 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1457 to %0*), %0* bitcast (%llvm.dbg.s! ubprogram.type* @llvm.dbg.subprogram1461 to %0*), %0* bitcast ! (%llvm.d bg.subprogram.type* @llvm.dbg.subprogram1465 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1470 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1474 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1478 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1482 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1486 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1490 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1494 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1498 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1502 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1505 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1509 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1513 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.d! bg.subprogram1517 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1521 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1530 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1536 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1539 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1542 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1546 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1549 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1553 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1561 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1569 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1573 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1578 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1583 to %0*),! %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1! 588 to % 0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1591 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1596 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1601 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1605 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1609 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1613 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1617 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1619 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1622 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1625 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1628 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1630 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1632 to %0*), %0* bitcast (%llvm.dbg! .subprogram.type* @llvm.dbg.subprogram1634 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1637 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1639 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1641 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1643 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1646 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1648 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1650 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1652 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1655 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1657 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1659 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1661 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.db! g.subprogram1666 to %0*), %0* bitcast (%llvm.dbg.subprogram.ty! pe* @llv m.dbg.subprogram1671 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1675 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1679 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1683 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1687 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1691 to %0*)], section "llvm.metadata" ; <[143 x %0*]*> [#uses=1] + at llvm.dbg.composite1693 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([64 x i8]* @.str804, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit803 to %0*), i32 56, i64 32, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([143 x %0*]* @llvm.dbg.array1692 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype1694 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str914, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit803 to %0*), i32 56, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1693 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at .str1695 = internal constant [7 x i8] c"_M_msg\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1] + at llvm.dbg.derivedtype1696 = internal constant %llvm.dbg.derivedtype.type { i32 458765, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str1695, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 109, i64 32, i64 32, i64 32, i32 1, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1694 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1697 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1714 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1698 = internal constant %llvm.dbg.derivedtype.type { i32 458774, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([7 x i8]* @.str914, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit803 to %0*), i32 56, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype916 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1699 = internal constant %llvm.dbg.derivedtype.type { i32 458768, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1698 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1700 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1697 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1699 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1701 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1700 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1702 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str775, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str775, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 114, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1701 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1703 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1697 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1704 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1703 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1705 = internal constant [15 x i8] c"~runtime_error\00", section "llvm.metadata" ; <[15 x i8]*> [#uses=1] + at llvm.dbg.subprogram1706 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str1705, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str1705, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 117, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1704 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.derivedtype1707 = internal constant %llvm.dbg.derivedtype.type { i32 458790, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 64, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1714 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1708 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1707 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1709 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype791 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1708 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1710 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1709 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1711 = internal constant [29 x i8] c"_ZNKSt13runtime_error4whatEv\00", section "llvm.metadata" ; <[29 x i8]*> [#uses=1] + at llvm.dbg.subprogram1712 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str796, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str796, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str1711, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 122, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1710 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1713 = internal constant [5 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype801 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1696 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1702 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1706 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1712 to %0*)], section "llvm.metadata" ; <[5 x %0*]*> [#uses=1] + at llvm.dbg.composite1714 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str775, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 108, i64 64, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([5 x %0*]* @llvm.dbg.array1713 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype1715 = internal constant %llvm.dbg.derivedtype.type { i32 458780, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1714 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.derivedtype1716 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1721 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1717 = internal constant [3 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1716 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1699 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1718 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1717 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.subprogram1719 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str773, i32 0, i32 0), i8* getelementptr ([15 x i8]* @.str773, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 136, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1718 to %0*), i1 false, i1 false }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1720 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1715 to %0*), %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1719 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1721 = internal constant %llvm.dbg.composite.type { i32 458771, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([15 x i8]* @.str773, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 134, i64 64, i64 32, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1720 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at llvm.dbg.derivedtype1722 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1721 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1723 = internal constant [2 x %0*] [%0* null, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1722 to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1724 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1723 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1725 = internal constant [16 x i8] c"~overflow_error\00", section "llvm.metadata" ; <[16 x i8]*> [#uses=1] + at .str1726 = internal constant [26 x i8] c"_ZNSt14overflow_errorD1Ev\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram1727 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str1725, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1725, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str1726, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*), i32 134, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1724 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at _ZTVSt14overflow_error = weak constant [5 x i32 (...)*] [i32 (...)* null, i32 (...)* bitcast (%struct.__si_class_type_info_pseudo* @_ZTISt14overflow_error to i32 (...)*), i32 (...)* bitcast (void (%"struct.std::overflow_error"*)* @_ZNSt14overflow_errorD1Ev to i32 (...)*), i32 (...)* bitcast (void (%"struct.std::overflow_error"*)* @_ZNSt14overflow_errorD0Ev to i32 (...)*), i32 (...)* bitcast (i8* (%"struct.std::runtime_error"*)* @_ZNKSt13runtime_error4whatEv to i32 (...)*)], align 8 ; <[5 x i32 (...)*]*> [#uses=1] + at .str1735 = internal constant [26 x i8] c"_ZNSt14overflow_errorD0Ev\00", section "llvm.metadata" ; <[26 x i8]*> [#uses=1] + at llvm.dbg.subprogram1736 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([16 x i8]* @.str1725, i32 0, i32 0), i8* getelementptr ([16 x i8]* @.str1725, i32 0, i32 0), i8* getelementptr ([26 x i8]* @.str1735, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 702, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1724 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.array1738 = internal constant [2 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to %0*)], section "llvm.metadata" ; <[2 x %0*]*> [#uses=1] + at llvm.dbg.composite1739 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([2 x %0*]* @llvm.dbg.array1738 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1740 = internal constant [14 x i8] c"__complex_exp\00", section "llvm.metadata" ; <[14 x i8]*> [#uses=1] + at .str1741 = internal constant [22 x i8] c"_ZSt13__complex_expCd\00", section "llvm.metadata" ; <[22 x i8]*> [#uses=1] + at llvm.dbg.subprogram1742 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([14 x i8]* @.str1740, i32 0, i32 0), i8* getelementptr ([14 x i8]* @.str1740, i32 0, i32 0), i8* getelementptr ([22 x i8]* @.str1741, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 730, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1739 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1744 = internal constant [12 x i8] c"exp\00", section "llvm.metadata" ; <[12 x i8]*> [#uses=1] + at .str1745 = internal constant [31 x i8] c"_ZSt3expIdESt7complexIT_ERKS2_\00", section "llvm.metadata" ; <[31 x i8]*> [#uses=1] + at llvm.dbg.subprogram1746 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str1744, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str1744, i32 0, i32 0), i8* getelementptr ([31 x i8]* @.str1745, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*), i32 738, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite573 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.subprogram1748 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([4 x i8]* @.str457, i32 0, i32 0), i8* getelementptr ([4 x i8]* @.str457, i32 0, i32 0), i8* getelementptr ([29 x i8]* @.str495, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 497, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite488 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable1751 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1748 to %0*), i8* getelementptr ([7 x i8]* @.str259, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 503, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1752 = internal constant [2 x i8] c"u\00", section "llvm.metadata" ; <[2 x i8]*> [#uses=1] + at llvm.dbg.variable1753 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1748 to %0*), i8* getelementptr ([2 x i8]* @.str1752, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 501, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1754 = internal constant [2 x i8] c"t\00", section "llvm.metadata" ; <[2 x i8]*> [#uses=1] + at llvm.dbg.variable1755 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1748 to %0*), i8* getelementptr ([2 x i8]* @.str1754, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 501, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1756 = internal constant [2 x i8] c"w\00", section "llvm.metadata" ; <[2 x i8]*> [#uses=1] + at llvm.dbg.variable1757 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1748 to %0*), i8* getelementptr ([2 x i8]* @.str1756, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 501, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1758 = internal constant [3 x i8] c"wm\00", section "llvm.metadata" ; <[3 x i8]*> [#uses=1] + at llvm.dbg.variable1759 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1748 to %0*), i8* getelementptr ([3 x i8]* @.str1758, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 501, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.subprogram1771 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([12 x i8]* @.str460, i32 0, i32 0), i8* getelementptr ([12 x i8]* @.str460, i32 0, i32 0), i8* getelementptr ([52 x i8]* @.str497, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 535, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite492 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable1774 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1771 to %0*), i8* getelementptr ([7 x i8]* @.str259, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 541, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.variable1775 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1771 to %0*), i8* getelementptr ([2 x i8]* @.str1752, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 539, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.variable1776 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1771 to %0*), i8* getelementptr ([2 x i8]* @.str1754, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 539, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.variable1777 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1771 to %0*), i8* getelementptr ([2 x i8]* @.str1756, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 539, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.variable1778 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1771 to %0*), i8* getelementptr ([3 x i8]* @.str1758, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 539, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite223 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.subprogram1785 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([10 x i8]* @.str463, i32 0, i32 0), i8* getelementptr ([10 x i8]* @.str463, i32 0, i32 0), i8* getelementptr ([28 x i8]* @.str499, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 576, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite351 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at llvm.dbg.variable1791 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1785 to %0*), i8* getelementptr ([7 x i8]* @.str259, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 614, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1794 = internal constant [5 x i8] c"dft2\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at llvm.dbg.variable1795 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1785 to %0*), i8* getelementptr ([5 x i8]* @.str1794, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 601, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1796 = internal constant [5 x i8] c"dft1\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at llvm.dbg.variable1797 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1785 to %0*), i8* getelementptr ([5 x i8]* @.str1796, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 600, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite486 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1798 = internal constant [3 x i8] c"a2\00", section "llvm.metadata" ; <[3 x i8]*> [#uses=1] + at llvm.dbg.variable1799 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1785 to %0*), i8* getelementptr ([3 x i8]* @.str1798, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 591, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1800 = internal constant [3 x i8] c"a1\00", section "llvm.metadata" ; <[3 x i8]*> [#uses=1] + at llvm.dbg.variable1801 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1785 to %0*), i8* getelementptr ([3 x i8]* @.str1800, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 590, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at llvm.dbg.derivedtype1802 = internal constant %llvm.dbg.derivedtype.type { i32 458767, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 32, i64 32, i64 0, i32 0, %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype837 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.derivedtype.type*> [#uses=1] + at llvm.dbg.array1803 = internal constant [3 x %0*] [%0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype269 to %0*), %0* bitcast (%llvm.dbg.derivedtype.type* @llvm.dbg.derivedtype1802 to %0*)], section "llvm.metadata" ; <[3 x %0*]*> [#uses=1] + at llvm.dbg.composite1804 = internal constant %llvm.dbg.composite.type { i32 458773, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 0, i64 0, i64 0, i64 0, i32 0, %0* null, %0* bitcast ([3 x %0*]* @llvm.dbg.array1803 to %0*), i32 0 }, section "llvm.metadata" ; <%llvm.dbg.composite.type*> [#uses=1] + at .str1805 = internal constant [5 x i8] c"main\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1] + at llvm.dbg.subprogram1806 = internal constant %llvm.dbg.subprogram.type { i32 458798, %0* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to %0*), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i8* getelementptr ([5 x i8]* @.str1805, i32 0, i32 0), i8* getelementptr ([5 x i8]* @.str1805, i32 0, i32 0), i8* null, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 654, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite1804 to %0*), i1 false, i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1] + at .str1816 = internal constant [6 x i8] c"poly3\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at llvm.dbg.variable1817 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1806 to %0*), i8* getelementptr ([6 x i8]* @.str1816, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 674, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1818 = internal constant [6 x i8] c"poly2\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at llvm.dbg.variable1819 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1806 to %0*), i8* getelementptr ([6 x i8]* @.str1818, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 673, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1820 = internal constant [6 x i8] c"poly1\00", section "llvm.metadata" ; <[6 x i8]*> [#uses=1] + at llvm.dbg.variable1821 = internal constant %llvm.dbg.variable.type { i32 459008, %0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1806 to %0*), i8* getelementptr ([6 x i8]* @.str1820, i32 0, i32 0), %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*), i32 672, %0* bitcast (%llvm.dbg.composite.type* @llvm.dbg.composite518 to %0*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1] + at .str1824 = internal constant [4 x i8] c"-ga\00", align 4 ; <[4 x i8]*> [#uses=0] + at _ZSt4cout = external global %"struct.std::basic_ostream >" ; <%"struct.std::basic_ostream >"*> [#uses=3] + at .str1825 = internal constant [32 x i8] c"\0Afftbench (Std. C++) run time: \00" ; <[32 x i8]*> [#uses=1] + at .str1826 = internal constant [3 x i8] c"\0A\0A\00" ; <[3 x i8]*> [#uses=1] + at llvm.global_ctors = appending global [1 x %2] [%2 { i32 65535, void ()* @_GLOBAL__I_main }] ; <[1 x %2]*> [#uses=0] + + at _ZL20__gthrw_pthread_oncePiPFvvE = alias weak i32 (i32*, void ()*)* @pthread_once ; [#uses=0] + at _ZL27__gthrw_pthread_getspecificj = alias weak i8* (i32)* @pthread_getspecific ; [#uses=0] + at _ZL27__gthrw_pthread_setspecificjPKv = alias weak i32 (i32, i8*)* @pthread_setspecific ; [#uses=0] + at _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_ = alias weak i32 (i32*, %struct.pthread_attr_t*, i8* (i8*)*, i8*)* @pthread_create ; [#uses=0] + at _ZL22__gthrw_pthread_cancelm = alias weak i32 (i32)* @pthread_cancel ; [#uses=0] + at _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_lock ; [#uses=0] + at _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_trylock ; [#uses=0] + at _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t = alias weak i32 (%struct.pthread_mutex_t*)* @pthread_mutex_unlock ; [#uses=0] + at _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t = alias weak i32 (%struct.pthread_mutex_t*, %struct..0._50*)* @pthread_mutex_init ; [#uses=0] + at _ZL26__gthrw_pthread_key_createPjPFvPvE = alias weak i32 (i32*, void (i8*)*)* @pthread_key_create ; [#uses=0] + at _ZL26__gthrw_pthread_key_deletej = alias weak i32 (i32)* @pthread_key_delete ; [#uses=0] + at _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t = alias weak i32 (%struct..0._50*)* @pthread_mutexattr_init ; [#uses=0] + at _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti = alias weak i32 (%struct..0._50*, i32)* @pthread_mutexattr_settype ; [#uses=0] + at _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t = alias weak i32 (%struct..0._50*)* @pthread_mutexattr_destroy ; [#uses=0] + +define i32 @main(i32 %argc, i8** nocapture %argv) { +entry: + %n.0.reg2mem = alloca i32 ; [#uses=5] + %poly3 = alloca %"struct.polynomial", align 8 ; <%"struct.polynomial"*> [#uses=5] + %poly2 = alloca %"struct.polynomial", align 8 ; <%"struct.polynomial"*> [#uses=6] + %poly1 = alloca %"struct.polynomial", align 8 ; <%"struct.polynomial"*> [#uses=6] + %0 = alloca %"struct.polynomial", align 8 ; <%"struct.polynomial"*> [#uses=4] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1806 to %0*)) + %1 = bitcast %"struct.polynomial"* %poly3 to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %1, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1817 to %0*)) + %2 = bitcast %"struct.polynomial"* %poly2 to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %2, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1819 to %0*)) + %3 = bitcast %"struct.polynomial"* %poly1 to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %3, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1821 to %0*)) + call void @llvm.dbg.stoppoint(i32 659, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %4 = icmp sgt i32 %argc, 1 ; [#uses=1] + br i1 %4, label %bb4, label %bb5 + +bb1: ; preds = %bb4 + call void @llvm.dbg.stoppoint(i32 663, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %5 = getelementptr i8** %argv, i32 1 ; [#uses=1] + %6 = load i8** %5, align 1 ; [#uses=1] + %tmp = bitcast i8* %6 to i32* ; [#uses=1] + %lhsv = load i32* %tmp, align 1 ; [#uses=1] + %7 = icmp eq i32 %lhsv, 6383405 ; [#uses=1] + br i1 %7, label %bb5, label %bb3 + +bb3: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 661, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %8 = add i32 %i.0, 1 ; [#uses=1] + br label %bb4 + +bb4: ; preds = %bb3, %entry + %i.0 = phi i32 [ %8, %bb3 ], [ 1, %entry ] ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 661, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %9 = icmp slt i32 %i.0, %argc ; [#uses=1] + br i1 %9, label %bb1, label %bb5 + +bb5: ; preds = %bb4, %bb1, %entry + %ga_testing.0 = phi i8 [ 0, %entry ], [ 0, %bb4 ], [ 1, %bb1 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 672, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdEC1Ej(%"struct.polynomial"* %poly1, i32 524288) + call void @llvm.dbg.stoppoint(i32 673, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdEC1Ej(%"struct.polynomial"* %poly2, i32 524288) + to label %invcont unwind label %lpad + +invcont: ; preds = %bb5 + call void @llvm.dbg.stoppoint(i32 674, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdEC1Ej(%"struct.polynomial"* %poly3, i32 1048575) + to label %bb8.thread unwind label %lpad47 + +bb8.thread: ; preds = %invcont + store i32 0, i32* %n.0.reg2mem + call void @llvm.dbg.stoppoint(i32 676, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb7 + +bb7: ; preds = %bb8, %bb8.thread + call void @llvm.dbg.stoppoint(i32 678, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %n.0.reload3 = load i32* %n.0.reg2mem ; [#uses=1] + %10 = call double* @_ZN10polynomialIdEixEj(%"struct.polynomial"* %poly1, i32 %n.0.reload3) nounwind ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 68, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %11 = load i32* @_ZZL13random_doublevE4seed, align 4 ; [#uses=1] + %12 = xor i32 %11, 123459876 ; [#uses=3] + store i32 %12, i32* @_ZZL13random_doublevE4seed, align 4 + call void @llvm.dbg.stoppoint(i32 69, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %13 = sdiv i32 %12, 127773 ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 70, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %14 = mul i32 %13, 127773 ; [#uses=1] + %15 = sub i32 %12, %14 ; [#uses=1] + %16 = mul i32 %15, 16807 ; [#uses=1] + %17 = mul i32 %13, 2836 ; [#uses=1] + %18 = sub i32 %16, %17 ; [#uses=2] + store i32 %18, i32* @_ZZL13random_doublevE4seed, align 4 + call void @llvm.dbg.stoppoint(i32 72, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %19 = icmp slt i32 %18, 0 ; [#uses=1] + br i1 %19, label %bb.i, label %_ZL13random_doublev.exit + +bb.i: ; preds = %bb7 + call void @llvm.dbg.stoppoint(i32 73, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %20 = load i32* @_ZZL13random_doublevE4seed, align 4 ; [#uses=1] + %21 = add i32 %20, 2147483647 ; [#uses=1] + store i32 %21, i32* @_ZZL13random_doublevE4seed, align 4 + br label %_ZL13random_doublev.exit + +_ZL13random_doublev.exit: ; preds = %bb.i, %bb7 + call void @llvm.dbg.stoppoint(i32 75, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %22 = load i32* @_ZZL13random_doublevE4seed, align 4 ; [#uses=2] + %23 = sitofp i32 %22 to double ; [#uses=1] + %24 = mul double %23, 0x3E340000002813D9 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 76, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %25 = xor i32 %22, 123459876 ; [#uses=1] + store i32 %25, i32* @_ZZL13random_doublevE4seed, align 4 + call void @llvm.dbg.stoppoint(i32 78, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + store double %24, double* %10, align 8 + call void @llvm.dbg.stoppoint(i32 679, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %n.0.reload4 = load i32* %n.0.reg2mem ; [#uses=1] + %26 = call double* @_ZN10polynomialIdEixEj(%"struct.polynomial"* %poly2, i32 %n.0.reload4) nounwind ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 68, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %27 = load i32* @_ZZL13random_doublevE4seed, align 4 ; [#uses=1] + %28 = xor i32 %27, 123459876 ; [#uses=3] + store i32 %28, i32* @_ZZL13random_doublevE4seed, align 4 + call void @llvm.dbg.stoppoint(i32 69, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %29 = sdiv i32 %28, 127773 ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 70, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %30 = mul i32 %29, 127773 ; [#uses=1] + %31 = sub i32 %28, %30 ; [#uses=1] + %32 = mul i32 %31, 16807 ; [#uses=1] + %33 = mul i32 %29, 2836 ; [#uses=1] + %34 = sub i32 %32, %33 ; [#uses=2] + store i32 %34, i32* @_ZZL13random_doublevE4seed, align 4 + call void @llvm.dbg.stoppoint(i32 72, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %35 = icmp slt i32 %34, 0 ; [#uses=1] + br i1 %35, label %bb.i1, label %bb8 + +bb.i1: ; preds = %_ZL13random_doublev.exit + call void @llvm.dbg.stoppoint(i32 73, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %36 = load i32* @_ZZL13random_doublevE4seed, align 4 ; [#uses=1] + %37 = add i32 %36, 2147483647 ; [#uses=1] + store i32 %37, i32* @_ZZL13random_doublevE4seed, align 4 + br label %bb8 + +bb8: ; preds = %bb.i1, %_ZL13random_doublev.exit + call void @llvm.dbg.stoppoint(i32 75, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %38 = load i32* @_ZZL13random_doublevE4seed, align 4 ; [#uses=2] + %39 = sitofp i32 %38 to double ; [#uses=1] + %40 = mul double %39, 0x3E340000002813D9 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 76, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %41 = xor i32 %38, 123459876 ; [#uses=1] + store i32 %41, i32* @_ZZL13random_doublevE4seed, align 4 + call void @llvm.dbg.stoppoint(i32 78, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + store double %40, double* %26, align 8 + call void @llvm.dbg.stoppoint(i32 676, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %n.0.reload5 = load i32* %n.0.reg2mem ; [#uses=1] + %42 = add i32 %n.0.reload5, 1 ; [#uses=2] + store i32 %42, i32* %n.0.reg2mem + call void @llvm.dbg.stoppoint(i32 676, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %43 = icmp sgt i32 %42, 524287 ; [#uses=1] + br i1 %43, label %bb9, label %bb7 + +bb9: ; preds = %bb8 + call void @llvm.dbg.stoppoint(i32 687, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZNK10polynomialIdEmlERKS0_(%"struct.polynomial"* noalias sret %0, %"struct.polynomial"* %poly1, %"struct.polynomial"* %poly2) + to label %invcont10 unwind label %lpad51 + +invcont10: ; preds = %bb9 + call void @llvm.dbg.stoppoint(i32 687, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %44 = invoke %"struct.polynomial"* @_ZN10polynomialIdEaSERKS0_(%"struct.polynomial"* %poly3, %"struct.polynomial"* %0) + to label %invcont11 unwind label %lpad55 ; <%"struct.polynomial"*> [#uses=0] + +invcont11: ; preds = %invcont10 + call void @llvm.dbg.stoppoint(i32 687, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %0) + to label %bb16 unwind label %lpad51 + +bb16: ; preds = %invcont11 + call void @llvm.dbg.stoppoint(i32 695, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %toBool = icmp eq i8 %ga_testing.0, 0 ; [#uses=1] + br i1 %toBool, label %bb19, label %bb17 + +bb17: ; preds = %bb16 + call void @llvm.dbg.stoppoint(i32 696, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %45 = invoke %"struct.std::basic_ostream >"* @_ZNSolsEd(%"struct.std::basic_ostream >"* @_ZSt4cout, double 0.000000e+00) + to label %bb23 unwind label %lpad51 ; <%"struct.std::basic_ostream >"*> [#uses=0] + +bb19: ; preds = %bb16 + call void @llvm.dbg.stoppoint(i32 698, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %46 = invoke %"struct.std::basic_ostream >"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"struct.std::basic_ostream >"* @_ZSt4cout, i8* getelementptr ([32 x i8]* @.str1825, i32 0, i32 0)) + to label %invcont20 unwind label %lpad51 ; <%"struct.std::basic_ostream >"*> [#uses=1] + +invcont20: ; preds = %bb19 + call void @llvm.dbg.stoppoint(i32 698, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %47 = invoke %"struct.std::basic_ostream >"* @_ZNSolsEd(%"struct.std::basic_ostream >"* %46, double 0.000000e+00) + to label %invcont21 unwind label %lpad51 ; <%"struct.std::basic_ostream >"*> [#uses=1] + +invcont21: ; preds = %invcont20 + call void @llvm.dbg.stoppoint(i32 698, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %48 = invoke %"struct.std::basic_ostream >"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"struct.std::basic_ostream >"* %47, i8* getelementptr ([3 x i8]* @.str1826, i32 0, i32 0)) + to label %bb23 unwind label %lpad51 ; <%"struct.std::basic_ostream >"*> [#uses=0] + +bb23: ; preds = %invcont21, %bb17 + call void @llvm.dbg.stoppoint(i32 700, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %49 = invoke %"struct.std::basic_ostream >"* @_ZNSo5flushEv(%"struct.std::basic_ostream >"* @_ZSt4cout) + to label %invcont24 unwind label %lpad51 ; <%"struct.std::basic_ostream >"*> [#uses=0] + +invcont24: ; preds = %bb23 + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %poly3) + to label %bb31 unwind label %lpad47 + +bb31: ; preds = %invcont24 + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %poly2) + to label %bb38 unwind label %lpad + +bb38: ; preds = %bb31 + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %poly1) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1806 to %0*)) + ret i32 0 + +lpad: ; preds = %bb31, %bb5 + %eh_ptr = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select46 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + br label %ppad + +lpad47: ; preds = %invcont24, %invcont + %eh_ptr48 = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select50 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr48, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + br label %ppad75 + +lpad51: ; preds = %bb23, %invcont21, %invcont20, %bb19, %bb17, %invcont11, %bb9 + %eh_ptr52 = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select54 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr52, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + br label %ppad76 + +lpad55: ; preds = %invcont10 + %eh_ptr56 = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select58 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr56, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 687, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %0) + to label %ppad76 unwind label %lpad59 + +lpad59: ; preds = %lpad55 + %eh_ptr60 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select62 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr60, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 687, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +lpad63: ; preds = %ppad76 + %eh_ptr64 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select66 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr64, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +lpad67: ; preds = %ppad75 + %eh_ptr68 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select70 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr68, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +lpad71: ; preds = %ppad + %eh_ptr72 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select74 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr72, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +ppad: ; preds = %ppad75, %lpad + %eh_exception.2 = phi i8* [ %eh_ptr, %lpad ], [ %eh_exception.1, %ppad75 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %poly1) + to label %Unwind unwind label %lpad71 + +ppad75: ; preds = %ppad76, %lpad47 + %eh_exception.1 = phi i8* [ %eh_ptr48, %lpad47 ], [ %eh_exception.0, %ppad76 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %poly2) + to label %ppad unwind label %lpad67 + +ppad76: ; preds = %lpad55, %lpad51 + %eh_exception.0 = phi i8* [ %eh_ptr52, %lpad51 ], [ %eh_ptr56, %lpad55 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 702, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %poly3) + to label %ppad75 unwind label %lpad63 + +Unwind: ; preds = %ppad + call void @_Unwind_Resume(i8* %eh_exception.2) + unreachable +} + +define internal void @_GLOBAL__I_main() { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram657 to %0*)) + call void @llvm.dbg.stoppoint(i32 77, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit636 to %0*)) + call void @_ZNSt8ios_base4InitC1Ev(%"struct.std::allocator"* @_ZStL8__ioinit) + %0 = call i32 @__cxa_atexit(void (i8*)* @__tcf_0, i8* null, i8* bitcast (i8** @__dso_handle to i8*)) nounwind ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 400, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %1 = load i8* bitcast (i64* @_ZGVN10polynomialIdE4PI2IE to i8*), align 8 ; [#uses=1] + %2 = icmp eq i8 %1, 0 ; [#uses=1] + br i1 %2, label %bb2.i, label %_Z41__static_initialization_and_destruction_0ii.exit + +bb2.i: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 400, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + store i8 1, i8* bitcast (i64* @_ZGVN10polynomialIdE4PI2IE to i8*), align 8 + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* @_ZN10polynomialIdE4PI2IE, double 0.000000e+00, double 0x401921FB54442D18) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram657 to %0*)) + ret void + +_Z41__static_initialization_and_destruction_0ii.exit: ; preds = %entry + ret void +} + +define linkonce void @_ZNSt7complexIdEC1ECd(%"struct.std::complex"* %this, %1 %__z) nounwind { +entry: + %__z_addr = alloca %1, align 8 ; <%1*> [#uses=4] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram227 to %0*)) + %0 = bitcast %1* %__z_addr to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %0, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable231 to %0*)) + store %1 %__z, %1* %__z_addr, align 8 + call void @llvm.dbg.stoppoint(i32 1161, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %1 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %2 = getelementptr %1* %__z_addr, i32 0, i32 0 ; [#uses=1] + %3 = load double* %2, align 8 ; [#uses=1] + store double %3, double* %1, align 4 + %4 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %5 = getelementptr %1* %__z_addr, i32 0, i32 1 ; [#uses=1] + %6 = load double* %5, align 8 ; [#uses=1] + store double %6, double* %4, align 4 + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram227 to %0*)) + ret void +} + +declare void @llvm.dbg.func.start(%0*) nounwind readnone + +declare void @llvm.dbg.declare(%0*, %0*) nounwind readnone + +declare void @llvm.dbg.stoppoint(i32, i32, %0*) nounwind readnone + +declare void @llvm.dbg.region.end(%0*) nounwind readnone + +define linkonce %1* @_ZNKSt7complexIdE5__repEv(%"struct.std::complex"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram232 to %0*)) + call void @llvm.dbg.stoppoint(i32 1192, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0 ; <%1*> [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram232 to %0*)) + ret %1* %0 +} + +define linkonce double* @_ZNSt7complexIdE4realEv(%"struct.std::complex"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram235 to %0*)) + call void @llvm.dbg.stoppoint(i32 1200, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram235 to %0*)) + ret double* %0 +} + +define linkonce double* @_ZNKSt7complexIdE4realEv(%"struct.std::complex"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram237 to %0*)) + call void @llvm.dbg.stoppoint(i32 1204, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram237 to %0*)) + ret double* %0 +} + +define linkonce double* @_ZNKSt7complexIdE4imagEv(%"struct.std::complex"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram239 to %0*)) + call void @llvm.dbg.stoppoint(i32 1212, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram239 to %0*)) + ret double* %0 +} + +define linkonce void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %this, double %__r, double %__i) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram242 to %0*)) + call void @llvm.dbg.stoppoint(i32 1217, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + store double %__r, double* %0, align 4 + call void @llvm.dbg.stoppoint(i32 1218, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %1 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + store double %__i, double* %1, align 4 + call void @llvm.dbg.stoppoint(i32 1219, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram242 to %0*)) + ret void +} + +define linkonce %"struct.std::complex"* @_ZNSt7complexIdEaSEd(%"struct.std::complex"* %this, double %__d) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram248 to %0*)) + call void @llvm.dbg.stoppoint(i32 1224, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + store double %__d, double* %0, align 4 + call void @llvm.dbg.stoppoint(i32 1225, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %1 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + store double 0.000000e+00, double* %1, align 4 + call void @llvm.dbg.stoppoint(i32 1226, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram248 to %0*)) + ret %"struct.std::complex"* %this +} + +define linkonce %"struct.std::complex"* @_ZNSt7complexIdEdVEd(%"struct.std::complex"* %this, double %__d) nounwind { +entry: + %0 = alloca %1, align 8 ; <%1*> [#uses=4] + %1 = alloca %1, align 8 ; <%1*> [#uses=4] + %2 = alloca %1, align 8 ; <%1*> [#uses=4] + %memtmp = alloca %1, align 8 ; <%1*> [#uses=4] + %memtmp1 = alloca %1, align 8 ; <%1*> [#uses=4] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram252 to %0*)) + call void @llvm.dbg.stoppoint(i32 1253, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %3 = getelementptr %1* %2, i32 0, i32 0 ; [#uses=1] + %4 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %5 = load double* %4, align 4 ; [#uses=1] + store double %5, double* %3, align 8 + %6 = getelementptr %1* %2, i32 0, i32 1 ; [#uses=1] + %7 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %8 = load double* %7, align 4 ; [#uses=1] + store double %8, double* %6, align 8 + %real = getelementptr %1* %1, i32 0, i32 0 ; [#uses=1] + store double %__d, double* %real, align 8 + %imag = getelementptr %1* %1, i32 0, i32 1 ; [#uses=1] + store double 0.000000e+00, double* %imag, align 8 + %9 = getelementptr %1* %memtmp, i32 0, i32 0 ; [#uses=1] + %10 = getelementptr %1* %2, i32 0, i32 0 ; [#uses=1] + %11 = load double* %10, align 8 ; [#uses=1] + store double %11, double* %9, align 8 + %12 = getelementptr %1* %memtmp, i32 0, i32 1 ; [#uses=1] + %13 = getelementptr %1* %2, i32 0, i32 1 ; [#uses=1] + %14 = load double* %13, align 8 ; [#uses=1] + store double %14, double* %12, align 8 + %15 = getelementptr %1* %memtmp1, i32 0, i32 0 ; [#uses=1] + %16 = getelementptr %1* %1, i32 0, i32 0 ; [#uses=1] + %17 = load double* %16, align 8 ; [#uses=1] + store double %17, double* %15, align 8 + %18 = getelementptr %1* %memtmp1, i32 0, i32 1 ; [#uses=1] + %19 = getelementptr %1* %1, i32 0, i32 1 ; [#uses=1] + %20 = load double* %19, align 8 ; [#uses=1] + store double %20, double* %18, align 8 + %real2 = getelementptr %1* %memtmp, i32 0, i32 0 ; [#uses=1] + %real3 = load double* %real2, align 8 ; [#uses=2] + %imag4 = getelementptr %1* %memtmp, i32 0, i32 1 ; [#uses=1] + %imag5 = load double* %imag4, align 8 ; [#uses=2] + %real6 = getelementptr %1* %memtmp1, i32 0, i32 0 ; [#uses=1] + %real7 = load double* %real6, align 8 ; [#uses=4] + %imag8 = getelementptr %1* %memtmp1, i32 0, i32 1 ; [#uses=1] + %imag9 = load double* %imag8, align 8 ; [#uses=4] + %21 = mul double %real3, %real7 ; [#uses=1] + %22 = mul double %imag5, %imag9 ; [#uses=1] + %23 = add double %21, %22 ; [#uses=1] + %24 = mul double %real7, %real7 ; [#uses=1] + %25 = mul double %imag9, %imag9 ; [#uses=1] + %26 = add double %24, %25 ; [#uses=2] + %27 = fdiv double %23, %26 ; [#uses=1] + %28 = mul double %imag5, %real7 ; [#uses=1] + %29 = mul double %real3, %imag9 ; [#uses=1] + %30 = sub double %28, %29 ; [#uses=1] + %31 = fdiv double %30, %26 ; [#uses=1] + %real10 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + store double %27, double* %real10, align 8 + %imag11 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + store double %31, double* %imag11, align 8 + %32 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %33 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + %34 = load double* %33, align 8 ; [#uses=1] + store double %34, double* %32, align 4 + %35 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %36 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + %37 = load double* %36, align 8 ; [#uses=1] + store double %37, double* %35, align 4 + call void @llvm.dbg.stoppoint(i32 1254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram252 to %0*)) + ret %"struct.std::complex"* %this +} + +define linkonce double* @_ZN10polynomialIdEixEj(%"struct.polynomial"* %this, i32 %term) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram522 to %0*)) + call void @llvm.dbg.stoppoint(i32 308, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + %1 = load double** %0, align 4 ; [#uses=1] + %2 = getelementptr double* %1, i32 %term ; [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram522 to %0*)) + ret double* %2 +} + +define linkonce i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram527 to %0*)) + call void @llvm.dbg.stoppoint(i32 113, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + %1 = load i32* %0, align 4 ; [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram527 to %0*)) + ret i32 %1 +} + +define linkonce %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %this, i32 %term) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram530 to %0*)) + call void @llvm.dbg.stoppoint(i32 308, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 1 ; <%"struct.std::complex"**> [#uses=1] + %1 = load %"struct.std::complex"** %0, align 4 ; <%"struct.std::complex"*> [#uses=1] + %2 = getelementptr %"struct.std::complex"* %1, i32 %term ; <%"struct.std::complex"*> [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram530 to %0*)) + ret %"struct.std::complex"* %2 +} + +define linkonce %"struct.std::complex"* @_ZNSt7complexIdEmLIdEERS0_RKS_IT_E(%"struct.std::complex"* %this, %"struct.std::complex"* %__z) nounwind { +entry: + %__t = alloca %1, align 8 ; <%1*> [#uses=7] + %0 = alloca %1, align 8 ; <%1*> [#uses=4] + %1 = alloca %1, align 8 ; <%1*> [#uses=4] + %memtmp = alloca %1, align 8 ; <%1*> [#uses=4] + %memtmp3 = alloca %1, align 8 ; <%1*> [#uses=4] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram538 to %0*)) + %2 = bitcast %1* %__t to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %2, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable542 to %0*)) + call void @llvm.dbg.stoppoint(i32 1289, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %3 = call double* @_ZNKSt7complexIdE4realEv(%"struct.std::complex"* %__z) nounwind ; [#uses=1] + %4 = load double* %3, align 8 ; [#uses=1] + %5 = getelementptr %1* %__t, i32 0, i32 1 ; [#uses=1] + %6 = load double* %5, align 8 ; [#uses=1] + %real = getelementptr %1* %__t, i32 0, i32 0 ; [#uses=1] + store double %4, double* %real, align 8 + %imag = getelementptr %1* %__t, i32 0, i32 1 ; [#uses=1] + store double %6, double* %imag, align 8 + call void @llvm.dbg.stoppoint(i32 1290, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %7 = call double* @_ZNKSt7complexIdE4imagEv(%"struct.std::complex"* %__z) nounwind ; [#uses=1] + %8 = load double* %7, align 8 ; [#uses=1] + %imag2 = getelementptr %1* %__t, i32 0, i32 1 ; [#uses=1] + store double %8, double* %imag2, align 8 + call void @llvm.dbg.stoppoint(i32 1291, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %9 = getelementptr %1* %1, i32 0, i32 0 ; [#uses=1] + %10 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %11 = load double* %10, align 4 ; [#uses=1] + store double %11, double* %9, align 8 + %12 = getelementptr %1* %1, i32 0, i32 1 ; [#uses=1] + %13 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %14 = load double* %13, align 4 ; [#uses=1] + store double %14, double* %12, align 8 + %15 = getelementptr %1* %memtmp, i32 0, i32 0 ; [#uses=1] + %16 = getelementptr %1* %1, i32 0, i32 0 ; [#uses=1] + %17 = load double* %16, align 8 ; [#uses=1] + store double %17, double* %15, align 8 + %18 = getelementptr %1* %memtmp, i32 0, i32 1 ; [#uses=1] + %19 = getelementptr %1* %1, i32 0, i32 1 ; [#uses=1] + %20 = load double* %19, align 8 ; [#uses=1] + store double %20, double* %18, align 8 + %21 = getelementptr %1* %memtmp3, i32 0, i32 0 ; [#uses=1] + %22 = getelementptr %1* %__t, i32 0, i32 0 ; [#uses=1] + %23 = load double* %22, align 8 ; [#uses=1] + store double %23, double* %21, align 8 + %24 = getelementptr %1* %memtmp3, i32 0, i32 1 ; [#uses=1] + %25 = getelementptr %1* %__t, i32 0, i32 1 ; [#uses=1] + %26 = load double* %25, align 8 ; [#uses=1] + store double %26, double* %24, align 8 + %real4 = getelementptr %1* %memtmp, i32 0, i32 0 ; [#uses=1] + %real5 = load double* %real4, align 8 ; [#uses=2] + %imag6 = getelementptr %1* %memtmp, i32 0, i32 1 ; [#uses=1] + %imag7 = load double* %imag6, align 8 ; [#uses=2] + %real8 = getelementptr %1* %memtmp3, i32 0, i32 0 ; [#uses=1] + %real9 = load double* %real8, align 8 ; [#uses=2] + %imag10 = getelementptr %1* %memtmp3, i32 0, i32 1 ; [#uses=1] + %imag11 = load double* %imag10, align 8 ; [#uses=2] + %27 = mul double %real5, %real9 ; [#uses=1] + %28 = mul double %imag7, %imag11 ; [#uses=1] + %29 = sub double %27, %28 ; [#uses=1] + %30 = mul double %real5, %imag11 ; [#uses=1] + %31 = mul double %real9, %imag7 ; [#uses=1] + %32 = add double %30, %31 ; [#uses=1] + %real12 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + store double %29, double* %real12, align 8 + %imag13 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + store double %32, double* %imag13, align 8 + %33 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %34 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + %35 = load double* %34, align 8 ; [#uses=1] + store double %35, double* %33, align 4 + %36 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %37 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + %38 = load double* %37, align 8 ; [#uses=1] + store double %38, double* %36, align 4 + call void @llvm.dbg.stoppoint(i32 1292, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram538 to %0*)) + ret %"struct.std::complex"* %this +} + +define linkonce void @_ZN10polynomialIdE9deep_copyEPKd(%"struct.polynomial"* %this, double* %source) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram543 to %0*)) + call void @llvm.dbg.stoppoint(i32 197, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb1 + +bb: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 198, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + %1 = load double** %0, align 4 ; [#uses=1] + %2 = getelementptr double* %source, i32 %n.0 ; [#uses=1] + %3 = load double* %2, align 1 ; [#uses=1] + %4 = getelementptr double* %1, i32 %n.0 ; [#uses=1] + store double %3, double* %4, align 1 + call void @llvm.dbg.stoppoint(i32 197, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %5 = add i32 %n.0, 1 ; [#uses=1] + br label %bb1 + +bb1: ; preds = %bb, %entry + %n.0 = phi i32 [ 0, %entry ], [ %5, %bb ] ; [#uses=4] + call void @llvm.dbg.stoppoint(i32 197, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %6 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + %7 = load i32* %6, align 4 ; [#uses=1] + %8 = icmp ugt i32 %7, %n.0 ; [#uses=1] + br i1 %8, label %bb, label %return + +return: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 198, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram543 to %0*)) + ret void +} + +define linkonce i32 @_ZN10polynomialIdE4log2Ej(i32 %n) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram549 to %0*)) + call void @llvm.dbg.stoppoint(i32 407, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb1 + +bb: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 411, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = add i32 %c.0, 1 ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 412, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %1 = shl i32 %x.0, 1 ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 414, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %2 = icmp eq i32 %1, 0 ; [#uses=1] + br i1 %2, label %return, label %bb1 + +bb1: ; preds = %bb, %entry + %c.0 = phi i32 [ 0, %entry ], [ %0, %bb ] ; [#uses=2] + %x.0 = phi i32 [ 1, %entry ], [ %1, %bb ] ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 409, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %3 = icmp ult i32 %x.0, %n ; [#uses=1] + br i1 %3, label %bb, label %return + +return: ; preds = %bb1, %bb + %c.1 = phi i32 [ %c.0, %bb1 ], [ %0, %bb ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 418, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram549 to %0*)) + ret i32 %c.1 +} + +define linkonce void @_ZStmlIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %agg.result, %"struct.std::complex"* %__x, %"struct.std::complex"* %__y) nounwind { +entry: + %__r = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=1] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram559 to %0*)) + %0 = bitcast %"struct.std::complex"* %__r to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %0, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable564 to %0*)) + call void @llvm.dbg.stoppoint(i32 380, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %1 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 0 ; [#uses=1] + %2 = getelementptr %"struct.std::complex"* %__x, i32 0, i32 0, i32 0 ; [#uses=1] + %3 = load double* %2, align 4 ; [#uses=1] + store double %3, double* %1, align 4 + %4 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 1 ; [#uses=1] + %5 = getelementptr %"struct.std::complex"* %__x, i32 0, i32 0, i32 1 ; [#uses=1] + %6 = load double* %5, align 4 ; [#uses=1] + store double %6, double* %4, align 4 + call void @llvm.dbg.stoppoint(i32 381, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %7 = call %"struct.std::complex"* @_ZNSt7complexIdEmLIdEERS0_RKS_IT_E(%"struct.std::complex"* %agg.result, %"struct.std::complex"* %__y) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram559 to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialISt7complexIdEE9deep_copyEPKS1_(%"struct.polynomial >"* %this, %"struct.std::complex"* %source) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram565 to %0*)) + call void @llvm.dbg.stoppoint(i32 197, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb1 + +bb: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 198, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 1 ; <%"struct.std::complex"**> [#uses=1] + %1 = load %"struct.std::complex"** %0, align 4 ; <%"struct.std::complex"*> [#uses=2] + %2 = getelementptr %"struct.std::complex"* %1, i32 %n.0, i32 0, i32 0 ; [#uses=1] + %3 = getelementptr %"struct.std::complex"* %source, i32 %n.0, i32 0, i32 0 ; [#uses=1] + %4 = load double* %3, align 1 ; [#uses=1] + store double %4, double* %2, align 1 + %5 = getelementptr %"struct.std::complex"* %1, i32 %n.0, i32 0, i32 1 ; [#uses=1] + %6 = getelementptr %"struct.std::complex"* %source, i32 %n.0, i32 0, i32 1 ; [#uses=1] + %7 = load double* %6, align 1 ; [#uses=1] + store double %7, double* %5, align 1 + call void @llvm.dbg.stoppoint(i32 197, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %8 = add i32 %n.0, 1 ; [#uses=1] + br label %bb1 + +bb1: ; preds = %bb, %entry + %n.0 = phi i32 [ 0, %entry ], [ %8, %bb ] ; [#uses=6] + call void @llvm.dbg.stoppoint(i32 197, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %9 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 2 ; [#uses=1] + %10 = load i32* %9, align 4 ; [#uses=1] + %11 = icmp ugt i32 %10, %n.0 ; [#uses=1] + br i1 %11, label %bb, label %return + +return: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 198, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram565 to %0*)) + ret void +} + +define linkonce i32 @_ZNK10polynomialISt7complexIdEE6degreeEv(%"struct.polynomial >"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram569 to %0*)) + call void @llvm.dbg.stoppoint(i32 113, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 2 ; [#uses=1] + %1 = load i32* %0, align 4 ; [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram569 to %0*)) + ret i32 %1 +} + +define linkonce void @_ZStngIdESt7complexIT_ERKS2_(%"struct.std::complex"* noalias sret %agg.result, %"struct.std::complex"* %__x) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram576 to %0*)) + call void @llvm.dbg.stoppoint(i32 444, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = call double* @_ZNKSt7complexIdE4imagEv(%"struct.std::complex"* %__x) nounwind ; [#uses=1] + %1 = load double* %0, align 8 ; [#uses=1] + %2 = sub double -0.000000e+00, %1 ; [#uses=1] + %3 = call double* @_ZNKSt7complexIdE4realEv(%"struct.std::complex"* %__x) nounwind ; [#uses=1] + %4 = load double* %3, align 8 ; [#uses=1] + %5 = sub double -0.000000e+00, %4 ; [#uses=1] + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %agg.result, double %5, double %2) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram576 to %0*)) + ret void +} + +define linkonce double @_ZNK10polynomialIdE3getEj(%"struct.polynomial"* %this, i32 %term) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram578 to %0*)) + call void @llvm.dbg.stoppoint(i32 302, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + %1 = load double** %0, align 4 ; [#uses=1] + %2 = getelementptr double* %1, i32 %term ; [#uses=1] + %3 = load double* %2, align 1 ; [#uses=1] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram578 to %0*)) + ret double %3 +} + +define linkonce i32 @_ZN10polynomialIdE9flip_bitsEjj(i32 %k, i32 %bits) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram581 to %0*)) + call void @llvm.dbg.stoppoint(i32 425, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = add i32 %bits, -1 ; [#uses=1] + %1 = shl i32 1, %0 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 427, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb3 + +bb: ; preds = %bb3 + call void @llvm.dbg.stoppoint(i32 431, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %2 = and i32 %rm.0, %k ; [#uses=1] + %3 = icmp ne i32 %2, 0 ; [#uses=1] + %4 = select i1 %3, i32 %lm.0, i32 0 ; [#uses=1] + %.r.1 = or i32 %r.1, %4 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 434, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %5 = lshr i32 %lm.0, 1 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 435, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %6 = shl i32 %rm.0, 1 ; [#uses=1] + br label %bb3 + +bb3: ; preds = %bb, %entry + %r.1 = phi i32 [ 0, %entry ], [ %.r.1, %bb ] ; [#uses=2] + %rm.0 = phi i32 [ 1, %entry ], [ %6, %bb ] ; [#uses=2] + %lm.0 = phi i32 [ %1, %entry ], [ %5, %bb ] ; [#uses=3] + call void @llvm.dbg.stoppoint(i32 429, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %7 = icmp eq i32 %lm.0, 0 ; [#uses=1] + br i1 %7, label %return, label %bb + +return: ; preds = %bb3 + call void @llvm.dbg.stoppoint(i32 438, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram581 to %0*)) + ret i32 %r.1 +} + +define linkonce %"struct.std::complex"* @_ZNSt7complexIdEdVIdEERS0_RKS_IT_E(%"struct.std::complex"* %this, %"struct.std::complex"* %__z) nounwind { +entry: + %__t = alloca %1, align 8 ; <%1*> [#uses=7] + %0 = alloca %1, align 8 ; <%1*> [#uses=4] + %1 = alloca %1, align 8 ; <%1*> [#uses=4] + %memtmp = alloca %1, align 8 ; <%1*> [#uses=4] + %memtmp3 = alloca %1, align 8 ; <%1*> [#uses=4] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram593 to %0*)) + %2 = bitcast %1* %__t to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %2, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable596 to %0*)) + call void @llvm.dbg.stoppoint(i32 1300, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %3 = call double* @_ZNKSt7complexIdE4realEv(%"struct.std::complex"* %__z) nounwind ; [#uses=1] + %4 = load double* %3, align 8 ; [#uses=1] + %5 = getelementptr %1* %__t, i32 0, i32 1 ; [#uses=1] + %6 = load double* %5, align 8 ; [#uses=1] + %real = getelementptr %1* %__t, i32 0, i32 0 ; [#uses=1] + store double %4, double* %real, align 8 + %imag = getelementptr %1* %__t, i32 0, i32 1 ; [#uses=1] + store double %6, double* %imag, align 8 + call void @llvm.dbg.stoppoint(i32 1301, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %7 = call double* @_ZNKSt7complexIdE4imagEv(%"struct.std::complex"* %__z) nounwind ; [#uses=1] + %8 = load double* %7, align 8 ; [#uses=1] + %imag2 = getelementptr %1* %__t, i32 0, i32 1 ; [#uses=1] + store double %8, double* %imag2, align 8 + call void @llvm.dbg.stoppoint(i32 1302, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %9 = getelementptr %1* %1, i32 0, i32 0 ; [#uses=1] + %10 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %11 = load double* %10, align 4 ; [#uses=1] + store double %11, double* %9, align 8 + %12 = getelementptr %1* %1, i32 0, i32 1 ; [#uses=1] + %13 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %14 = load double* %13, align 4 ; [#uses=1] + store double %14, double* %12, align 8 + %15 = getelementptr %1* %memtmp, i32 0, i32 0 ; [#uses=1] + %16 = getelementptr %1* %1, i32 0, i32 0 ; [#uses=1] + %17 = load double* %16, align 8 ; [#uses=1] + store double %17, double* %15, align 8 + %18 = getelementptr %1* %memtmp, i32 0, i32 1 ; [#uses=1] + %19 = getelementptr %1* %1, i32 0, i32 1 ; [#uses=1] + %20 = load double* %19, align 8 ; [#uses=1] + store double %20, double* %18, align 8 + %21 = getelementptr %1* %memtmp3, i32 0, i32 0 ; [#uses=1] + %22 = getelementptr %1* %__t, i32 0, i32 0 ; [#uses=1] + %23 = load double* %22, align 8 ; [#uses=1] + store double %23, double* %21, align 8 + %24 = getelementptr %1* %memtmp3, i32 0, i32 1 ; [#uses=1] + %25 = getelementptr %1* %__t, i32 0, i32 1 ; [#uses=1] + %26 = load double* %25, align 8 ; [#uses=1] + store double %26, double* %24, align 8 + %real4 = getelementptr %1* %memtmp, i32 0, i32 0 ; [#uses=1] + %real5 = load double* %real4, align 8 ; [#uses=2] + %imag6 = getelementptr %1* %memtmp, i32 0, i32 1 ; [#uses=1] + %imag7 = load double* %imag6, align 8 ; [#uses=2] + %real8 = getelementptr %1* %memtmp3, i32 0, i32 0 ; [#uses=1] + %real9 = load double* %real8, align 8 ; [#uses=4] + %imag10 = getelementptr %1* %memtmp3, i32 0, i32 1 ; [#uses=1] + %imag11 = load double* %imag10, align 8 ; [#uses=4] + %27 = mul double %real5, %real9 ; [#uses=1] + %28 = mul double %imag7, %imag11 ; [#uses=1] + %29 = add double %27, %28 ; [#uses=1] + %30 = mul double %real9, %real9 ; [#uses=1] + %31 = mul double %imag11, %imag11 ; [#uses=1] + %32 = add double %30, %31 ; [#uses=2] + %33 = fdiv double %29, %32 ; [#uses=1] + %34 = mul double %imag7, %real9 ; [#uses=1] + %35 = mul double %real5, %imag11 ; [#uses=1] + %36 = sub double %34, %35 ; [#uses=1] + %37 = fdiv double %36, %32 ; [#uses=1] + %real12 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + store double %33, double* %real12, align 8 + %imag13 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + store double %37, double* %imag13, align 8 + %38 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %39 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + %40 = load double* %39, align 8 ; [#uses=1] + store double %40, double* %38, align 4 + %41 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %42 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + %43 = load double* %42, align 8 ; [#uses=1] + store double %43, double* %41, align 4 + call void @llvm.dbg.stoppoint(i32 1303, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram593 to %0*)) + ret %"struct.std::complex"* %this +} + +define linkonce void @_ZStdvIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %agg.result, %"struct.std::complex"* %__x, %"struct.std::complex"* %__y) { +entry: + %__r = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=1] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram599 to %0*)) + %0 = bitcast %"struct.std::complex"* %__r to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %0, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable602 to %0*)) + call void @llvm.dbg.stoppoint(i32 410, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %1 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 0 ; [#uses=1] + %2 = getelementptr %"struct.std::complex"* %__x, i32 0, i32 0, i32 0 ; [#uses=1] + %3 = load double* %2, align 4 ; [#uses=1] + store double %3, double* %1, align 4 + %4 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 1 ; [#uses=1] + %5 = getelementptr %"struct.std::complex"* %__x, i32 0, i32 0, i32 1 ; [#uses=1] + %6 = load double* %5, align 4 ; [#uses=1] + store double %6, double* %4, align 4 + call void @llvm.dbg.stoppoint(i32 411, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %7 = call %"struct.std::complex"* @_ZNSt7complexIdEdVIdEERS0_RKS_IT_E(%"struct.std::complex"* %agg.result, %"struct.std::complex"* %__y) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram599 to %0*)) + ret void +} + +define linkonce %"struct.std::complex"* @_ZNSt7complexIdEpLIdEERS0_RKS_IT_E(%"struct.std::complex"* %this, %"struct.std::complex"* %__z) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram605 to %0*)) + call void @llvm.dbg.stoppoint(i32 1270, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %1 = load double* %0, align 4 ; [#uses=1] + %2 = call double* @_ZNKSt7complexIdE4realEv(%"struct.std::complex"* %__z) nounwind ; [#uses=1] + %3 = load double* %2, align 8 ; [#uses=1] + %4 = add double %1, %3 ; [#uses=1] + %5 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + store double %4, double* %5, align 4 + call void @llvm.dbg.stoppoint(i32 1271, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %6 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %7 = load double* %6, align 4 ; [#uses=1] + %8 = call double* @_ZNKSt7complexIdE4imagEv(%"struct.std::complex"* %__z) nounwind ; [#uses=1] + %9 = load double* %8, align 8 ; [#uses=1] + %10 = add double %7, %9 ; [#uses=1] + %11 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + store double %10, double* %11, align 4 + call void @llvm.dbg.stoppoint(i32 1272, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram605 to %0*)) + ret %"struct.std::complex"* %this +} + +define linkonce void @_ZStplIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %agg.result, %"struct.std::complex"* %__x, %"struct.std::complex"* %__y) { +entry: + %__r = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=1] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram610 to %0*)) + %0 = bitcast %"struct.std::complex"* %__r to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %0, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable613 to %0*)) + call void @llvm.dbg.stoppoint(i32 320, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %1 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 0 ; [#uses=1] + %2 = getelementptr %"struct.std::complex"* %__x, i32 0, i32 0, i32 0 ; [#uses=1] + %3 = load double* %2, align 4 ; [#uses=1] + store double %3, double* %1, align 4 + %4 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 1 ; [#uses=1] + %5 = getelementptr %"struct.std::complex"* %__x, i32 0, i32 0, i32 1 ; [#uses=1] + %6 = load double* %5, align 4 ; [#uses=1] + store double %6, double* %4, align 4 + call void @llvm.dbg.stoppoint(i32 321, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %7 = call %"struct.std::complex"* @_ZNSt7complexIdEpLIdEERS0_RKS_IT_E(%"struct.std::complex"* %agg.result, %"struct.std::complex"* %__y) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram610 to %0*)) + ret void +} + +define linkonce %"struct.std::complex"* @_ZNSt7complexIdEmIIdEERS0_RKS_IT_E(%"struct.std::complex"* %this, %"struct.std::complex"* %__z) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram616 to %0*)) + call void @llvm.dbg.stoppoint(i32 1279, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %0 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + %1 = load double* %0, align 4 ; [#uses=1] + %2 = call double* @_ZNKSt7complexIdE4realEv(%"struct.std::complex"* %__z) nounwind ; [#uses=1] + %3 = load double* %2, align 8 ; [#uses=1] + %4 = sub double %1, %3 ; [#uses=1] + %5 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 0 ; [#uses=1] + store double %4, double* %5, align 4 + call void @llvm.dbg.stoppoint(i32 1280, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %6 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + %7 = load double* %6, align 4 ; [#uses=1] + %8 = call double* @_ZNKSt7complexIdE4imagEv(%"struct.std::complex"* %__z) nounwind ; [#uses=1] + %9 = load double* %8, align 8 ; [#uses=1] + %10 = sub double %7, %9 ; [#uses=1] + %11 = getelementptr %"struct.std::complex"* %this, i32 0, i32 0, i32 1 ; [#uses=1] + store double %10, double* %11, align 4 + call void @llvm.dbg.stoppoint(i32 1281, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram616 to %0*)) + ret %"struct.std::complex"* %this +} + +define linkonce void @_ZStmiIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %agg.result, %"struct.std::complex"* %__x, %"struct.std::complex"* %__y) { +entry: + %__r = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=1] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram620 to %0*)) + %0 = bitcast %"struct.std::complex"* %__r to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %0, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable623 to %0*)) + call void @llvm.dbg.stoppoint(i32 350, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %1 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 0 ; [#uses=1] + %2 = getelementptr %"struct.std::complex"* %__x, i32 0, i32 0, i32 0 ; [#uses=1] + %3 = load double* %2, align 4 ; [#uses=1] + store double %3, double* %1, align 4 + %4 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 1 ; [#uses=1] + %5 = getelementptr %"struct.std::complex"* %__x, i32 0, i32 0, i32 1 ; [#uses=1] + %6 = load double* %5, align 4 ; [#uses=1] + store double %6, double* %4, align 4 + call void @llvm.dbg.stoppoint(i32 351, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %7 = call %"struct.std::complex"* @_ZNSt7complexIdEmIIdEERS0_RKS_IT_E(%"struct.std::complex"* %agg.result, %"struct.std::complex"* %__y) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram620 to %0*)) + ret void +} + +define linkonce void @_ZNK10polynomialISt7complexIdEE3getEj(%"struct.std::complex"* noalias sret %agg.result, %"struct.polynomial >"* %this, i32 %term) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram624 to %0*)) + call void @llvm.dbg.stoppoint(i32 302, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 1 ; <%"struct.std::complex"**> [#uses=1] + %1 = load %"struct.std::complex"** %0, align 4 ; <%"struct.std::complex"*> [#uses=2] + %2 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 0 ; [#uses=1] + %3 = getelementptr %"struct.std::complex"* %1, i32 %term, i32 0, i32 0 ; [#uses=1] + %4 = load double* %3, align 1 ; [#uses=1] + store double %4, double* %2, align 1 + %5 = getelementptr %"struct.std::complex"* %agg.result, i32 0, i32 0, i32 1 ; [#uses=1] + %6 = getelementptr %"struct.std::complex"* %1, i32 %term, i32 0, i32 1 ; [#uses=1] + %7 = load double* %6, align 1 ; [#uses=1] + store double %7, double* %5, align 1 + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram624 to %0*)) + ret void +} + +declare void @_ZNSt8ios_base4InitC1Ev(%"struct.std::allocator"*) + +declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*) nounwind + +define internal void @__tcf_0(i8* nocapture %unnamed_arg) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram662 to %0*)) + call void @llvm.dbg.stoppoint(i32 77, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit636 to %0*)) + call void @_ZNSt8ios_base4InitD1Ev(%"struct.std::allocator"* @_ZStL8__ioinit) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram662 to %0*)) + ret void +} + +declare void @_ZNSt8ios_base4InitD1Ev(%"struct.std::allocator"*) + +define linkonce void @_ZN10polynomialIdE7releaseEv(%"struct.polynomial"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram665 to %0*)) + call void @llvm.dbg.stoppoint(i32 190, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + %1 = load double** %0, align 4 ; [#uses=1] + %2 = icmp eq double* %1, null ; [#uses=1] + br i1 %2, label %return, label %bb + +bb: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 190, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %3 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + %4 = load double** %3, align 4 ; [#uses=1] + %5 = bitcast double* %4 to i8* ; [#uses=1] + call void @_ZdaPv(i8* %5) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram665 to %0*)) + ret void + +return: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 190, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + ret void +} + +declare void @_ZdaPv(i8*) nounwind + +define linkonce void @_ZN10polynomialIdED0Ev(%"struct.polynomial"* %this) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram668 to %0*)) + call void @llvm.dbg.stoppoint(i32 255, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([4 x i32 (...)*]* @_ZTV10polynomialIdE, i32 0, i32 2), i32 (...)*** %0, align 4 + call void @llvm.dbg.stoppoint(i32 254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE7releaseEv(%"struct.polynomial"* %this) nounwind + call void @llvm.dbg.stoppoint(i32 254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %1 = bitcast %"struct.polynomial"* %this to i8* ; [#uses=1] + call void @_ZdlPv(i8* %1) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram668 to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %this) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram691 to %0*)) + call void @llvm.dbg.stoppoint(i32 255, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([4 x i32 (...)*]* @_ZTV10polynomialIdE, i32 0, i32 2), i32 (...)*** %0, align 4 + call void @llvm.dbg.stoppoint(i32 254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE7releaseEv(%"struct.polynomial"* %this) nounwind + call void @llvm.dbg.stoppoint(i32 254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + ret void +} + +declare void @_ZdlPv(i8*) nounwind + +define linkonce void @_ZN10polynomialISt7complexIdEE7releaseEv(%"struct.polynomial >"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram693 to %0*)) + call void @llvm.dbg.stoppoint(i32 190, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 1 ; <%"struct.std::complex"**> [#uses=1] + %1 = load %"struct.std::complex"** %0, align 4 ; <%"struct.std::complex"*> [#uses=1] + %2 = icmp eq %"struct.std::complex"* %1, null ; [#uses=1] + br i1 %2, label %return, label %bb + +bb: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 190, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %3 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 1 ; <%"struct.std::complex"**> [#uses=1] + %4 = load %"struct.std::complex"** %3, align 4 ; <%"struct.std::complex"*> [#uses=1] + %5 = bitcast %"struct.std::complex"* %4 to i8* ; [#uses=1] + call void @_ZdaPv(i8* %5) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram693 to %0*)) + ret void + +return: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 190, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialISt7complexIdEED0Ev(%"struct.polynomial >"* %this) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram696 to %0*)) + call void @llvm.dbg.stoppoint(i32 255, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([4 x i32 (...)*]* @_ZTV10polynomialISt7complexIdEE, i32 0, i32 2), i32 (...)*** %0, align 4 + call void @llvm.dbg.stoppoint(i32 254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialISt7complexIdEE7releaseEv(%"struct.polynomial >"* %this) nounwind + call void @llvm.dbg.stoppoint(i32 254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %1 = bitcast %"struct.polynomial >"* %this to i8* ; [#uses=1] + call void @_ZdlPv(i8* %1) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram696 to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %this) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram708 to %0*)) + call void @llvm.dbg.stoppoint(i32 255, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([4 x i32 (...)*]* @_ZTV10polynomialISt7complexIdEE, i32 0, i32 2), i32 (...)*** %0, align 4 + call void @llvm.dbg.stoppoint(i32 254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialISt7complexIdEE7releaseEv(%"struct.polynomial >"* %this) nounwind + call void @llvm.dbg.stoppoint(i32 254, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialIdE7acquireEv(%"struct.polynomial"* %this) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram710 to %0*)) + call void @llvm.dbg.stoppoint(i32 183, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + %1 = load i32* %0, align 4 ; [#uses=1] + %2 = shl i32 %1, 3 ; [#uses=1] + %3 = call i8* @_Znaj(i32 %2) ; [#uses=1] + %4 = bitcast i8* %3 to double* ; [#uses=1] + %5 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + store double* %4, double** %5, align 4 + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram710 to %0*)) + ret void +} + +declare i8* @_Znaj(i32) + +define linkonce void @_ZN10polynomialIdEC1Ej(%"struct.polynomial"* %this, i32 %degree) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram713 to %0*)) + call void @llvm.dbg.stoppoint(i32 213, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([4 x i32 (...)*]* @_ZTV10polynomialIdE, i32 0, i32 2), i32 (...)*** %0, align 4 + %1 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + store double* null, double** %1, align 4 + %2 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + store i32 %degree, i32* %2, align 4 + call void @llvm.dbg.stoppoint(i32 215, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE7acquireEv(%"struct.polynomial"* %this) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram713 to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialIdEC1ERKS0_(%"struct.polynomial"* %this, %"struct.polynomial"* %source) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram717 to %0*)) + call void @llvm.dbg.stoppoint(i32 244, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([4 x i32 (...)*]* @_ZTV10polynomialIdE, i32 0, i32 2), i32 (...)*** %0, align 4 + %1 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + store double* null, double** %1, align 4 + %2 = getelementptr %"struct.polynomial"* %source, i32 0, i32 2 ; [#uses=1] + %3 = load i32* %2, align 4 ; [#uses=1] + %4 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + store i32 %3, i32* %4, align 4 + call void @llvm.dbg.stoppoint(i32 246, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE7acquireEv(%"struct.polynomial"* %this) + call void @llvm.dbg.stoppoint(i32 247, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %5 = getelementptr %"struct.polynomial"* %source, i32 0, i32 1 ; [#uses=1] + %6 = load double** %5, align 4 ; [#uses=1] + call void @_ZN10polynomialIdE9deep_copyEPKd(%"struct.polynomial"* %this, double* %6) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram717 to %0*)) + ret void +} + +define linkonce %"struct.polynomial"* @_ZN10polynomialIdE7stretchEj(%"struct.polynomial"* %this, i32 %degrees) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram720 to %0*)) + call void @llvm.dbg.stoppoint(i32 278, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = icmp eq i32 %degrees, 0 ; [#uses=1] + br i1 %0, label %return, label %bb + +bb: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 280, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %1 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + %2 = load double** %1, align 4 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 281, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %3 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + %4 = load i32* %3, align 4 ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 283, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %5 = add i32 %4, %degrees ; [#uses=1] + %6 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + store i32 %5, i32* %6, align 4 + call void @llvm.dbg.stoppoint(i32 284, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE7acquireEv(%"struct.polynomial"* %this) + call void @llvm.dbg.stoppoint(i32 286, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb2 + +bb1: ; preds = %bb2 + call void @llvm.dbg.stoppoint(i32 289, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %7 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + %8 = load double** %7, align 4 ; [#uses=1] + %9 = getelementptr double* %2, i32 %n.0 ; [#uses=1] + %10 = load double* %9, align 1 ; [#uses=1] + %11 = getelementptr double* %8, i32 %n.0 ; [#uses=1] + store double %10, double* %11, align 1 + call void @llvm.dbg.stoppoint(i32 288, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %12 = add i32 %n.0, 1 ; [#uses=1] + br label %bb2 + +bb2: ; preds = %bb1, %bb + %n.0 = phi i32 [ 0, %bb ], [ %12, %bb1 ] ; [#uses=5] + call void @llvm.dbg.stoppoint(i32 288, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %13 = icmp ult i32 %n.0, %4 ; [#uses=1] + br i1 %13, label %bb1, label %bb5 + +bb4: ; preds = %bb5 + call void @llvm.dbg.stoppoint(i32 292, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %14 = getelementptr %"struct.polynomial"* %this, i32 0, i32 1 ; [#uses=1] + %15 = load double** %14, align 4 ; [#uses=1] + %16 = getelementptr double* %15, i32 %n.1 ; [#uses=1] + store double 0.000000e+00, double* %16, align 1 + call void @llvm.dbg.stoppoint(i32 291, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %17 = add i32 %n.1, 1 ; [#uses=1] + br label %bb5 + +bb5: ; preds = %bb4, %bb2 + %n.1 = phi i32 [ %17, %bb4 ], [ %n.0, %bb2 ] ; [#uses=3] + call void @llvm.dbg.stoppoint(i32 291, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %18 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + %19 = load i32* %18, align 4 ; [#uses=1] + %20 = icmp ugt i32 %19, %n.1 ; [#uses=1] + br i1 %20, label %bb4, label %return + +return: ; preds = %bb5, %entry + call void @llvm.dbg.stoppoint(i32 295, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram720 to %0*)) + ret %"struct.polynomial"* %this +} + +define linkonce %"struct.polynomial"* @_ZN10polynomialIdEaSERKS0_(%"struct.polynomial"* %this, %"struct.polynomial"* %source) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram729 to %0*)) + call void @llvm.dbg.stoppoint(i32 261, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + %1 = load i32* %0, align 4 ; [#uses=1] + %2 = getelementptr %"struct.polynomial"* %source, i32 0, i32 2 ; [#uses=1] + %3 = load i32* %2, align 4 ; [#uses=1] + %4 = icmp eq i32 %1, %3 ; [#uses=1] + br i1 %4, label %bb1, label %bb + +bb: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 263, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE7releaseEv(%"struct.polynomial"* %this) nounwind + call void @llvm.dbg.stoppoint(i32 265, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %5 = getelementptr %"struct.polynomial"* %source, i32 0, i32 2 ; [#uses=1] + %6 = load i32* %5, align 4 ; [#uses=1] + %7 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + store i32 %6, i32* %7, align 4 + call void @llvm.dbg.stoppoint(i32 266, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE7acquireEv(%"struct.polynomial"* %this) + br label %bb1 + +bb1: ; preds = %bb, %entry + call void @llvm.dbg.stoppoint(i32 269, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %8 = getelementptr %"struct.polynomial"* %source, i32 0, i32 1 ; [#uses=1] + %9 = load double** %8, align 4 ; [#uses=1] + call void @_ZN10polynomialIdE9deep_copyEPKd(%"struct.polynomial"* %this, double* %9) nounwind + call void @llvm.dbg.stoppoint(i32 271, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram729 to %0*)) + ret %"struct.polynomial"* %this +} + +define linkonce void @_ZN10polynomialISt7complexIdEE7acquireEv(%"struct.polynomial >"* %this) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram732 to %0*)) + call void @llvm.dbg.stoppoint(i32 183, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 2 ; [#uses=1] + %1 = load i32* %0, align 4 ; [#uses=2] + %2 = shl i32 %1, 4 ; [#uses=1] + %3 = call i8* @_Znaj(i32 %2) ; [#uses=1] + %4 = bitcast i8* %3 to %"struct.std::complex"* ; <%"struct.std::complex"*> [#uses=2] + br label %bb1 + +bb: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 183, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %.0, double 0.000000e+00, double 0.000000e+00) nounwind + %5 = getelementptr %"struct.std::complex"* %.0, i32 1 ; <%"struct.std::complex"*> [#uses=1] + br label %bb1 + +bb1: ; preds = %bb, %entry + %.01.in = phi i32 [ %1, %entry ], [ %.01, %bb ] ; [#uses=1] + %.0 = phi %"struct.std::complex"* [ %4, %entry ], [ %5, %bb ] ; <%"struct.std::complex"*> [#uses=2] + %.01 = add i32 %.01.in, -1 ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 183, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %6 = icmp eq i32 %.01, -1 ; [#uses=1] + br i1 %6, label %bb2, label %bb + +bb2: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 183, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %7 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 1 ; <%"struct.std::complex"**> [#uses=1] + store %"struct.std::complex"* %4, %"struct.std::complex"** %7, align 4 + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram732 to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialISt7complexIdEEC1Ej(%"struct.polynomial >"* %this, i32 %degree) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram735 to %0*)) + call void @llvm.dbg.stoppoint(i32 213, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([4 x i32 (...)*]* @_ZTV10polynomialISt7complexIdEE, i32 0, i32 2), i32 (...)*** %0, align 4 + %1 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 1 ; <%"struct.std::complex"**> [#uses=1] + store %"struct.std::complex"* null, %"struct.std::complex"** %1, align 4 + %2 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 2 ; [#uses=1] + store i32 %degree, i32* %2, align 4 + call void @llvm.dbg.stoppoint(i32 215, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialISt7complexIdEE7acquireEv(%"struct.polynomial >"* %this) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram735 to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialIdE11bit_reverseERKS0_(%"struct.polynomial >"* noalias sret %agg.result, %"struct.polynomial"* %poly) { +entry: + %result = alloca %"struct.polynomial >", align 8 ; <%"struct.polynomial >"*> [#uses=1] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram738 to %0*)) + %0 = bitcast %"struct.polynomial >"* %result to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %0, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable744 to %0*)) + call void @llvm.dbg.stoppoint(i32 471, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %1 = call i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %poly) nounwind ; [#uses=1] + %2 = call i32 @_ZN10polynomialIdE4log2Ej(i32 %1) nounwind ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 473, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %3 = call i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %poly) nounwind ; [#uses=1] + call void @_ZN10polynomialISt7complexIdEEC1Ej(%"struct.polynomial >"* %agg.result, i32 %3) + call void @llvm.dbg.stoppoint(i32 475, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb6 + +bb: ; preds = %bb6 + call void @llvm.dbg.stoppoint(i32 476, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %4 = call double @_ZNK10polynomialIdE3getEj(%"struct.polynomial"* %poly, i32 %n.0) nounwind ; [#uses=1] + %5 = call i32 @_ZN10polynomialIdE9flip_bitsEjj(i32 %n.0, i32 %2) nounwind ; [#uses=1] + %6 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %5) nounwind ; <%"struct.std::complex"*> [#uses=1] + %7 = call %"struct.std::complex"* @_ZNSt7complexIdEaSEd(%"struct.std::complex"* %6, double %4) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.stoppoint(i32 475, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %8 = add i32 %n.0, 1 ; [#uses=1] + br label %bb6 + +bb6: ; preds = %bb, %entry + %n.0 = phi i32 [ 0, %entry ], [ %8, %bb ] ; [#uses=4] + call void @llvm.dbg.stoppoint(i32 475, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %9 = call i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %poly) nounwind ; [#uses=1] + %10 = icmp ugt i32 %9, %n.0 ; [#uses=1] + br i1 %10, label %bb, label %return + +return: ; preds = %bb6 + call void @llvm.dbg.stoppoint(i32 475, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram738 to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialIdE11bit_reverseERKS_ISt7complexIdEE(%"struct.polynomial >"* noalias sret %agg.result, %"struct.polynomial >"* %poly) { +entry: + %result = alloca %"struct.polynomial >", align 8 ; <%"struct.polynomial >"*> [#uses=1] + %memtmp7 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram747 to %0*)) + %0 = bitcast %"struct.polynomial >"* %result to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %0, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable751 to %0*)) + call void @llvm.dbg.stoppoint(i32 485, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %1 = call i32 @_ZNK10polynomialISt7complexIdEE6degreeEv(%"struct.polynomial >"* %poly) nounwind ; [#uses=1] + %2 = call i32 @_ZN10polynomialIdE4log2Ej(i32 %1) nounwind ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 487, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %3 = call i32 @_ZNK10polynomialISt7complexIdEE6degreeEv(%"struct.polynomial >"* %poly) nounwind ; [#uses=1] + call void @_ZN10polynomialISt7complexIdEEC1Ej(%"struct.polynomial >"* %agg.result, i32 %3) + call void @llvm.dbg.stoppoint(i32 489, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb8 + +bb: ; preds = %bb8 + call void @llvm.dbg.stoppoint(i32 490, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %4 = call i32 @_ZN10polynomialIdE9flip_bitsEjj(i32 %n.0, i32 %2) nounwind ; [#uses=1] + %5 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %4) nounwind ; <%"struct.std::complex"*> [#uses=2] + call void @_ZNK10polynomialISt7complexIdEE3getEj(%"struct.std::complex"* noalias sret %memtmp7, %"struct.polynomial >"* %poly, i32 %n.0) nounwind + %6 = getelementptr %"struct.std::complex"* %5, i32 0, i32 0, i32 0 ; [#uses=1] + %7 = getelementptr %"struct.std::complex"* %memtmp7, i32 0, i32 0, i32 0 ; [#uses=1] + %8 = load double* %7, align 8 ; [#uses=1] + store double %8, double* %6, align 4 + %9 = getelementptr %"struct.std::complex"* %5, i32 0, i32 0, i32 1 ; [#uses=1] + %10 = getelementptr %"struct.std::complex"* %memtmp7, i32 0, i32 0, i32 1 ; [#uses=1] + %11 = load double* %10, align 8 ; [#uses=1] + store double %11, double* %9, align 4 + call void @llvm.dbg.stoppoint(i32 489, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %12 = add i32 %n.0, 1 ; [#uses=1] + br label %bb8 + +bb8: ; preds = %bb, %entry + %n.0 = phi i32 [ 0, %entry ], [ %12, %bb ] ; [#uses=4] + call void @llvm.dbg.stoppoint(i32 489, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %13 = call i32 @_ZNK10polynomialISt7complexIdEE6degreeEv(%"struct.polynomial >"* %poly) nounwind ; [#uses=1] + %14 = icmp ugt i32 %13, %n.0 ; [#uses=1] + br i1 %14, label %bb, label %return + +return: ; preds = %bb8 + call void @llvm.dbg.stoppoint(i32 489, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram747 to %0*)) + ret void +} + +define linkonce %"struct.polynomial >"* @_ZN10polynomialISt7complexIdEEaSERKS2_(%"struct.polynomial >"* %this, %"struct.polynomial >"* %source) { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram753 to %0*)) + call void @llvm.dbg.stoppoint(i32 261, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %0 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 2 ; [#uses=1] + %1 = load i32* %0, align 4 ; [#uses=1] + %2 = getelementptr %"struct.polynomial >"* %source, i32 0, i32 2 ; [#uses=1] + %3 = load i32* %2, align 4 ; [#uses=1] + %4 = icmp eq i32 %1, %3 ; [#uses=1] + br i1 %4, label %bb1, label %bb + +bb: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 263, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialISt7complexIdEE7releaseEv(%"struct.polynomial >"* %this) nounwind + call void @llvm.dbg.stoppoint(i32 265, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %5 = getelementptr %"struct.polynomial >"* %source, i32 0, i32 2 ; [#uses=1] + %6 = load i32* %5, align 4 ; [#uses=1] + %7 = getelementptr %"struct.polynomial >"* %this, i32 0, i32 2 ; [#uses=1] + store i32 %6, i32* %7, align 4 + call void @llvm.dbg.stoppoint(i32 266, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialISt7complexIdEE7acquireEv(%"struct.polynomial >"* %this) + br label %bb1 + +bb1: ; preds = %bb, %entry + call void @llvm.dbg.stoppoint(i32 269, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %8 = getelementptr %"struct.polynomial >"* %source, i32 0, i32 1 ; <%"struct.std::complex"**> [#uses=1] + %9 = load %"struct.std::complex"** %8, align 4 ; <%"struct.std::complex"*> [#uses=1] + call void @_ZN10polynomialISt7complexIdEE9deep_copyEPKS1_(%"struct.polynomial >"* %this, %"struct.std::complex"* %9) nounwind + call void @llvm.dbg.stoppoint(i32 271, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram753 to %0*)) + ret %"struct.polynomial >"* %this +} + +define linkonce i32 @_ZN10polynomialIdE11stretch_fftEv(%"struct.polynomial"* %this) { +entry: + %0 = alloca %"struct.std::allocator", align 8 ; <%"struct.std::allocator"*> [#uses=4] + %1 = alloca %"struct.std::string", align 8 ; <%"struct.std::string"*> [#uses=4] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram756 to %0*)) + call void @llvm.dbg.stoppoint(i32 445, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb + +bb: ; preds = %bb1, %entry + %n.0 = phi i32 [ 1, %entry ], [ %5, %bb1 ] ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 449, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %2 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + %3 = load i32* %2, align 4 ; [#uses=1] + %4 = icmp ugt i32 %3, %n.0 ; [#uses=1] + %5 = shl i32 %n.0, 1 ; [#uses=4] + br i1 %4, label %bb1, label %bb17 + +bb1: ; preds = %bb + call void @llvm.dbg.stoppoint(i32 454, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %6 = icmp eq i32 %5, 0 ; [#uses=1] + br i1 %6, label %bb2, label %bb + +bb2: ; preds = %bb1 + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZNSaIcEC1Ev(%"struct.std::allocator"* %0) nounwind + invoke void @_ZNSsC1EPKcRKSaIcE(%"struct.std::string"* %1, i8* getelementptr ([35 x i8]* @.str759, i32 0, i32 0), %"struct.std::allocator"* %0) + to label %invcont unwind label %lpad + +invcont: ; preds = %bb2 + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %7 = call i8* @__cxa_allocate_exception(i32 8) nounwind ; [#uses=3] + %8 = bitcast i8* %7 to %"struct.std::overflow_error"* ; <%"struct.std::overflow_error"*> [#uses=1] + invoke void @_ZNSt14overflow_errorC1ERKSs(%"struct.std::overflow_error"* %8, %"struct.std::string"* %1) + to label %invcont3 unwind label %lpad23 + +invcont3: ; preds = %invcont + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZNSsD1Ev(%"struct.std::string"* %1) + to label %bb11 unwind label %lpad31 + +bb11: ; preds = %invcont3 + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZNSaIcED1Ev(%"struct.std::allocator"* %0) nounwind + call void @__cxa_throw(i8* %7, i8* bitcast (%struct.__si_class_type_info_pseudo* @_ZTISt14overflow_error to i8*), void (i8*)* bitcast (void (%"struct.std::overflow_error"*)* @_ZNSt14overflow_errorD1Ev to void (i8*)*)) noreturn + unreachable + +bb17: ; preds = %bb + call void @llvm.dbg.stoppoint(i32 459, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %9 = getelementptr %"struct.polynomial"* %this, i32 0, i32 2 ; [#uses=1] + %10 = load i32* %9, align 4 ; [#uses=2] + %11 = sub i32 %5, %10 ; [#uses=3] + call void @llvm.dbg.stoppoint(i32 461, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %12 = icmp eq i32 %5, %10 ; [#uses=1] + br i1 %12, label %return, label %bb18 + +bb18: ; preds = %bb17 + call void @llvm.dbg.stoppoint(i32 462, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %13 = call %"struct.polynomial"* @_ZN10polynomialIdE7stretchEj(%"struct.polynomial"* %this, i32 %11) ; <%"struct.polynomial"*> [#uses=0] + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram756 to %0*)) + ret i32 %11 + +return: ; preds = %bb17 + call void @llvm.dbg.stoppoint(i32 464, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + ret i32 %11 + +lpad: ; preds = %bb2 + %eh_ptr = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select22 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + br label %ppad + +lpad23: ; preds = %invcont + %eh_ptr24 = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select26 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr24, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @__cxa_free_exception(i8* %7) nounwind + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZNSsD1Ev(%"struct.std::string"* %1) + to label %ppad unwind label %lpad27 + +lpad27: ; preds = %lpad23 + %eh_ptr28 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select30 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr28, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +lpad31: ; preds = %invcont3 + %eh_ptr32 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select34 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr32, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +ppad: ; preds = %lpad23, %lpad + %eh_exception.0 = phi i8* [ %eh_ptr, %lpad ], [ %eh_ptr24, %lpad23 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 455, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZNSaIcED1Ev(%"struct.std::allocator"* %0) nounwind + call void @_Unwind_Resume(i8* %eh_exception.0) + unreachable +} + +declare void @_ZNSaIcEC1Ev(%"struct.std::allocator"*) nounwind + +declare void @_ZNSsC1EPKcRKSaIcE(%"struct.std::string"*, i8*, %"struct.std::allocator"*) + +declare i8* @__cxa_allocate_exception(i32) nounwind + +declare void @_ZNSt14overflow_errorC1ERKSs(%"struct.std::overflow_error"*, %"struct.std::string"*) + +declare void @_ZNSsD1Ev(%"struct.std::string"*) + +declare i8* @llvm.eh.exception() nounwind + +declare i32 @llvm.eh.selector.i32(i8*, i8*, ...) nounwind + +declare void @__cxa_free_exception(i8*) nounwind + +declare void @_ZSt9terminatev() noreturn nounwind + +declare void @_ZNSaIcED1Ev(%"struct.std::allocator"*) nounwind + +declare void @__cxa_throw(i8*, i8*, void (i8*)*) noreturn + +define linkonce void @_ZNSt14overflow_errorD1Ev(%"struct.std::overflow_error"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1727 to %0*)) + call void @llvm.dbg.stoppoint(i32 134, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*)) + %0 = getelementptr %"struct.std::overflow_error"* %this, i32 0, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([5 x i32 (...)*]* @_ZTVSt14overflow_error, i32 0, i32 2), i32 (...)*** %0, align 4 + %1 = getelementptr %"struct.std::overflow_error"* %this, i32 0, i32 0 ; <%"struct.std::runtime_error"*> [#uses=1] + call void @_ZNSt13runtime_errorD2Ev(%"struct.std::runtime_error"* %1) nounwind + call void @llvm.dbg.stoppoint(i32 134, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*)) + ret void +} + +declare i32 @__gxx_personality_v0(...) + +declare void @_Unwind_Resume(i8*) + +define linkonce void @_ZNSt14overflow_errorD0Ev(%"struct.std::overflow_error"* %this) nounwind { +entry: + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1736 to %0*)) + call void @llvm.dbg.stoppoint(i32 134, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*)) + %0 = getelementptr %"struct.std::overflow_error"* %this, i32 0, i32 0, i32 0, i32 0 ; [#uses=1] + store i32 (...)** getelementptr ([5 x i32 (...)*]* @_ZTVSt14overflow_error, i32 0, i32 2), i32 (...)*** %0, align 4 + %1 = getelementptr %"struct.std::overflow_error"* %this, i32 0, i32 0 ; <%"struct.std::runtime_error"*> [#uses=1] + call void @_ZNSt13runtime_errorD2Ev(%"struct.std::runtime_error"* %1) nounwind + call void @llvm.dbg.stoppoint(i32 134, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit770 to %0*)) + %2 = bitcast %"struct.std::overflow_error"* %this to i8* ; [#uses=1] + call void @_ZdlPv(i8* %2) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1736 to %0*)) + ret void +} + +declare i8* @_ZNKSt13runtime_error4whatEv(%"struct.std::runtime_error"*) nounwind + +declare void @_ZNSt13runtime_errorD2Ev(%"struct.std::runtime_error"*) nounwind + +define linkonce void @_ZSt13__complex_expCd(%1* noalias sret %agg.result, %1 %__z) nounwind { +entry: + %0 = alloca %1, align 8 ; <%1*> [#uses=4] + %memtmp = alloca %1, align 8 ; <%1*> [#uses=3] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1742 to %0*)) + call void @llvm.dbg.stoppoint(i32 730, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + call void @cexp(%1* noalias sret %memtmp, %1 %__z) nounwind + %1 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + %2 = getelementptr %1* %memtmp, i32 0, i32 0 ; [#uses=1] + %3 = load double* %2, align 8 ; [#uses=1] + store double %3, double* %1, align 8 + %4 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + %5 = getelementptr %1* %memtmp, i32 0, i32 1 ; [#uses=1] + %6 = load double* %5, align 8 ; [#uses=1] + store double %6, double* %4, align 8 + %7 = getelementptr %1* %agg.result, i32 0, i32 0 ; [#uses=1] + %8 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + %9 = load double* %8, align 8 ; [#uses=1] + store double %9, double* %7, align 8 + %10 = getelementptr %1* %agg.result, i32 0, i32 1 ; [#uses=1] + %11 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + %12 = load double* %11, align 8 ; [#uses=1] + store double %12, double* %10, align 8 + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1742 to %0*)) + ret void +} + +declare void @cexp(%1* noalias sret, %1) nounwind + +define linkonce void @_ZSt3expIdESt7complexIT_ERKS2_(%"struct.std::complex"* noalias sret %agg.result, %"struct.std::complex"* %__z) nounwind { +entry: + %0 = alloca %1, align 8 ; <%1*> [#uses=3] + %1 = alloca %1, align 8 ; <%1*> [#uses=3] + %memtmp = alloca %1, align 8 ; <%1*> [#uses=3] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1746 to %0*)) + call void @llvm.dbg.stoppoint(i32 738, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit5 to %0*)) + %2 = call %1* @_ZNKSt7complexIdE5__repEv(%"struct.std::complex"* %__z) nounwind ; <%1*> [#uses=2] + %3 = getelementptr %1* %1, i32 0, i32 0 ; [#uses=1] + %4 = getelementptr %1* %2, i32 0, i32 0 ; [#uses=1] + %5 = load double* %4, align 8 ; [#uses=1] + store double %5, double* %3, align 8 + %6 = getelementptr %1* %1, i32 0, i32 1 ; [#uses=1] + %7 = getelementptr %1* %2, i32 0, i32 1 ; [#uses=1] + %8 = load double* %7, align 8 ; [#uses=1] + store double %8, double* %6, align 8 + %9 = load %1* %1, align 8 ; <%1> [#uses=1] + call void @_ZSt13__complex_expCd(%1* noalias sret %memtmp, %1 %9) nounwind + %10 = getelementptr %1* %0, i32 0, i32 0 ; [#uses=1] + %11 = getelementptr %1* %memtmp, i32 0, i32 0 ; [#uses=1] + %12 = load double* %11, align 8 ; [#uses=1] + store double %12, double* %10, align 8 + %13 = getelementptr %1* %0, i32 0, i32 1 ; [#uses=1] + %14 = getelementptr %1* %memtmp, i32 0, i32 1 ; [#uses=1] + %15 = load double* %14, align 8 ; [#uses=1] + store double %15, double* %13, align 8 + %16 = load %1* %0, align 8 ; <%1> [#uses=1] + call void @_ZNSt7complexIdEC1ECd(%"struct.std::complex"* %agg.result, %1 %16) nounwind + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1746 to %0*)) + ret void +} + +define linkonce void @_ZN10polynomialIdE3fftERKS0_(%"struct.polynomial >"* noalias sret %agg.result, %"struct.polynomial"* %poly) { +entry: + %result = alloca %"struct.polynomial >", align 8 ; <%"struct.polynomial >"*> [#uses=1] + %u = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=6] + %t = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=6] + %w = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=5] + %wm = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=5] + %0 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=2] + %1 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=2] + %memtmp20 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + %memtmp23 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + %memtmp24 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + %memtmp26 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1748 to %0*)) + %2 = bitcast %"struct.polynomial >"* %result to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %2, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1751 to %0*)) + %3 = bitcast %"struct.std::complex"* %u to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %3, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1753 to %0*)) + %4 = bitcast %"struct.std::complex"* %t to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %4, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1755 to %0*)) + %5 = bitcast %"struct.std::complex"* %w to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %5, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1757 to %0*)) + %6 = bitcast %"struct.std::complex"* %wm to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %6, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1759 to %0*)) + call void @llvm.dbg.stoppoint(i32 499, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %7 = call i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %poly) nounwind ; [#uses=1] + %8 = call i32 @_ZN10polynomialIdE4log2Ej(i32 %7) nounwind ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 501, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %wm, double 0.000000e+00, double 0.000000e+00) nounwind + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %w, double 0.000000e+00, double 0.000000e+00) nounwind + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %t, double 0.000000e+00, double 0.000000e+00) nounwind + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %u, double 0.000000e+00, double 0.000000e+00) nounwind + call void @llvm.dbg.stoppoint(i32 503, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE11bit_reverseERKS0_(%"struct.polynomial >"* noalias sret %agg.result, %"struct.polynomial"* %poly) + call void @llvm.dbg.stoppoint(i32 508, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb32 + +bb: ; preds = %bb32 + call void @llvm.dbg.stoppoint(i32 510, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %9 = uitofp i32 %m.0 to double ; [#uses=1] + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %0, double %9, double 0.000000e+00) nounwind + invoke void @_ZStdvIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %1, %"struct.std::complex"* @_ZN10polynomialIdE4PI2IE, %"struct.std::complex"* %0) + to label %invcont unwind label %lpad + +invcont: ; preds = %bb + call void @llvm.dbg.stoppoint(i32 510, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt3expIdESt7complexIT_ERKS2_(%"struct.std::complex"* noalias sret %memtmp20, %"struct.std::complex"* %1) nounwind + %10 = getelementptr %"struct.std::complex"* %wm, i32 0, i32 0, i32 0 ; [#uses=1] + %11 = getelementptr %"struct.std::complex"* %memtmp20, i32 0, i32 0, i32 0 ; [#uses=1] + %12 = load double* %11, align 8 ; [#uses=1] + store double %12, double* %10, align 8 + %13 = getelementptr %"struct.std::complex"* %wm, i32 0, i32 0, i32 1 ; [#uses=1] + %14 = getelementptr %"struct.std::complex"* %memtmp20, i32 0, i32 0, i32 1 ; [#uses=1] + %15 = load double* %14, align 8 ; [#uses=1] + store double %15, double* %13, align 8 + call void @llvm.dbg.stoppoint(i32 511, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %16 = call %"struct.std::complex"* @_ZNSt7complexIdEaSEd(%"struct.std::complex"* %w, double 1.000000e+00) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.stoppoint(i32 513, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb30 + +bb22: ; preds = %bb28 + call void @llvm.dbg.stoppoint(i32 517, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %17 = add i32 %k.0, %m2.0 ; [#uses=1] + %18 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %17) nounwind ; <%"struct.std::complex"*> [#uses=1] + call void @_ZStmlIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %memtmp23, %"struct.std::complex"* %w, %"struct.std::complex"* %18) nounwind + %19 = getelementptr %"struct.std::complex"* %t, i32 0, i32 0, i32 0 ; [#uses=1] + %20 = getelementptr %"struct.std::complex"* %memtmp23, i32 0, i32 0, i32 0 ; [#uses=1] + %21 = load double* %20, align 8 ; [#uses=1] + store double %21, double* %19, align 8 + %22 = getelementptr %"struct.std::complex"* %t, i32 0, i32 0, i32 1 ; [#uses=1] + %23 = getelementptr %"struct.std::complex"* %memtmp23, i32 0, i32 0, i32 1 ; [#uses=1] + %24 = load double* %23, align 8 ; [#uses=1] + store double %24, double* %22, align 8 + call void @llvm.dbg.stoppoint(i32 518, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %25 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %k.0) nounwind ; <%"struct.std::complex"*> [#uses=2] + %26 = getelementptr %"struct.std::complex"* %u, i32 0, i32 0, i32 0 ; [#uses=1] + %27 = getelementptr %"struct.std::complex"* %25, i32 0, i32 0, i32 0 ; [#uses=1] + %28 = load double* %27, align 4 ; [#uses=1] + store double %28, double* %26, align 8 + %29 = getelementptr %"struct.std::complex"* %u, i32 0, i32 0, i32 1 ; [#uses=1] + %30 = getelementptr %"struct.std::complex"* %25, i32 0, i32 0, i32 1 ; [#uses=1] + %31 = load double* %30, align 4 ; [#uses=1] + store double %31, double* %29, align 8 + call void @llvm.dbg.stoppoint(i32 519, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %32 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %k.0) nounwind ; <%"struct.std::complex"*> [#uses=2] + invoke void @_ZStplIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %memtmp24, %"struct.std::complex"* %u, %"struct.std::complex"* %t) + to label %invcont25 unwind label %lpad + +invcont25: ; preds = %bb22 + %33 = getelementptr %"struct.std::complex"* %32, i32 0, i32 0, i32 0 ; [#uses=1] + %34 = getelementptr %"struct.std::complex"* %memtmp24, i32 0, i32 0, i32 0 ; [#uses=1] + %35 = load double* %34, align 8 ; [#uses=1] + store double %35, double* %33, align 4 + %36 = getelementptr %"struct.std::complex"* %32, i32 0, i32 0, i32 1 ; [#uses=1] + %37 = getelementptr %"struct.std::complex"* %memtmp24, i32 0, i32 0, i32 1 ; [#uses=1] + %38 = load double* %37, align 8 ; [#uses=1] + store double %38, double* %36, align 4 + call void @llvm.dbg.stoppoint(i32 520, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %39 = add i32 %k.0, %m2.0 ; [#uses=1] + %40 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %39) nounwind ; <%"struct.std::complex"*> [#uses=2] + invoke void @_ZStmiIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %memtmp26, %"struct.std::complex"* %u, %"struct.std::complex"* %t) + to label %invcont27 unwind label %lpad + +invcont27: ; preds = %invcont25 + %41 = getelementptr %"struct.std::complex"* %40, i32 0, i32 0, i32 0 ; [#uses=1] + %42 = getelementptr %"struct.std::complex"* %memtmp26, i32 0, i32 0, i32 0 ; [#uses=1] + %43 = load double* %42, align 8 ; [#uses=1] + store double %43, double* %41, align 4 + %44 = getelementptr %"struct.std::complex"* %40, i32 0, i32 0, i32 1 ; [#uses=1] + %45 = getelementptr %"struct.std::complex"* %memtmp26, i32 0, i32 0, i32 1 ; [#uses=1] + %46 = load double* %45, align 8 ; [#uses=1] + store double %46, double* %44, align 4 + call void @llvm.dbg.stoppoint(i32 515, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %47 = add i32 %k.0, %m.0 ; [#uses=1] + br label %bb28 + +bb28: ; preds = %bb30, %invcont27 + %k.0 = phi i32 [ %47, %invcont27 ], [ %j.0, %bb30 ] ; [#uses=6] + call void @llvm.dbg.stoppoint(i32 515, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %48 = call i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %poly) nounwind ; [#uses=1] + %49 = add i32 %48, -1 ; [#uses=1] + %50 = icmp ult i32 %49, %k.0 ; [#uses=1] + br i1 %50, label %bb29, label %bb22 + +bb29: ; preds = %bb28 + call void @llvm.dbg.stoppoint(i32 523, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %51 = call %"struct.std::complex"* @_ZNSt7complexIdEmLIdEERS0_RKS_IT_E(%"struct.std::complex"* %w, %"struct.std::complex"* %wm) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.stoppoint(i32 513, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %52 = add i32 %j.0, 1 ; [#uses=1] + br label %bb30 + +bb30: ; preds = %bb29, %invcont + %j.0 = phi i32 [ 0, %invcont ], [ %52, %bb29 ] ; [#uses=3] + call void @llvm.dbg.stoppoint(i32 513, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %53 = add i32 %m2.0, -1 ; [#uses=1] + %54 = icmp ult i32 %53, %j.0 ; [#uses=1] + br i1 %54, label %bb31, label %bb28 + +bb31: ; preds = %bb30 + call void @llvm.dbg.stoppoint(i32 526, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %55 = shl i32 %m.0, 1 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 527, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %56 = shl i32 %m2.0, 1 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 508, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %57 = add i32 %s.0, 1 ; [#uses=1] + br label %bb32 + +bb32: ; preds = %bb31, %entry + %m.0 = phi i32 [ 2, %entry ], [ %55, %bb31 ] ; [#uses=3] + %m2.0 = phi i32 [ 1, %entry ], [ %56, %bb31 ] ; [#uses=4] + %s.0 = phi i32 [ 0, %entry ], [ %57, %bb31 ] ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 508, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %58 = icmp ult i32 %s.0, %8 ; [#uses=1] + br i1 %58, label %bb, label %return + +return: ; preds = %bb32 + call void @llvm.dbg.stoppoint(i32 530, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1748 to %0*)) + ret void + +lpad: ; preds = %invcont25, %bb22, %bb + %eh_ptr = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select40 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 530, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %agg.result) + to label %Unwind unwind label %lpad41 + +lpad41: ; preds = %lpad + %eh_ptr42 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select44 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr42, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 530, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +Unwind: ; preds = %lpad + call void @_Unwind_Resume(i8* %eh_ptr) + unreachable +} + +define linkonce void @_ZN10polynomialIdE11inverse_fftERKS_ISt7complexIdEE(%"struct.polynomial >"* noalias sret %agg.result, %"struct.polynomial >"* %poly) { +entry: + %result = alloca %"struct.polynomial >", align 8 ; <%"struct.polynomial >"*> [#uses=1] + %u = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=6] + %t = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=6] + %w = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=5] + %wm = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=5] + %0 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=2] + %1 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=2] + %2 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=2] + %memtmp22 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + %memtmp25 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + %memtmp26 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + %memtmp28 = alloca %"struct.std::complex", align 8 ; <%"struct.std::complex"*> [#uses=3] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1771 to %0*)) + %3 = bitcast %"struct.polynomial >"* %result to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %3, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1774 to %0*)) + %4 = bitcast %"struct.std::complex"* %u to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %4, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1775 to %0*)) + %5 = bitcast %"struct.std::complex"* %t to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %5, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1776 to %0*)) + %6 = bitcast %"struct.std::complex"* %w to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %6, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1777 to %0*)) + %7 = bitcast %"struct.std::complex"* %wm to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %7, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1778 to %0*)) + call void @llvm.dbg.stoppoint(i32 537, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %8 = call i32 @_ZNK10polynomialISt7complexIdEE6degreeEv(%"struct.polynomial >"* %poly) nounwind ; [#uses=1] + %9 = call i32 @_ZN10polynomialIdE4log2Ej(i32 %8) nounwind ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 539, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %wm, double 0.000000e+00, double 0.000000e+00) nounwind + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %w, double 0.000000e+00, double 0.000000e+00) nounwind + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %t, double 0.000000e+00, double 0.000000e+00) nounwind + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %u, double 0.000000e+00, double 0.000000e+00) nounwind + call void @llvm.dbg.stoppoint(i32 541, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdE11bit_reverseERKS_ISt7complexIdEE(%"struct.polynomial >"* noalias sret %agg.result, %"struct.polynomial >"* %poly) + call void @llvm.dbg.stoppoint(i32 546, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb34 + +bb: ; preds = %bb34 + call void @llvm.dbg.stoppoint(i32 548, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %10 = uitofp i32 %m.0 to double ; [#uses=1] + call void @_ZNSt7complexIdEC1Edd(%"struct.std::complex"* %1, double %10, double 0.000000e+00) nounwind + call void @_ZStngIdESt7complexIT_ERKS2_(%"struct.std::complex"* noalias sret %0, %"struct.std::complex"* @_ZN10polynomialIdE4PI2IE) nounwind + invoke void @_ZStdvIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %2, %"struct.std::complex"* %0, %"struct.std::complex"* %1) + to label %invcont unwind label %lpad + +invcont: ; preds = %bb + call void @llvm.dbg.stoppoint(i32 548, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt3expIdESt7complexIT_ERKS2_(%"struct.std::complex"* noalias sret %memtmp22, %"struct.std::complex"* %2) nounwind + %11 = getelementptr %"struct.std::complex"* %wm, i32 0, i32 0, i32 0 ; [#uses=1] + %12 = getelementptr %"struct.std::complex"* %memtmp22, i32 0, i32 0, i32 0 ; [#uses=1] + %13 = load double* %12, align 8 ; [#uses=1] + store double %13, double* %11, align 8 + %14 = getelementptr %"struct.std::complex"* %wm, i32 0, i32 0, i32 1 ; [#uses=1] + %15 = getelementptr %"struct.std::complex"* %memtmp22, i32 0, i32 0, i32 1 ; [#uses=1] + %16 = load double* %15, align 8 ; [#uses=1] + store double %16, double* %14, align 8 + call void @llvm.dbg.stoppoint(i32 549, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %17 = call %"struct.std::complex"* @_ZNSt7complexIdEaSEd(%"struct.std::complex"* %w, double 1.000000e+00) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.stoppoint(i32 551, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb32 + +bb24: ; preds = %bb30 + call void @llvm.dbg.stoppoint(i32 555, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %18 = add i32 %k.0, %m2.0 ; [#uses=1] + %19 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %18) nounwind ; <%"struct.std::complex"*> [#uses=1] + call void @_ZStmlIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %memtmp25, %"struct.std::complex"* %w, %"struct.std::complex"* %19) nounwind + %20 = getelementptr %"struct.std::complex"* %t, i32 0, i32 0, i32 0 ; [#uses=1] + %21 = getelementptr %"struct.std::complex"* %memtmp25, i32 0, i32 0, i32 0 ; [#uses=1] + %22 = load double* %21, align 8 ; [#uses=1] + store double %22, double* %20, align 8 + %23 = getelementptr %"struct.std::complex"* %t, i32 0, i32 0, i32 1 ; [#uses=1] + %24 = getelementptr %"struct.std::complex"* %memtmp25, i32 0, i32 0, i32 1 ; [#uses=1] + %25 = load double* %24, align 8 ; [#uses=1] + store double %25, double* %23, align 8 + call void @llvm.dbg.stoppoint(i32 556, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %26 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %k.0) nounwind ; <%"struct.std::complex"*> [#uses=2] + %27 = getelementptr %"struct.std::complex"* %u, i32 0, i32 0, i32 0 ; [#uses=1] + %28 = getelementptr %"struct.std::complex"* %26, i32 0, i32 0, i32 0 ; [#uses=1] + %29 = load double* %28, align 4 ; [#uses=1] + store double %29, double* %27, align 8 + %30 = getelementptr %"struct.std::complex"* %u, i32 0, i32 0, i32 1 ; [#uses=1] + %31 = getelementptr %"struct.std::complex"* %26, i32 0, i32 0, i32 1 ; [#uses=1] + %32 = load double* %31, align 4 ; [#uses=1] + store double %32, double* %30, align 8 + call void @llvm.dbg.stoppoint(i32 557, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %33 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %k.0) nounwind ; <%"struct.std::complex"*> [#uses=2] + invoke void @_ZStplIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %memtmp26, %"struct.std::complex"* %u, %"struct.std::complex"* %t) + to label %invcont27 unwind label %lpad + +invcont27: ; preds = %bb24 + %34 = getelementptr %"struct.std::complex"* %33, i32 0, i32 0, i32 0 ; [#uses=1] + %35 = getelementptr %"struct.std::complex"* %memtmp26, i32 0, i32 0, i32 0 ; [#uses=1] + %36 = load double* %35, align 8 ; [#uses=1] + store double %36, double* %34, align 4 + %37 = getelementptr %"struct.std::complex"* %33, i32 0, i32 0, i32 1 ; [#uses=1] + %38 = getelementptr %"struct.std::complex"* %memtmp26, i32 0, i32 0, i32 1 ; [#uses=1] + %39 = load double* %38, align 8 ; [#uses=1] + store double %39, double* %37, align 4 + call void @llvm.dbg.stoppoint(i32 558, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %40 = add i32 %k.0, %m2.0 ; [#uses=1] + %41 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %40) nounwind ; <%"struct.std::complex"*> [#uses=2] + invoke void @_ZStmiIdESt7complexIT_ERKS2_S4_(%"struct.std::complex"* noalias sret %memtmp28, %"struct.std::complex"* %u, %"struct.std::complex"* %t) + to label %invcont29 unwind label %lpad + +invcont29: ; preds = %invcont27 + %42 = getelementptr %"struct.std::complex"* %41, i32 0, i32 0, i32 0 ; [#uses=1] + %43 = getelementptr %"struct.std::complex"* %memtmp28, i32 0, i32 0, i32 0 ; [#uses=1] + %44 = load double* %43, align 8 ; [#uses=1] + store double %44, double* %42, align 4 + %45 = getelementptr %"struct.std::complex"* %41, i32 0, i32 0, i32 1 ; [#uses=1] + %46 = getelementptr %"struct.std::complex"* %memtmp28, i32 0, i32 0, i32 1 ; [#uses=1] + %47 = load double* %46, align 8 ; [#uses=1] + store double %47, double* %45, align 4 + call void @llvm.dbg.stoppoint(i32 553, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %48 = add i32 %k.0, %m.0 ; [#uses=1] + br label %bb30 + +bb30: ; preds = %bb32, %invcont29 + %k.0 = phi i32 [ %48, %invcont29 ], [ %j.0, %bb32 ] ; [#uses=6] + call void @llvm.dbg.stoppoint(i32 553, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %49 = call i32 @_ZNK10polynomialISt7complexIdEE6degreeEv(%"struct.polynomial >"* %poly) nounwind ; [#uses=1] + %50 = add i32 %49, -1 ; [#uses=1] + %51 = icmp ult i32 %50, %k.0 ; [#uses=1] + br i1 %51, label %bb31, label %bb24 + +bb31: ; preds = %bb30 + call void @llvm.dbg.stoppoint(i32 561, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %52 = call %"struct.std::complex"* @_ZNSt7complexIdEmLIdEERS0_RKS_IT_E(%"struct.std::complex"* %w, %"struct.std::complex"* %wm) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.stoppoint(i32 551, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %53 = add i32 %j.0, 1 ; [#uses=1] + br label %bb32 + +bb32: ; preds = %bb31, %invcont + %j.0 = phi i32 [ 0, %invcont ], [ %53, %bb31 ] ; [#uses=3] + call void @llvm.dbg.stoppoint(i32 551, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %54 = add i32 %m2.0, -1 ; [#uses=1] + %55 = icmp ult i32 %54, %j.0 ; [#uses=1] + br i1 %55, label %bb33, label %bb30 + +bb33: ; preds = %bb32 + call void @llvm.dbg.stoppoint(i32 564, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %56 = shl i32 %m.0, 1 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 565, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %57 = shl i32 %m2.0, 1 ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 546, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %58 = add i32 %s.0, 1 ; [#uses=1] + br label %bb34 + +bb34: ; preds = %bb33, %entry + %m.0 = phi i32 [ 2, %entry ], [ %56, %bb33 ] ; [#uses=3] + %m2.0 = phi i32 [ 1, %entry ], [ %57, %bb33 ] ; [#uses=4] + %s.0 = phi i32 [ 0, %entry ], [ %58, %bb33 ] ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 546, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %59 = icmp ult i32 %s.0, %9 ; [#uses=1] + br i1 %59, label %bb, label %bb37 + +bb36: ; preds = %bb37 + call void @llvm.dbg.stoppoint(i32 569, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %60 = call i32 @_ZNK10polynomialISt7complexIdEE6degreeEv(%"struct.polynomial >"* %poly) nounwind ; [#uses=1] + %61 = uitofp i32 %60 to double ; [#uses=1] + %62 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %agg.result, i32 %j.1) nounwind ; <%"struct.std::complex"*> [#uses=1] + %63 = call %"struct.std::complex"* @_ZNSt7complexIdEdVEd(%"struct.std::complex"* %62, double %61) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.stoppoint(i32 568, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %64 = add i32 %j.1, 1 ; [#uses=1] + br label %bb37 + +bb37: ; preds = %bb36, %bb34 + %j.1 = phi i32 [ %64, %bb36 ], [ 0, %bb34 ] ; [#uses=3] + call void @llvm.dbg.stoppoint(i32 568, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %65 = call i32 @_ZNK10polynomialISt7complexIdEE6degreeEv(%"struct.polynomial >"* %poly) nounwind ; [#uses=1] + %66 = icmp ugt i32 %65, %j.1 ; [#uses=1] + br i1 %66, label %bb36, label %return + +return: ; preds = %bb37 + call void @llvm.dbg.stoppoint(i32 571, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1771 to %0*)) + ret void + +lpad: ; preds = %invcont27, %bb24, %bb + %eh_ptr = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select46 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 571, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %agg.result) + to label %Unwind unwind label %lpad47 + +lpad47: ; preds = %lpad + %eh_ptr48 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select50 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr48, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 571, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +Unwind: ; preds = %lpad + call void @_Unwind_Resume(i8* %eh_ptr) + unreachable +} + +define linkonce void @_ZNK10polynomialIdEmlERKS0_(%"struct.polynomial"* noalias sret %agg.result, %"struct.polynomial"* %this, %"struct.polynomial"* %poly) { +entry: + %result = alloca %"struct.polynomial", align 8 ; <%"struct.polynomial"*> [#uses=1] + %dft2 = alloca %"struct.polynomial >", align 8 ; <%"struct.polynomial >"*> [#uses=7] + %dft1 = alloca %"struct.polynomial >", align 8 ; <%"struct.polynomial >"*> [#uses=6] + %a2 = alloca %"struct.polynomial", align 8 ; <%"struct.polynomial"*> [#uses=8] + %a1 = alloca %"struct.polynomial", align 8 ; <%"struct.polynomial"*> [#uses=9] + %0 = alloca %"struct.polynomial >", align 8 ; <%"struct.polynomial >"*> [#uses=4] + call void @llvm.dbg.func.start(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1785 to %0*)) + %1 = bitcast %"struct.polynomial"* %result to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %1, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1791 to %0*)) + %2 = bitcast %"struct.polynomial >"* %dft2 to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %2, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1795 to %0*)) + %3 = bitcast %"struct.polynomial >"* %dft1 to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %3, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1797 to %0*)) + %4 = bitcast %"struct.polynomial"* %a2 to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %4, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1799 to %0*)) + %5 = bitcast %"struct.polynomial"* %a1 to %0* ; <%0*> [#uses=1] + call void @llvm.dbg.declare(%0* %5, %0* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable1801 to %0*)) + call void @llvm.dbg.stoppoint(i32 590, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdEC1ERKS0_(%"struct.polynomial"* %a1, %"struct.polynomial"* %this) + call void @llvm.dbg.stoppoint(i32 591, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdEC1ERKS0_(%"struct.polynomial"* %a2, %"struct.polynomial"* %poly) + to label %invcont unwind label %lpad + +invcont: ; preds = %entry + call void @llvm.dbg.stoppoint(i32 594, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %6 = call i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %a1) nounwind ; [#uses=1] + %7 = call i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %a2) nounwind ; [#uses=1] + %8 = icmp ugt i32 %6, %7 ; [#uses=1] + br i1 %8, label %bb, label %bb26 + +bb: ; preds = %invcont + call void @llvm.dbg.stoppoint(i32 595, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %9 = invoke i32 @_ZN10polynomialIdE11stretch_fftEv(%"struct.polynomial"* %a1) + to label %invcont24 unwind label %lpad76 ; [#uses=1] + +invcont24: ; preds = %bb + call void @llvm.dbg.stoppoint(i32 595, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %10 = invoke %"struct.polynomial"* @_ZN10polynomialIdE7stretchEj(%"struct.polynomial"* %a2, i32 %9) + to label %bb29 unwind label %lpad76 ; <%"struct.polynomial"*> [#uses=0] + +bb26: ; preds = %invcont + call void @llvm.dbg.stoppoint(i32 597, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %11 = invoke i32 @_ZN10polynomialIdE11stretch_fftEv(%"struct.polynomial"* %a2) + to label %invcont27 unwind label %lpad76 ; [#uses=1] + +invcont27: ; preds = %bb26 + call void @llvm.dbg.stoppoint(i32 597, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %12 = invoke %"struct.polynomial"* @_ZN10polynomialIdE7stretchEj(%"struct.polynomial"* %a1, i32 %11) + to label %bb29 unwind label %lpad76 ; <%"struct.polynomial"*> [#uses=0] + +bb29: ; preds = %invcont27, %invcont24 + call void @llvm.dbg.stoppoint(i32 600, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdE3fftERKS0_(%"struct.polynomial >"* noalias sret %dft1, %"struct.polynomial"* %a1) + to label %invcont30 unwind label %lpad76 + +invcont30: ; preds = %bb29 + call void @llvm.dbg.stoppoint(i32 601, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdE3fftERKS0_(%"struct.polynomial >"* noalias sret %dft2, %"struct.polynomial"* %a2) + to label %invcont31 unwind label %lpad80 + +invcont31: ; preds = %invcont30 + call void @llvm.dbg.stoppoint(i32 604, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %13 = call i32 @_ZNK10polynomialIdE6degreeEv(%"struct.polynomial"* %a1) nounwind ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 606, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + br label %bb33 + +bb32: ; preds = %bb33 + call void @llvm.dbg.stoppoint(i32 607, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %14 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %dft2, i32 %k15.0) nounwind ; <%"struct.std::complex"*> [#uses=1] + %15 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %dft1, i32 %k15.0) nounwind ; <%"struct.std::complex"*> [#uses=1] + %16 = call %"struct.std::complex"* @_ZNSt7complexIdEmLIdEERS0_RKS_IT_E(%"struct.std::complex"* %15, %"struct.std::complex"* %14) nounwind ; <%"struct.std::complex"*> [#uses=0] + call void @llvm.dbg.stoppoint(i32 606, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %17 = add i32 %k15.0, 1 ; [#uses=1] + br label %bb33 + +bb33: ; preds = %bb32, %invcont31 + %k15.0 = phi i32 [ 0, %invcont31 ], [ %17, %bb32 ] ; [#uses=4] + call void @llvm.dbg.stoppoint(i32 606, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %18 = icmp ult i32 %k15.0, %13 ; [#uses=1] + br i1 %18, label %bb32, label %bb34 + +bb34: ; preds = %bb33 + call void @llvm.dbg.stoppoint(i32 610, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdE11inverse_fftERKS_ISt7complexIdEE(%"struct.polynomial >"* noalias sret %0, %"struct.polynomial >"* %dft1) + to label %invcont35 unwind label %lpad84 + +invcont35: ; preds = %bb34 + call void @llvm.dbg.stoppoint(i32 610, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %19 = invoke %"struct.polynomial >"* @_ZN10polynomialISt7complexIdEEaSERKS2_(%"struct.polynomial >"* %dft2, %"struct.polynomial >"* %0) + to label %invcont36 unwind label %lpad88 ; <%"struct.polynomial >"*> [#uses=0] + +invcont36: ; preds = %invcont35 + call void @llvm.dbg.stoppoint(i32 610, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %0) + to label %bb43 unwind label %lpad84 + +bb43: ; preds = %invcont36 + call void @llvm.dbg.stoppoint(i32 613, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %20 = add i32 %13, -1 ; [#uses=2] + call void @llvm.dbg.stoppoint(i32 614, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdEC1Ej(%"struct.polynomial"* %agg.result, i32 %20) + to label %bb46 unwind label %lpad84 + +bb45: ; preds = %bb46 + call void @llvm.dbg.stoppoint(i32 617, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %21 = call double* @_ZN10polynomialIdEixEj(%"struct.polynomial"* %agg.result, i32 %k.0) nounwind ; [#uses=1] + %22 = call %"struct.std::complex"* @_ZN10polynomialISt7complexIdEEixEj(%"struct.polynomial >"* %dft2, i32 %k.0) nounwind ; <%"struct.std::complex"*> [#uses=1] + %23 = call double* @_ZNSt7complexIdE4realEv(%"struct.std::complex"* %22) nounwind ; [#uses=1] + %24 = load double* %23, align 8 ; [#uses=1] + store double %24, double* %21, align 8 + call void @llvm.dbg.stoppoint(i32 616, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %25 = add i32 %k.0, 1 ; [#uses=1] + br label %bb46 + +bb46: ; preds = %bb45, %bb43 + %k.0 = phi i32 [ %25, %bb45 ], [ 0, %bb43 ] ; [#uses=4] + call void @llvm.dbg.stoppoint(i32 616, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + %26 = icmp ult i32 %k.0, %20 ; [#uses=1] + br i1 %26, label %bb45, label %bb47 + +bb47: ; preds = %bb46 + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %dft2) + to label %bb54 unwind label %lpad80 + +bb54: ; preds = %bb47 + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %dft1) + to label %bb61 unwind label %lpad76 + +bb61: ; preds = %bb54 + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %a2) + to label %bb68 unwind label %lpad + +bb68: ; preds = %bb61 + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %a1) + call void @llvm.dbg.region.end(%0* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram1785 to %0*)) + ret void + +lpad: ; preds = %bb61, %entry + %eh_ptr = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select75 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + br label %ppad + +lpad76: ; preds = %bb54, %bb29, %invcont27, %bb26, %invcont24, %bb + %eh_ptr77 = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select79 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr77, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + br label %ppad112 + +lpad80: ; preds = %bb47, %invcont30 + %eh_ptr81 = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select83 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr81, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + br label %ppad113 + +lpad84: ; preds = %bb43, %invcont36, %bb34 + %eh_ptr85 = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select87 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr85, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + br label %ppad114 + +lpad88: ; preds = %invcont35 + %eh_ptr89 = call i8* @llvm.eh.exception() ; [#uses=2] + %eh_select91 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr89, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 610, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %0) + to label %ppad114 unwind label %lpad92 + +lpad92: ; preds = %lpad88 + %eh_ptr93 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select95 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr93, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 610, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +lpad96: ; preds = %ppad114 + %eh_ptr97 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select99 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr97, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +lpad100: ; preds = %ppad113 + %eh_ptr101 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select103 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr101, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +lpad104: ; preds = %ppad112 + %eh_ptr105 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select107 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr105, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +lpad108: ; preds = %ppad + %eh_ptr109 = call i8* @llvm.eh.exception() ; [#uses=1] + %eh_select111 = call i32 (i8*, i8*, ...)* @llvm.eh.selector.i32(i8* %eh_ptr109, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 1) ; [#uses=0] + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + call void @_ZSt9terminatev() noreturn nounwind + unreachable + +ppad: ; preds = %ppad112, %lpad + %eh_exception.3 = phi i8* [ %eh_ptr, %lpad ], [ %eh_exception.2, %ppad112 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %a1) + to label %Unwind unwind label %lpad108 + +ppad112: ; preds = %ppad113, %lpad76 + %eh_exception.2 = phi i8* [ %eh_ptr77, %lpad76 ], [ %eh_exception.1, %ppad113 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialIdED1Ev(%"struct.polynomial"* %a2) + to label %ppad unwind label %lpad104 + +ppad113: ; preds = %ppad114, %lpad80 + %eh_exception.1 = phi i8* [ %eh_ptr81, %lpad80 ], [ %eh_exception.0, %ppad114 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %dft1) + to label %ppad112 unwind label %lpad100 + +ppad114: ; preds = %lpad88, %lpad84 + %eh_exception.0 = phi i8* [ %eh_ptr85, %lpad84 ], [ %eh_ptr89, %lpad88 ] ; [#uses=1] + call void @llvm.dbg.stoppoint(i32 620, i32 0, %0* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to %0*)) + invoke void @_ZN10polynomialISt7complexIdEED1Ev(%"struct.polynomial >"* %dft2) + to label %ppad113 unwind label %lpad96 + +Unwind: ; preds = %ppad + call void @_Unwind_Resume(i8* %eh_exception.3) + unreachable +} + +declare i32 @strcmp(i8* nocapture, i8* nocapture) nounwind readonly + +declare %"struct.std::basic_ostream >"* @_ZNSolsEd(%"struct.std::basic_ostream >"*, double) + +declare %"struct.std::basic_ostream >"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"struct.std::basic_ostream >"*, i8*) + +declare %"struct.std::basic_ostream >"* @_ZNSo5flushEv(%"struct.std::basic_ostream >"*) + +declare extern_weak i32 @pthread_once(i32*, void ()*) + +declare extern_weak i8* @pthread_getspecific(i32) + +declare extern_weak i32 @pthread_setspecific(i32, i8*) + +declare extern_weak i32 @pthread_create(i32*, %struct.pthread_attr_t*, i8* (i8*)*, i8*) + +declare extern_weak i32 @pthread_cancel(i32) + +declare extern_weak i32 @pthread_mutex_lock(%struct.pthread_mutex_t*) + +declare extern_weak i32 @pthread_mutex_trylock(%struct.pthread_mutex_t*) + +declare extern_weak i32 @pthread_mutex_unlock(%struct.pthread_mutex_t*) + +declare extern_weak i32 @pthread_mutex_init(%struct.pthread_mutex_t*, %struct..0._50*) + +declare extern_weak i32 @pthread_key_create(i32*, void (i8*)*) + +declare extern_weak i32 @pthread_key_delete(i32) + +declare extern_weak i32 @pthread_mutexattr_init(%struct..0._50*) + +declare extern_weak i32 @pthread_mutexattr_settype(%struct..0._50*, i32) + +declare extern_weak i32 @pthread_mutexattr_destroy(%struct..0._50*) + +declare i32 @memcmp(i8* nocapture, i8* nocapture, i32) nounwind readonly From baldrick at free.fr Tue Mar 17 13:18:46 2009 From: baldrick at free.fr (Duncan Sands) Date: Tue, 17 Mar 2009 19:18:46 +0100 Subject: [llvm-commits] [llvm] r66976 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/split-eh-lpad-edges.ll In-Reply-To: <71169C44-EE22-4514-BE6B-088598194AE3@apple.com> References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <200903160839.48588.baldrick@free.fr> <71169C44-EE22-4514-BE6B-088598194AE3@apple.com> Message-ID: <200903171918.46443.baldrick@free.fr> Hi Evan, > Also, I really want to know where the above mentioned copy copies > from. But I haven't found the time to look at it. it seems that this comes from the way the selection DAG is built: the EH_LABEL and the copying out of the invoke result are both operands of a TokenFactor. As such, neither is required to come before the other and in this example it seems the EH_LABEL was output first: 0x2e49f60: i32,ch = call 0x2e4a058, 0x2e27778 0x2e26c08: 0x2e49d70: i32 = Register #1027 0x2e49f60: 0x2e4a248: ch = CopyToReg 0x2e26c08, 0x2e49d70, 0x2e49f60 0x2e49f60: 0x2e49e68: ch = eh_label 0x2e49f60:1 0x2e272a0: ch = TokenFactor 0x2e4a248, 0x2e49e68 ... becomes ... CALLpcrel32 , %EAX, %ECX, %EDX, %FP0, %FP1, %FP2, %FP3, %FP4, %FP5, %FP6, %ST0, %MM0, %MM1, %MM2, %MM3, %MM4, %MM5, %MM6, %MM7, %XMM0, %XMM1, %XMM2, %XMM3, %XMM4, %XMM5, %XMM6, %XMM7, %XMM8, %XMM9, %XMM10, %XMM11, %XMM12, %XMM13, %XMM14, %XMM15, %EFLAGS, %ESP ADJCALLSTACKUP32 0, 0, %ESP, %EFLAGS, %ESP %reg1033 = MOV32rr %EAX EH_LABEL 4 %reg1027 = MOV32rr %reg1033 The code that constructs the EH_LABEL that precedes the invoke call makes sure that any loads or stores are flushed before the EH_LABEL: (void)getRoot(); DAG.setRoot(DAG.getLabel(ISD::EH_LABEL, getCurDebugLoc(), getControlRoot(), BeginLabel)); However no such precautions are taken for the EH_LABEL coming after the call. That makes sense, because it doesn't matter where the final label is as long as it is after the call itself (which is enforced by having the label use the chain produced by the call). So I don't think anything is wrong here. Ciao, Duncan. From baldrick at free.fr Wed Mar 18 03:50:45 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 09:50:45 +0100 Subject: [llvm-commits] =?iso-8859-1?q?=5Bllvm=5D_r66976_-_in_/llvm/trunk?= =?iso-8859-1?q?=3A_lib/CodeGen/PHIElimination=2Ecpp=09lib/Transforms/Scal?= =?iso-8859-1?q?ar/CodeGenPrepare=2Ecpp_test/CodeGen/X86/2009-03-13-PHIEli?= =?iso-8859-1?q?mBug=2Ell_test/CodeGen/X86/split-eh-lpad-edges=2Ell?= In-Reply-To: <41C9A61B-5737-4C1E-8008-64A3FEBFBC4D@apple.com> References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <41C9A61B-5737-4C1E-8008-64A3FEBFBC4D@apple.com> Message-ID: <200903180950.46179.baldrick@free.fr> Hi Evan, > The copies are inserted by sdisel for liveout invoke return values. > Your fix is doing the right thing now. What are the other issues? it looks like the other Ada ACATS failures are due to sroa changes which occurred about the same time as your exception handling patch, and have nothing to do with eh. So hopefully eh is fine now! Ciao, Duncan. From baldrick at free.fr Wed Mar 18 03:57:33 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 09:57:33 +0100 Subject: [llvm-commits] [llvm] r67180 - in /llvm/trunk: lib/Transforms/Utils/Local.cpp test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll In-Reply-To: <200903180756.n2I7uFwe025145@zion.cs.uiuc.edu> References: <200903180756.n2I7uFwe025145@zion.cs.uiuc.edu> Message-ID: <200903180957.33600.baldrick@free.fr> Hi, > Fix a bug. > If I->use_empty(), this method should return false. why is returning "true" in this case a problem? "Fix a bug" isn't very descriptive :) Ciao, Duncan. From baldrick at free.fr Wed Mar 18 04:11:30 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 10:11:30 +0100 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> References: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> Message-ID: <200903181011.30938.baldrick@free.fr> Hi Chris, > + if (InvokeInst *II = dyn_cast(Call)) > + InsertPt = II->getNormalDest()->begin(); mightn't this result in inserting the instructions before a phi node? Ciao, Duncan. From zhousheng00 at gmail.com Wed Mar 18 04:21:52 2009 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Wed, 18 Mar 2009 17:21:52 +0800 Subject: [llvm-commits] [llvm] r67180 - in /llvm/trunk: lib/Transforms/Utils/Local.cpp test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll In-Reply-To: <200903180957.33600.baldrick@free.fr> References: <200903180756.n2I7uFwe025145@zion.cs.uiuc.edu> <200903180957.33600.baldrick@free.fr> Message-ID: <8abe0dc60903180221m557bdb71hc5b86e8556fb0fd5@mail.gmail.com> Sorry for the unclear comments -:) This method "OnlyUsedByDbgInfoIntrinsics()" is used by pass scalarrepl, and if it returns true, the pass scalarrepl would delete the instructions that only used by dbginfo. However, we should consider one corner situation: if the instruction visited has no users, for example, storing some value to memory, it should return false, otherwise, pass scalarrepl would incorrectly delete that store instruction which is dangerous. Sheng. 2009/3/18 Duncan Sands > Hi, > > > Fix a bug. > > If I->use_empty(), this method should return false. > > why is returning "true" in this case a problem? > "Fix a bug" isn't very descriptive :) > > Ciao, > > Duncan. > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/5fee0b97/attachment.html From baldrick at free.fr Wed Mar 18 04:35:30 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 10:35:30 +0100 Subject: [llvm-commits] [llvm] r67180 - in /llvm/trunk: lib/Transforms/Utils/Local.cpp test/Transforms/ScalarRepl/2009-03-17-CleanUp.ll In-Reply-To: <8abe0dc60903180221m557bdb71hc5b86e8556fb0fd5@mail.gmail.com> References: <200903180756.n2I7uFwe025145@zion.cs.uiuc.edu> <200903180957.33600.baldrick@free.fr> <8abe0dc60903180221m557bdb71hc5b86e8556fb0fd5@mail.gmail.com> Message-ID: <200903181035.30644.baldrick@free.fr> Hi Zhou, > Sorry for the unclear comments -:) > > This method "OnlyUsedByDbgInfoIntrinsics()" is used by pass scalarrepl, and > if it returns true, > the pass scalarrepl would delete the instructions that only used by dbginfo. > > However, we should consider one corner situation: if the instruction > visited has no users, for example, storing some value to memory, it should > return false, otherwise, pass scalarrepl would incorrectly delete that store > instruction which is dangerous. what if the instruction writes to memory and has users, and those users are only dbginfo intrinsics? For example, it might be a call instruction that modifies memory. Then it will still be (wrongly) deleted. Maybe this case is impossible (I don't know what kinds of things can be used by dbginfo intrinsics), but I still think the logic of your change is wrong: it seems to me that OnlyUsedByDbgInfoIntrinsics should mean "if it wasn't for debug intrinsics, this instruction would have no uses". Then any transformations based on it had better be correct for instructions with no uses. It seems logical to me that it should return "true" when there are no uses. If some user of OnlyUsedByDbgInfoIntrinsics has logic that would be wrong when there are no uses, it's likely to be wrong when there are only debug uses too. Anyway, I think this should be fixed in scalarrepl, not in OnlyUsedByDbgInfoIntrinsics. Ciao, Duncan. From rafael.espindola at gmail.com Wed Mar 18 04:38:29 2009 From: rafael.espindola at gmail.com (Rafael Espindola) Date: Wed, 18 Mar 2009 09:38:29 -0000 Subject: [llvm-commits] [llvm] r67191 - /llvm/trunk/test/CodeGen/X86/20090313-signext.ll Message-ID: <200903180938.n2I9cTcL002056@zion.cs.uiuc.edu> Author: rafael Date: Wed Mar 18 04:38:28 2009 New Revision: 67191 URL: http://llvm.org/viewvc/llvm-project?rev=67191&view=rev Log: Add -relocation-model=pic so that the test works both in Linux and Darwin. Modified: llvm/trunk/test/CodeGen/X86/20090313-signext.ll Modified: llvm/trunk/test/CodeGen/X86/20090313-signext.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/20090313-signext.ll?rev=67191&r1=67190&r2=67191&view=diff ============================================================================== --- llvm/trunk/test/CodeGen/X86/20090313-signext.ll (original) +++ llvm/trunk/test/CodeGen/X86/20090313-signext.ll Wed Mar 18 04:38:28 2009 @@ -1,6 +1,6 @@ -; RUN: llvm-as < %s | llc -march=x86-64 -mtriple=x86_64-pc-linux > %t +; RUN: llvm-as < %s | llc -march=x86-64 -relocation-model=pic > %t ; RUN: grep {movswl %ax, %edi} %t -; RUN: grep {movw x(%rip), %ax} %t +; RUN: grep {movw (%rax), %ax} %t @x = common global i16 0 From espindola at google.com Wed Mar 18 04:38:49 2009 From: espindola at google.com (Rafael Espindola) Date: Wed, 18 Mar 2009 09:38:49 +0000 Subject: [llvm-commits] [llvm] r67132 - in /llvm/trunk: lib/CodeGen/SelectionDAG/ test/CodeGen/CellSPU/ test/CodeGen/X86/ In-Reply-To: <16e5fdf90903171713v44bb3e66gd818c3b8990bf86e@mail.gmail.com> References: <200903172344.n2HNi000002199@zion.cs.uiuc.edu> <16e5fdf90903171713v44bb3e66gd818c3b8990bf86e@mail.gmail.com> Message-ID: <38a0d8450903180238v7edb581w60a68674b2e3e81d@mail.gmail.com> 2009/3/18 Bill Wendling : > Rafael, > > Your testcase here is failing on Darwin. Could you investigate please? > > Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/dg.exp > ... > FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/20090313-signext.ll > Failed with exit(1) at line 3 > while running: grep {movw ? ? ? x(%rip), %ax} 20090313-signext.ll.tmp > child process exited abnormally The problem was Darwin using -relocation-model=pic. I added that to the command line so that we get similar results for Linux and Darwin. > > -bw Cheers, -- Rafael Avila de Espindola Google | Gordon House | Barrow Street | Dublin 4 | Ireland Registered in Dublin, Ireland | Registration Number: 368047 From zhousheng00 at gmail.com Wed Mar 18 05:13:26 2009 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Wed, 18 Mar 2009 10:13:26 -0000 Subject: [llvm-commits] [llvm] r67194 - in /llvm/trunk/lib/Transforms: Scalar/ScalarReplAggregates.cpp Utils/Local.cpp Message-ID: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> Author: sheng Date: Wed Mar 18 05:13:08 2009 New Revision: 67194 URL: http://llvm.org/viewvc/llvm-project?rev=67194&view=rev Log: Revert my previous change on Local.cpp, instead, fix the bug on scalarrepl. If the instruction has no users, it is also not only used by debug info and should not be deleted. Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp llvm/trunk/lib/Transforms/Utils/Local.cpp Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=67194&r1=67193&r2=67194&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Mar 18 05:13:08 2009 @@ -1223,7 +1223,7 @@ CleanupGEP(GEPI); else if (Instruction *I = dyn_cast(U)) { SmallVector DbgInUses; - if (OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { + if (!I->use_empty() && OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { // Safe to remove debug info uses. while (!DbgInUses.empty()) { DbgInfoIntrinsic *DI = DbgInUses.back(); DbgInUses.pop_back(); Modified: llvm/trunk/lib/Transforms/Utils/Local.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Local.cpp?rev=67194&r1=67193&r2=67194&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/Local.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/Local.cpp Wed Mar 18 05:13:08 2009 @@ -262,9 +262,6 @@ if (DbgInUses) DbgInUses->clear(); - if (I->use_empty()) - return false; - for (Value::use_iterator UI = I->use_begin(), UE = I->use_end(); UI != UE; ++UI) { if (DbgInfoIntrinsic *DI = dyn_cast(*UI)) { From baldrick at free.fr Wed Mar 18 05:28:08 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 11:28:08 +0100 Subject: [llvm-commits] [llvm] r67194 - in /llvm/trunk/lib/Transforms: Scalar/ScalarReplAggregates.cpp Utils/Local.cpp In-Reply-To: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> References: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> Message-ID: <200903181128.09206.baldrick@free.fr> Hi, > else if (Instruction *I = dyn_cast(U)) { > SmallVector DbgInUses; > - if (OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { > + if (!I->use_empty() && OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { > // Safe to remove debug info uses. > while (!DbgInUses.empty()) { > DbgInfoIntrinsic *DI = DbgInUses.back(); DbgInUses.pop_back(); why is it safe to delete the instruction itself (done just below)? Does being used by debug intrinsics imply that the instruction cannot write memory? Ciao, Duncan. From zhousheng00 at gmail.com Wed Mar 18 06:20:04 2009 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Wed, 18 Mar 2009 19:20:04 +0800 Subject: [llvm-commits] [llvm] r67194 - in /llvm/trunk/lib/Transforms: Scalar/ScalarReplAggregates.cpp Utils/Local.cpp In-Reply-To: <200903181128.09206.baldrick@free.fr> References: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> <200903181128.09206.baldrick@free.fr> Message-ID: <8abe0dc60903180420j60ac80d9l98d5f7fdaeeab9c5@mail.gmail.com> Hi?? 2009/3/18 Duncan Sands > Hi, > > > else if (Instruction *I = dyn_cast(U)) { > > SmallVector DbgInUses; > > - if (OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { > > + if (!I->use_empty() && OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) > { > > // Safe to remove debug info uses. > > while (!DbgInUses.empty()) { > > DbgInfoIntrinsic *DI = DbgInUses.back(); DbgInUses.pop_back(); > > why is it safe to delete the instruction itself (done just below)? > Does being used by debug intrinsics imply that the instruction cannot > write memory? I'm not sure if an instruction only used by debug info will write memory. But in this case, as the instruction "I" is just an allocaInst, so, I think it is safe to delete. > > > Ciao, > > Duncan. > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/9d726b8f/attachment.html From zhousheng00 at gmail.com Wed Mar 18 06:23:10 2009 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Wed, 18 Mar 2009 19:23:10 +0800 Subject: [llvm-commits] [llvm] r67194 - in /llvm/trunk/lib/Transforms: Scalar/ScalarReplAggregates.cpp Utils/Local.cpp In-Reply-To: <8abe0dc60903180420j60ac80d9l98d5f7fdaeeab9c5@mail.gmail.com> References: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> <200903181128.09206.baldrick@free.fr> <8abe0dc60903180420j60ac80d9l98d5f7fdaeeab9c5@mail.gmail.com> Message-ID: <8abe0dc60903180423i767fa1c7j4b02f9b17065cc95@mail.gmail.com> 2009/3/18 Zhou Sheng > Hi?? > > 2009/3/18 Duncan Sands > > Hi, >> >> > else if (Instruction *I = dyn_cast(U)) { >> > SmallVector DbgInUses; >> > - if (OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { >> > + if (!I->use_empty() && OnlyUsedByDbgInfoIntrinsics(I, >> &DbgInUses)) { >> > // Safe to remove debug info uses. >> > while (!DbgInUses.empty()) { >> > DbgInfoIntrinsic *DI = DbgInUses.back(); >> DbgInUses.pop_back(); >> >> why is it safe to delete the instruction itself (done just below)? >> Does being used by debug intrinsics imply that the instruction cannot >> write memory? > > I'm not sure if an instruction only used by debug info will write memory. > But in this case, as the instruction "I" is just an allocaInst, so, I think > it is safe to delete. > Sorry, please forget my previous comments. I'm just got confused. > > > >> >> >> Ciao, >> >> Duncan. >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/84e38899/attachment.html From baldrick at free.fr Wed Mar 18 06:29:14 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 12:29:14 +0100 Subject: [llvm-commits] [llvm] r67194 - in /llvm/trunk/lib/Transforms: Scalar/ScalarReplAggregates.cpp Utils/Local.cpp In-Reply-To: <8abe0dc60903180420j60ac80d9l98d5f7fdaeeab9c5@mail.gmail.com> References: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> <200903181128.09206.baldrick@free.fr> <8abe0dc60903180420j60ac80d9l98d5f7fdaeeab9c5@mail.gmail.com> Message-ID: <200903181229.14448.baldrick@free.fr> Hi, > > why is it safe to delete the instruction itself (done just below)? > > Does being used by debug intrinsics imply that the instruction cannot > > write memory? > > I'm not sure if an instruction only used by debug info will write memory. > But in this case, as the instruction "I" is just an allocaInst, so, I think > it is safe to delete. "I" is not the AllocaInst, it is the user of the alloca (the alloca called AI). If it was the alloca inst there would never have been a problem with your testcase in the first place... Ciao, Duncan. From zhousheng00 at gmail.com Wed Mar 18 06:31:35 2009 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Wed, 18 Mar 2009 19:31:35 +0800 Subject: [llvm-commits] [llvm] r67194 - in /llvm/trunk/lib/Transforms: Scalar/ScalarReplAggregates.cpp Utils/Local.cpp In-Reply-To: <8abe0dc60903180423i767fa1c7j4b02f9b17065cc95@mail.gmail.com> References: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> <200903181128.09206.baldrick@free.fr> <8abe0dc60903180420j60ac80d9l98d5f7fdaeeab9c5@mail.gmail.com> <8abe0dc60903180423i767fa1c7j4b02f9b17065cc95@mail.gmail.com> Message-ID: <8abe0dc60903180431j771b477cgefc49487e13442a9@mail.gmail.com> 2009/3/18 Zhou Sheng > > > 2009/3/18 Zhou Sheng > > Hi?? >> >> 2009/3/18 Duncan Sands >> >> Hi, >>> >>> > else if (Instruction *I = dyn_cast(U)) { >>> > SmallVector DbgInUses; >>> > - if (OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { >>> > + if (!I->use_empty() && OnlyUsedByDbgInfoIntrinsics(I, >>> &DbgInUses)) { >>> > // Safe to remove debug info uses. >>> > while (!DbgInUses.empty()) { >>> > DbgInfoIntrinsic *DI = DbgInUses.back(); >>> DbgInUses.pop_back(); >>> >>> why is it safe to delete the instruction itself (done just below)? >>> Does being used by debug intrinsics imply that the instruction cannot >>> write memory? >> >> I'm not sure if an instruction only used by debug info will write memory. >> But in this case, as the instruction "I" is just an allocaInst, so, I >> think it is safe to delete. >> > > Sorry, please forget my previous comments. I'm just got confused. > The safety is checked by previous code of scalarrepl (function isSafeUseOfAllocation), the instruction "I" can be only load, store, bitcast or getelementptr, so, here it is save to delete if it only used by debug info. > > >> >> >>> >>> >>> Ciao, >>> >>> Duncan. >>> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/fc87a8bd/attachment.html From baldrick at free.fr Wed Mar 18 06:42:57 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 12:42:57 +0100 Subject: [llvm-commits] [llvm] r67194 - in /llvm/trunk/lib/Transforms: Scalar/ScalarReplAggregates.cpp Utils/Local.cpp In-Reply-To: <8abe0dc60903180431j771b477cgefc49487e13442a9@mail.gmail.com> References: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> <8abe0dc60903180423i767fa1c7j4b02f9b17065cc95@mail.gmail.com> <8abe0dc60903180431j771b477cgefc49487e13442a9@mail.gmail.com> Message-ID: <200903181242.57715.baldrick@free.fr> Hi, > The safety is checked by previous code of scalarrepl (function > isSafeUseOfAllocation), the instruction "I" can be only load, store, > bitcast or getelementptr, so, here it is save to delete if it only used by > debug info. I see, thanks for the explanation. In that case I think it would be better to explicitly check for the Store case. With your change loads with no uses are no longer removed for example. Ciao, Duncan. From zhousheng00 at gmail.com Wed Mar 18 07:48:56 2009 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Wed, 18 Mar 2009 12:48:56 -0000 Subject: [llvm-commits] [llvm] r67202 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Message-ID: <200903181248.n2ICmuRW008600@zion.cs.uiuc.edu> Author: sheng Date: Wed Mar 18 07:48:48 2009 New Revision: 67202 URL: http://llvm.org/viewvc/llvm-project?rev=67202&view=rev Log: Explicitly check for StoreInst, do not lose the chance to delete unused loads or bitcasts. Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Modified: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp?rev=67202&r1=67201&r2=67202&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp Wed Mar 18 07:48:48 2009 @@ -1223,7 +1223,7 @@ CleanupGEP(GEPI); else if (Instruction *I = dyn_cast(U)) { SmallVector DbgInUses; - if (!I->use_empty() && OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { + if (!isa(I) && OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { // Safe to remove debug info uses. while (!DbgInUses.empty()) { DbgInfoIntrinsic *DI = DbgInUses.back(); DbgInUses.pop_back(); From zhousheng00 at gmail.com Wed Mar 18 07:49:08 2009 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Wed, 18 Mar 2009 20:49:08 +0800 Subject: [llvm-commits] [llvm] r67194 - in /llvm/trunk/lib/Transforms: Scalar/ScalarReplAggregates.cpp Utils/Local.cpp In-Reply-To: <200903181242.57715.baldrick@free.fr> References: <200903181013.n2IADSr8003173@zion.cs.uiuc.edu> <8abe0dc60903180423i767fa1c7j4b02f9b17065cc95@mail.gmail.com> <8abe0dc60903180431j771b477cgefc49487e13442a9@mail.gmail.com> <200903181242.57715.baldrick@free.fr> Message-ID: <8abe0dc60903180549v30df6d19m22027760045ca663@mail.gmail.com> 2009/3/18 Duncan Sands > Hi, > > > The safety is checked by previous code of scalarrepl (function > > isSafeUseOfAllocation), the instruction "I" can be only load, store, > > bitcast or getelementptr, so, here it is save to delete if it only used > by > > debug info. > > I see, thanks for the explanation. In that case I think it would be better > to explicitly check for the Store case. With your change loads with no > uses > are no longer removed for example. You are right. Done. > > > Ciao, > > Duncan. > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/36521a9b/attachment.html From baldrick at free.fr Wed Mar 18 08:02:24 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 14:02:24 +0100 Subject: [llvm-commits] [llvm] r67202 - /llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp In-Reply-To: <200903181248.n2ICmuRW008600@zion.cs.uiuc.edu> References: <200903181248.n2ICmuRW008600@zion.cs.uiuc.edu> Message-ID: <200903181402.24793.baldrick@free.fr> Hi, > @@ -1223,7 +1223,7 @@ > CleanupGEP(GEPI); > else if (Instruction *I = dyn_cast(U)) { > SmallVector DbgInUses; > - if (!I->use_empty() && OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { > + if (!isa(I) && OnlyUsedByDbgInfoIntrinsics(I, &DbgInUses)) { > // Safe to remove debug info uses. > while (!DbgInUses.empty()) { > DbgInfoIntrinsic *DI = DbgInUses.back(); DbgInUses.pop_back(); maybe the store can be removed if it is only storing to the alloca (rather than storing the alloca somewhere) - not sure. Also, looking at the code it sounds like other parts of sroa have expectations about what cleanups are performed, so not cleaning up stores may apriori cause problems. Finally, if removing the store is a problem, that suggests to me that the alloca shouldn't have been promoted in the first place. I think Chris is the guy to answer these kinds of worries. Ciao, Duncan. From mrs at apple.com Wed Mar 18 08:21:10 2009 From: mrs at apple.com (Mike Stump) Date: Wed, 18 Mar 2009 06:21:10 -0700 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> Message-ID: <5D5C9955-4ACC-4354-B684-1356680BBEF4@apple.com> On Mar 17, 2009, at 7:17 PM, Chris Lattner wrote: > Why does "call " imply that the address is in the > text segment? I don't believe it does. However, all executable code is known to be in the first 2GB, and I think the point was that call would use a label associated with executable code. From edwintorok at gmail.com Wed Mar 18 08:45:23 2009 From: edwintorok at gmail.com (=?ISO-8859-1?Q?T=F6r=F6k_Edwin?=) Date: Wed, 18 Mar 2009 15:45:23 +0200 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: <5D5C9955-4ACC-4354-B684-1356680BBEF4@apple.com> References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> <5D5C9955-4ACC-4354-B684-1356680BBEF4@apple.com> Message-ID: <49C0FAF3.1090501@gmail.com> On 2009-03-18 15:21, Mike Stump wrote: > On Mar 17, 2009, at 7:17 PM, Chris Lattner wrote: > >> Why does "call " imply that the address is in the >> text segment? >> > > I don't believe it does. However, all executable code is known to be > in the first 2GB, and I think the point was that call would use a > label associated with executable code. libraries are loaded above 2GB here (Debian Linux 2.6.28.7), here is a sample /proc/self/maps: 00400000-0040d000 r-xp 00000000 09:03 130344 /bin/cat 0060d000-0060e000 rw-p 0000d000 09:03 130344 /bin/cat 01d8f000-01db0000 rw-p 01d8f000 00:00 0 [heap] 7fa877213000-7fa87735c000 r-xp 00000000 09:03 262077 /lib/libc-2.9.so 7fa87735c000-7fa87755c000 ---p 00149000 09:03 262077 /lib/libc-2.9.so 7fa87755c000-7fa877560000 r--p 00149000 09:03 262077 /lib/libc-2.9.so 7fa877560000-7fa877561000 rw-p 0014d000 09:03 262077 /lib/libc-2.9.so 7fa877561000-7fa877566000 rw-p 7fa877561000 00:00 0 7fa877566000-7fa877583000 r-xp 00000000 09:03 262076 /lib/ld-2.9.so 7fa877618000-7fa87775b000 r--p 00000000 fd:00 3841 /usr/lib/locale/locale-archive 7fa87775b000-7fa87775d000 rw-p 7fa87775b000 00:00 0 7fa87777f000-7fa877782000 rw-p 7fa87777f000 00:00 0 7fa877782000-7fa877783000 r--p 0001c000 09:03 262076 /lib/ld-2.9.so 7fa877783000-7fa877784000 rw-p 0001d000 09:03 262076 /lib/ld-2.9.so 7fff7f76f000-7fff7f784000 rw-p 7ffffffea000 00:00 0 [stack] 7fff7f7ff000-7fff7f800000 r-xp 7fff7f7ff000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] According to the gcc docs the small code model is the default. Maybe I am missing something, but how can this work, even for gcc? Or does the linker do the neccessary adjustments to the code here? Also code for -mcmodel=kernel will surely not be in first 2Gb. Best regards, --Edwin From mrs at apple.com Wed Mar 18 09:34:47 2009 From: mrs at apple.com (Mike Stump) Date: Wed, 18 Mar 2009 07:34:47 -0700 Subject: [llvm-commits] [llvm] r67142 - in /llvm/trunk: lib/Target/X86/X86Instr64bit.td test/CodeGen/X86/call-imm.ll In-Reply-To: <49C0FAF3.1090501@gmail.com> References: <200903180043.n2I0hrSY004537@zion.cs.uiuc.edu> <5A910003-BF08-43AE-8115-E9EA053B4DCF@apple.com> <5D5C9955-4ACC-4354-B684-1356680BBEF4@apple.com> <49C0FAF3.1090501@gmail.com> Message-ID: On Mar 18, 2009, at 6:45 AM, T?r?k Edwin wrote: > libraries are loaded above 2GB here (Debian Linux 2.6.28.7), here is a > sample /proc/self/maps: > According to the gcc docs the small code model is the default. > Maybe I am missing something, but how can this work, even for gcc? Magic. If you want to see how it works on your system, compile hello world and see what it does. :-) On our system the linker knows how to insert jumps to jumps and the like to make it work. http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachOTopics/1-Articles/x86_64_code.html > Or does the linker do the neccessary adjustments to the code here? :-) > Also code for -mcmodel=kernel will surely not be in first 2Gb. Yes, it is in the last 2GB of the address space. Doesn't change anything. From brukman+llvm at gmail.com Wed Mar 18 10:57:08 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Wed, 18 Mar 2009 15:57:08 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67208 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Message-ID: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> Author: brukman Date: Wed Mar 18 10:57:08 2009 New Revision: 67208 URL: http://llvm.org/viewvc/llvm-project?rev=67208&view=rev Log: For non-MachO targets, #define MACHO_DYNAMIC_NO_PIC_P 0 . Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=67208&r1=67207&r2=67208&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Wed Mar 18 10:57:08 2009 @@ -30,6 +30,7 @@ /* Overridden by arm/darwin.h, whether it is included first or not. */ #ifndef TARGET_MACHO #define TARGET_MACHO 0 +#define MACHO_DYNAMIC_NO_PIC_P 0 #endif /* APPLE LOCAL end ARM darwin target */ From sabre at nondot.org Wed Mar 18 11:23:56 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 18 Mar 2009 16:23:56 -0000 Subject: [llvm-commits] [llvm] r67210 - /llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Message-ID: <200903181623.n2IGNuJm016982@zion.cs.uiuc.edu> Author: lattner Date: Wed Mar 18 11:23:56 2009 New Revision: 67210 URL: http://llvm.org/viewvc/llvm-project?rev=67210&view=rev Log: add an assertion to make it clear that PHI nodes are not allowed. Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=67210&r1=67209&r2=67210&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Wed Mar 18 11:23:56 2009 @@ -802,8 +802,11 @@ "Return type changed, but not into a void. The old return type" " must have been a struct!"); Instruction *InsertPt = Call; - if (InvokeInst *II = dyn_cast(Call)) + if (InvokeInst *II = dyn_cast(Call)) { InsertPt = II->getNormalDest()->begin(); + assert(!isa(InsertPt) && + "Can't have a use of the invoke value if the edge is critical"); + } // We used to return a struct. Instead of doing smart stuff with all the // uses of this struct, we will just rebuild it using From clattner at apple.com Wed Mar 18 11:26:34 2009 From: clattner at apple.com (Chris Lattner) Date: Wed, 18 Mar 2009 09:26:34 -0700 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: <200903181011.30938.baldrick@free.fr> References: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> <200903181011.30938.baldrick@free.fr> Message-ID: <8AEF3734-6B75-43AE-904A-4B052BC42D25@apple.com> On Mar 18, 2009, at 2:11 AM, Duncan Sands wrote: > Hi Chris, > >> + if (InvokeInst *II = dyn_cast(Call)) >> + InsertPt = II->getNormalDest()->begin(); > > mightn't this result in inserting the instructions before a > phi node? I initially thought so, but no, they aren't allowed here. Consider this testcase: define internal { i32, i32 } @foo() { ret {i32,i32} {i32 42, i32 4} } define i32 @bar2() { br i1 1, label %T, label %T3 T3: %x = invoke {i32,i32} @foo() to label %T unwind label %T2 T: %PN = phi i32 [0, %0], [42, %T3] %y = extractvalue {i32,i32} %x, 1 ret i32 %y T2: unreachable } This isn't accepted by the verifier because there is no way to use %x if it is defined on a critical edge. If the invoke is directly used by a PHI, as in: define i32 @bar2() { br i1 1, label %T, label %T3 T3: %x = invoke {i32,i32} @foo() to label %T unwind label %T2 T: %PN = phi {i32,i32} [zeroinitializer, %0], [%x, %T3] %y = extractvalue {i32,i32} %PN, 1 ret i32 %y T2: unreachable } Then DAE won't hack on it. -Chris From sabre at nondot.org Wed Mar 18 11:32:19 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 18 Mar 2009 16:32:19 -0000 Subject: [llvm-commits] [llvm] r67211 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/2009-03-18-vector-ashr-crash.ll Message-ID: <200903181632.n2IGWKel017394@zion.cs.uiuc.edu> Author: lattner Date: Wed Mar 18 11:32:19 2009 New Revision: 67211 URL: http://llvm.org/viewvc/llvm-project?rev=67211&view=rev Log: Fix PR3826 - InstComb assert with vector shift, by not calling ComputeNumSignBits on a vector. Added: llvm/trunk/test/Transforms/InstCombine/2009-03-18-vector-ashr-crash.ll Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=67211&r1=67210&r2=67211&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Wed Mar 18 11:32:19 2009 @@ -7029,15 +7029,16 @@ return ReplaceInstUsesWith(I, CSI); // See if we can turn a signed shr into an unsigned shr. - if (!isa(I.getType()) && - MaskedValueIsZero(Op0, + if (!isa(I.getType())) { + if (MaskedValueIsZero(Op0, APInt::getSignBit(I.getType()->getPrimitiveSizeInBits()))) - return BinaryOperator::CreateLShr(Op0, I.getOperand(1)); + return BinaryOperator::CreateLShr(Op0, I.getOperand(1)); - // Arithmetic shifting an all-sign-bit value is a no-op. - unsigned NumSignBits = ComputeNumSignBits(Op0); - if (NumSignBits == Op0->getType()->getPrimitiveSizeInBits()) - return ReplaceInstUsesWith(I, Op0); + // Arithmetic shifting an all-sign-bit value is a no-op. + unsigned NumSignBits = ComputeNumSignBits(Op0); + if (NumSignBits == Op0->getType()->getPrimitiveSizeInBits()) + return ReplaceInstUsesWith(I, Op0); + } return 0; } Added: llvm/trunk/test/Transforms/InstCombine/2009-03-18-vector-ashr-crash.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2009-03-18-vector-ashr-crash.ll?rev=67211&view=auto ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/2009-03-18-vector-ashr-crash.ll (added) +++ llvm/trunk/test/Transforms/InstCombine/2009-03-18-vector-ashr-crash.ll Wed Mar 18 11:32:19 2009 @@ -0,0 +1,11 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis +; PR3826 + +define void @0(<4 x i16>*, <4 x i16>*) { + %3 = alloca <4 x i16>* ; <<4 x i16>**> [#uses=1] + %4 = load <4 x i16>* null, align 1 ; <<4 x i16>> [#uses=1] + %5 = ashr <4 x i16> %4, ; <<4 x i16>> [#uses=1] + %6 = load <4 x i16>** %3 ; <<4 x i16>*> [#uses=1] + store <4 x i16> %5, <4 x i16>* %6, align 1 + ret void +} From baldrick at free.fr Wed Mar 18 11:45:20 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 17:45:20 +0100 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: <8AEF3734-6B75-43AE-904A-4B052BC42D25@apple.com> References: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> <200903181011.30938.baldrick@free.fr> <8AEF3734-6B75-43AE-904A-4B052BC42D25@apple.com> Message-ID: <200903181745.21423.baldrick@free.fr> Dear Chris, > >> + if (InvokeInst *II = dyn_cast(Call)) > >> + InsertPt = II->getNormalDest()->begin(); > > > > mightn't this result in inserting the instructions before a > > phi node? > > I initially thought so, but no, they aren't allowed here. Consider > this testcase: you are so innocent! define internal { i32, i32 } @foo() { ret {i32,i32} {i32 42, i32 4} } define i32 @bar2() { entry: %x = invoke {i32,i32} @foo() to label %T unwind label %T2 T: %PN = phi i32 [0, %entry] %y = extractvalue {i32,i32} %x, 1 ret i32 %y T2: unreachable } With best wishes, Dr Evil. From sabre at nondot.org Wed Mar 18 11:48:46 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 18 Mar 2009 16:48:46 -0000 Subject: [llvm-commits] [llvm] r67212 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Message-ID: <200903181648.n2IGmkJa018023@zion.cs.uiuc.edu> Author: lattner Date: Wed Mar 18 11:48:45 2009 New Revision: 67212 URL: http://llvm.org/viewvc/llvm-project?rev=67212&view=rev Log: aha, DAE does have to think about PHI nodes. Many thanks to "Dr Evil" (aka Duncan) for pointing this out :) Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=67212&r1=67211&r2=67212&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Wed Mar 18 11:48:45 2009 @@ -803,9 +803,9 @@ " must have been a struct!"); Instruction *InsertPt = Call; if (InvokeInst *II = dyn_cast(Call)) { - InsertPt = II->getNormalDest()->begin(); - assert(!isa(InsertPt) && - "Can't have a use of the invoke value if the edge is critical"); + BasicBlock::iterator IP = II->getNormalDest()->begin(); + while (isa(IP)) ++IP; + InsertPt = IP; } // We used to return a struct. Instead of doing smart stuff with all the Modified: llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll?rev=67212&r1=67211&r2=67212&view=diff ============================================================================== --- llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll (original) +++ llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Wed Mar 18 11:48:45 2009 @@ -13,3 +13,14 @@ T2: unreachable } + +define i32 @bar2() { +entry: + %x = invoke {i32,i32} @foo() to label %T unwind label %T2 +T: + %PN = phi i32 [0, %entry] + %y = extractvalue {i32,i32} %x, 1 + ret i32 %y +T2: + unreachable +} \ No newline at end of file From clattner at apple.com Wed Mar 18 11:56:57 2009 From: clattner at apple.com (Chris Lattner) Date: Wed, 18 Mar 2009 09:56:57 -0700 Subject: [llvm-commits] [llvm] r66976 - in /llvm/trunk: lib/CodeGen/PHIElimination.cpp lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/2009-03-13-PHIElimBug.ll test/CodeGen/X86/split-eh-lpad-edges.ll In-Reply-To: <200903180950.46179.baldrick@free.fr> References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <41C9A61B-5737-4C1E-8008-64A3FEBFBC4D@apple.com> <200903180950.46179.baldrick@free.fr> Message-ID: <295E6D57-8C1C-4AF3-9C7E-4353DA791E46@apple.com> On Mar 18, 2009, at 1:50 AM, Duncan Sands wrote: > Hi Evan, > >> The copies are inserted by sdisel for liveout invoke return values. >> Your fix is doing the right thing now. What are the other issues? > > it looks like the other Ada ACATS failures are due to sroa changes > which occurred about the same time as your exception handling patch, > and have nothing to do with eh. So hopefully eh is fine now! Interesting, please file a bug when you have a testcase, I'll take a look. Thanks Duncan! -Chris From clattner at apple.com Wed Mar 18 11:58:03 2009 From: clattner at apple.com (Chris Lattner) Date: Wed, 18 Mar 2009 09:58:03 -0700 Subject: [llvm-commits] [llvm] r66827 - /llvm/trunk/include/llvm/Support/raw_ostream.h In-Reply-To: References: <200903122202.n2CM2kKb018031@zion.cs.uiuc.edu> <39A2A5FE-B36E-4526-8588-97CA50A71553@apple.com> <6a8523d60903161903v193b4f65lfff442742de940a4@mail.gmail.com> <2ED081ED-31F2-4D6C-9BD2-7FCDC6A160FB@apple.com> Message-ID: <96C8D73F-4FAD-498F-A7CD-758443191BB0@apple.com> Ok, thanks again for tackling this! On Mar 18, 2009, at 12:45 AM, Daniel Dunbar wrote: > No, it still holds (as much as it ever did); I think the buffer size > can be as low as 4, I believe the only place that relies on this is > the fast path for small strings in write(). > > - Daniel > > On Mar 17, 2009, at 8:31 PM, Chris Lattner wrote: > >> >> On Mar 16, 2009, at 7:03 PM, Daniel Dunbar wrote: >> >>> This should be addressed. Look better? >> >> Looks great! Should the assert in SetBufferSize be removed? >> >> -Chris >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/d8e3a018/attachment.html From baldrick at free.fr Wed Mar 18 12:14:59 2009 From: baldrick at free.fr (Duncan Sands) Date: Wed, 18 Mar 2009 18:14:59 +0100 Subject: [llvm-commits] =?iso-8859-1?q?=5Bllvm=5D_r66976_-_in_/llvm/trunk?= =?iso-8859-1?q?=3A_lib/CodeGen/PHIElimination=2Ecpp=09lib/Transforms/Scal?= =?iso-8859-1?q?ar/CodeGenPrepare=2Ecpp_test/CodeGen/X86/2009-03-13-PHIEli?= =?iso-8859-1?q?mBug=2Ell_test/CodeGen/X86/split-eh-lpad-edges=2Ell?= In-Reply-To: <295E6D57-8C1C-4AF3-9C7E-4353DA791E46@apple.com> References: <200903132259.n2DMxEH4018573@zion.cs.uiuc.edu> <200903180950.46179.baldrick@free.fr> <295E6D57-8C1C-4AF3-9C7E-4353DA791E46@apple.com> Message-ID: <200903181814.59385.baldrick@free.fr> Hi Chris, > > it looks like the other Ada ACATS failures are due to sroa changes > > which occurred about the same time as your exception handling patch, > > and have nothing to do with eh. So hopefully eh is fine now! > > Interesting, please file a bug when you have a testcase, I'll take a > look. Thanks Duncan! it seems to be a bug in APFloat, see PR3834. I guess your recent sroa work results in more x86_fp80 to i80 bit conversions, which tickles this bug. Ciao, Duncan. From isanbard at gmail.com Wed Mar 18 12:45:12 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 17:45:12 -0000 Subject: [llvm-commits] [llvm] r67215 - in /llvm/trunk/test: FrontendC++/2009-02-16-CtorNames-dbg.cpp FrontendC++/2009-03-17-dbg.cpp FrontendC/2009-03-13-dbg.c Message-ID: <200903181745.n2IHjCiA020536@zion.cs.uiuc.edu> Author: void Date: Wed Mar 18 12:45:11 2009 New Revision: 67215 URL: http://llvm.org/viewvc/llvm-project?rev=67215&view=rev Log: These tests are now passing on Darwin because of r67139. Modified: llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp llvm/trunk/test/FrontendC/2009-03-13-dbg.c Modified: llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC%2B%2B/2009-02-16-CtorNames-dbg.cpp?rev=67215&r1=67214&r2=67215&view=diff ============================================================================== --- llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp (original) +++ llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp Wed Mar 18 12:45:11 2009 @@ -1,5 +1,4 @@ // RUN: %llvmgcc -S -g --emit-llvm %s -o - | grep "\~A" -// XFAIL: darwin class A { int i; public: Modified: llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC%2B%2B/2009-03-17-dbg.cpp?rev=67215&r1=67214&r2=67215&view=diff ============================================================================== --- llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp (original) +++ llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp Wed Mar 18 12:45:11 2009 @@ -1,4 +1,5 @@ // RUN: %llvmgxx -c -emit-llvm %s -o /dev/null -g +// XTARGET: darwin // XFAIL: * template inline void f(const T1&,const T2&) { } Modified: llvm/trunk/test/FrontendC/2009-03-13-dbg.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC/2009-03-13-dbg.c?rev=67215&r1=67214&r2=67215&view=diff ============================================================================== --- llvm/trunk/test/FrontendC/2009-03-13-dbg.c (original) +++ llvm/trunk/test/FrontendC/2009-03-13-dbg.c Wed Mar 18 12:45:11 2009 @@ -1,4 +1,5 @@ // RUN: %llvmgcc %s -c -g -o /dev/null +// XTARGET: darwin // XFAIL: * void foo() {} From isanbard at gmail.com Wed Mar 18 12:46:31 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 10:46:31 -0700 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> References: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> Message-ID: <16e5fdf90903181046q5c9009fby8e8cabbec2a0df06@mail.gmail.com> Chris, These were causing XPASSes (on Darwin) in these tests: Sending test/FrontendC/2009-03-13-dbg.c Sending test/FrontendC++/2009-02-16-CtorNames-dbg.cpp Sending test/FrontendC++/2009-03-17-dbg.cpp Is this expected? I modified them to make them passing. Please check to see if that's correct. Thanks! -bw On Tue, Mar 17, 2009 at 5:31 PM, Chris Lattner wrote: > Author: lattner > Date: Tue Mar 17 19:31:45 2009 > New Revision: 67139 > > URL: http://llvm.org/viewvc/llvm-project?rev=67139&view=rev > Log: > Fix PR3807 by inserting 'insertelement' instructions in the normal dest of > an invoke instead of after the invoke (in its block), which is invalid. > > Added: > ? ?llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll > Modified: > ? ?llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp > > Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=67139&r1=67138&r2=67139&view=diff > > ============================================================================== > --- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp (original) > +++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Tue Mar 17 19:31:45 2009 > @@ -798,9 +798,13 @@ > ? ? ? ? // Replace by null for now. > ? ? ? ? Call->replaceAllUsesWith(Constant::getNullValue(Call->getType())); > ? ? ? } else { > - ? ? ? ?assert(isa(RetTy) && "Return type changed, but not into a" > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "void. The old return type must have" > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "been a struct!"); > + ? ? ? ?assert(isa(RetTy) && > + ? ? ? ? ? ? ? "Return type changed, but not into a void. The old return type" > + ? ? ? ? ? ? ? " must have been a struct!"); > + ? ? ? ?Instruction *InsertPt = Call; > + ? ? ? ?if (InvokeInst *II = dyn_cast(Call)) > + ? ? ? ? ?InsertPt = II->getNormalDest()->begin(); > + > ? ? ? ? // We used to return a struct. Instead of doing smart stuff with all the > ? ? ? ? // uses of this struct, we will just rebuild it using > ? ? ? ? // extract/insertvalue chaining and let instcombine clean that up. > @@ -813,12 +817,13 @@ > ? ? ? ? ? ? if (RetTypes.size() > 1) > ? ? ? ? ? ? ? // We are still returning a struct, so extract the value from our > ? ? ? ? ? ? ? // return value > - ? ? ? ? ? ? ?V = ExtractValueInst::Create(New, NewRetIdxs[i], "newret", Call); > + ? ? ? ? ? ? ?V = ExtractValueInst::Create(New, NewRetIdxs[i], "newret", > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? InsertPt); > ? ? ? ? ? ? else > ? ? ? ? ? ? ? // We are now returning a single element, so just insert that > ? ? ? ? ? ? ? V = New; > ? ? ? ? ? ? // Insert the value at the old position > - ? ? ? ? ? ?RetVal = InsertValueInst::Create(RetVal, V, i, "oldret", Call); > + ? ? ? ? ? ?RetVal = InsertValueInst::Create(RetVal, V, i, "oldret", InsertPt); > ? ? ? ? ? } > ? ? ? ? // Now, replace all uses of the old call instruction with the return > ? ? ? ? // struct we built > > Added: llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll?rev=67139&view=auto > > ============================================================================== > --- llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll (added) > +++ llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll Tue Mar 17 19:31:45 2009 > @@ -0,0 +1,15 @@ > +; RUN: llvm-as < %s | opt -deadargelim | llvm-dis > +; PR3807 > + > +define internal { i32, i32 } @foo() { > + ?ret {i32,i32} {i32 42, i32 4} > +} > + > +define i32 @bar() { > + ?%x = invoke {i32,i32} @foo() to label %T unwind label %T2 > +T: > + ?%y = extractvalue {i32,i32} %x, 1 > + ?ret i32 %y > +T2: > + ?unreachable > +} > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From isanbard at gmail.com Wed Mar 18 12:50:12 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 10:50:12 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r67208 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h In-Reply-To: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> References: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> Message-ID: <16e5fdf90903181050n2b4dc2efi53da37b94d38748d@mail.gmail.com> On Wed, Mar 18, 2009 at 8:57 AM, Misha Brukman wrote: > Author: brukman > Date: Wed Mar 18 10:57:08 2009 > New Revision: 67208 > > URL: http://llvm.org/viewvc/llvm-project?rev=67208&view=rev > Log: > For non-MachO targets, #define MACHO_DYNAMIC_NO_PIC_P 0 . > > Modified: > ? ?llvm-gcc-4.2/trunk/gcc/config/arm/arm.h > > Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h > URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=67208&r1=67207&r2=67208&view=diff > > ============================================================================== > --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original) > +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Wed Mar 18 10:57:08 2009 > @@ -30,6 +30,7 @@ > ?/* Overridden by arm/darwin.h, whether it is included first or not. */ > ?#ifndef TARGET_MACHO > ?#define TARGET_MACHO 0 > +#define MACHO_DYNAMIC_NO_PIC_P 0 LLVM LOCAL markers, please! Otherwise, this will be deleted in the next merge. -bw > ?#endif > ?/* APPLE LOCAL end ARM darwin target */ > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From isanbard at gmail.com Wed Mar 18 12:53:00 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 10:53:00 -0700 Subject: [llvm-commits] [llvm] r67132 - in /llvm/trunk: lib/CodeGen/SelectionDAG/ test/CodeGen/CellSPU/ test/CodeGen/X86/ In-Reply-To: <38a0d8450903180238v7edb581w60a68674b2e3e81d@mail.gmail.com> References: <200903172344.n2HNi000002199@zion.cs.uiuc.edu> <16e5fdf90903171713v44bb3e66gd818c3b8990bf86e@mail.gmail.com> <38a0d8450903180238v7edb581w60a68674b2e3e81d@mail.gmail.com> Message-ID: <16e5fdf90903181053u6e6f7ac8r263610f84ae4d286@mail.gmail.com> On Wed, Mar 18, 2009 at 2:38 AM, Rafael Espindola wrote: > 2009/3/18 Bill Wendling : >> Rafael, >> >> Your testcase here is failing on Darwin. Could you investigate please? >> >> Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/dg.exp >> ... >> FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/CodeGen/X86/20090313-signext.ll >> Failed with exit(1) at line 3 >> while running: grep {movw ? ? ? x(%rip), %ax} 20090313-signext.ll.tmp >> child process exited abnormally > > The problem was Darwin using -relocation-model=pic. I added that to the command > line so that we get similar results for Linux and Darwin. > Thanks! -bw From fvbommel at wxs.nl Wed Mar 18 12:14:09 2009 From: fvbommel at wxs.nl (Frits van Bommel) Date: Wed, 18 Mar 2009 18:14:09 +0100 Subject: [llvm-commits] [llvm] r67212 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: <200903181648.n2IGmkJa018023@zion.cs.uiuc.edu> References: <200903181648.n2IGmkJa018023@zion.cs.uiuc.edu> Message-ID: <49C12BE1.40104@wxs.nl> Chris Lattner wrote: > aha, DAE does have to think about PHI nodes. Many thanks to "Dr Evil" (aka Duncan) > for pointing this out :) > - InsertPt = II->getNormalDest()->begin(); > - assert(!isa(InsertPt) && > - "Can't have a use of the invoke value if the edge is critical"); > + BasicBlock::iterator IP = II->getNormalDest()->begin(); > + while (isa(IP)) ++IP; > + InsertPt = IP; What about the even *more* evil case of the phi being a user of the invoke? :) From clattner at apple.com Wed Mar 18 13:21:36 2009 From: clattner at apple.com (Chris Lattner) Date: Wed, 18 Mar 2009 11:21:36 -0700 Subject: [llvm-commits] [llvm] r67212 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: <49C12BE1.40104@wxs.nl> References: <200903181648.n2IGmkJa018023@zion.cs.uiuc.edu> <49C12BE1.40104@wxs.nl> Message-ID: On Mar 18, 2009, at 10:14 AM, Frits van Bommel wrote: > Chris Lattner wrote: >> aha, DAE does have to think about PHI nodes. Many thanks to "Dr >> Evil" (aka Duncan) >> for pointing this out :) > >> - InsertPt = II->getNormalDest()->begin(); >> - assert(!isa(InsertPt) && >> - "Can't have a use of the invoke value if the edge >> is critical"); >> + BasicBlock::iterator IP = II->getNormalDest()->begin(); >> + while (isa(IP)) ++IP; >> + InsertPt = IP; > > What about the even *more* evil case of the phi being a user of the > invoke? :) As discussed previously, DAE won't transform the invoke in that case. -Chris From clattner at apple.com Wed Mar 18 13:22:16 2009 From: clattner at apple.com (Chris Lattner) Date: Wed, 18 Mar 2009 11:22:16 -0700 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: <16e5fdf90903181046q5c9009fby8e8cabbec2a0df06@mail.gmail.com> References: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> <16e5fdf90903181046q5c9009fby8e8cabbec2a0df06@mail.gmail.com> Message-ID: On Mar 18, 2009, at 10:46 AM, Bill Wendling wrote: > Chris, > > These were causing XPASSes (on Darwin) in these tests: > > Sending test/FrontendC/2009-03-13-dbg.c > Sending test/FrontendC++/2009-02-16-CtorNames-dbg.cpp > Sending test/FrontendC++/2009-03-17-dbg.cpp > > Is this expected? I modified them to make them passing. Please check > to see if that's correct. Are you sure? I can't imagine how these would be related. -Chris > > > Thanks! > -bw > > On Tue, Mar 17, 2009 at 5:31 PM, Chris Lattner > wrote: >> Author: lattner >> Date: Tue Mar 17 19:31:45 2009 >> New Revision: 67139 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=67139&view=rev >> Log: >> Fix PR3807 by inserting 'insertelement' instructions in the normal >> dest of >> an invoke instead of after the invoke (in its block), which is >> invalid. >> >> Added: >> llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll >> Modified: >> llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp >> >> Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=67139&r1=67138&r2=67139&view=diff >> >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp >> (original) >> +++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Tue >> Mar 17 19:31:45 2009 >> @@ -798,9 +798,13 @@ >> // Replace by null for now. >> Call->replaceAllUsesWith(Constant::getNullValue(Call- >> >getType())); >> } else { >> - assert(isa(RetTy) && "Return type changed, but >> not into a" >> - "void. The old return >> type must have" >> - "been a struct!"); >> + assert(isa(RetTy) && >> + "Return type changed, but not into a void. The old >> return type" >> + " must have been a struct!"); >> + Instruction *InsertPt = Call; >> + if (InvokeInst *II = dyn_cast(Call)) >> + InsertPt = II->getNormalDest()->begin(); >> + >> // We used to return a struct. Instead of doing smart stuff >> with all the >> // uses of this struct, we will just rebuild it using >> // extract/insertvalue chaining and let instcombine clean >> that up. >> @@ -813,12 +817,13 @@ >> if (RetTypes.size() > 1) >> // We are still returning a struct, so extract the >> value from our >> // return value >> - V = ExtractValueInst::Create(New, NewRetIdxs[i], >> "newret", Call); >> + V = ExtractValueInst::Create(New, NewRetIdxs[i], >> "newret", >> + InsertPt); >> else >> // We are now returning a single element, so just >> insert that >> V = New; >> // Insert the value at the old position >> - RetVal = InsertValueInst::Create(RetVal, V, i, >> "oldret", Call); >> + RetVal = InsertValueInst::Create(RetVal, V, i, >> "oldret", InsertPt); >> } >> // Now, replace all uses of the old call instruction with >> the return >> // struct we built >> >> Added: llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE- >> Invoke.ll >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll?rev=67139&view=auto >> >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll >> (added) >> +++ llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll >> Tue Mar 17 19:31:45 2009 >> @@ -0,0 +1,15 @@ >> +; RUN: llvm-as < %s | opt -deadargelim | llvm-dis >> +; PR3807 >> + >> +define internal { i32, i32 } @foo() { >> + ret {i32,i32} {i32 42, i32 4} >> +} >> + >> +define i32 @bar() { >> + %x = invoke {i32,i32} @foo() to label %T unwind label %T2 >> +T: >> + %y = extractvalue {i32,i32} %x, 1 >> + ret i32 %y >> +T2: >> + unreachable >> +} >> >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From isanbard at gmail.com Wed Mar 18 13:26:55 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 11:26:55 -0700 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: References: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> <16e5fdf90903181046q5c9009fby8e8cabbec2a0df06@mail.gmail.com> Message-ID: <16e5fdf90903181126i605be1a1s218301d92c83be8b@mail.gmail.com> On Wed, Mar 18, 2009 at 11:22 AM, Chris Lattner wrote: > > On Mar 18, 2009, at 10:46 AM, Bill Wendling wrote: > >> Chris, >> >> These were causing XPASSes (on Darwin) in these tests: >> >> Sending ? ? ? ?test/FrontendC/2009-03-13-dbg.c >> Sending ? ? ? ?test/FrontendC++/2009-02-16-CtorNames-dbg.cpp >> Sending ? ? ? ?test/FrontendC++/2009-03-17-dbg.cpp >> >> Is this expected? I modified them to make them passing. Please check >> to see if that's correct. > > Are you sure? ?I can't imagine how these would be related. > Buildbot has them passing right after your patch: http://blamebot.apple.com:80/waterfall The debug info stuff is in flux. Maybe they have weird dependencies. Devang & Dale, do you know how these could be affected by Chris's r67139 patch? -bw From dalej at apple.com Wed Mar 18 13:45:17 2009 From: dalej at apple.com (Dale Johannesen) Date: Wed, 18 Mar 2009 11:45:17 -0700 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: <16e5fdf90903181126i605be1a1s218301d92c83be8b@mail.gmail.com> References: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> <16e5fdf90903181046q5c9009fby8e8cabbec2a0df06@mail.gmail.com> <16e5fdf90903181126i605be1a1s218301d92c83be8b@mail.gmail.com> Message-ID: \On Mar 18, 2009, at 11:26 AMPDT, Bill Wendling wrote: > On Wed, Mar 18, 2009 at 11:22 AM, Chris Lattner > wrote: >> On Mar 18, 2009, at 10:46 AM, Bill Wendling wrote: >> >>> Chris, >>> >>> These were causing XPASSes (on Darwin) in these tests: >>> >>> Sending test/FrontendC/2009-03-13-dbg.c >>> Sending test/FrontendC++/2009-02-16-CtorNames-dbg.cpp >>> Sending test/FrontendC++/2009-03-17-dbg.cpp >>> >>> Is this expected? I modified them to make them passing. Please check >>> to see if that's correct. >> >> Are you sure? I can't imagine how these would be related. >> > Buildbot has them passing right after your patch: > > http://blamebot.apple.com:80/waterfall Hey, that's a nice display, but you gotta read it... > The debug info stuff is in flux. Maybe they have weird dependencies. > > Devang & Dale, do you know how these could be affected by Chris's > r67139 patch? Looks to me like they passed until Evan reverted Devang's debug info patches last night, in 67141, and simultaneously (from the buildbot's point of view) XFAILed the tests in 67143. I'm not sure why they didn't start failing, which is what I'd expect, but I don't think it's anything to do with Chris's patches. From brukman at gmail.com Wed Mar 18 13:50:59 2009 From: brukman at gmail.com (Misha Brukman) Date: Wed, 18 Mar 2009 14:50:59 -0400 Subject: [llvm-commits] [llvm-gcc-4.2] r67208 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h In-Reply-To: <16e5fdf90903181050n2b4dc2efi53da37b94d38748d@mail.gmail.com> References: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> <16e5fdf90903181050n2b4dc2efi53da37b94d38748d@mail.gmail.com> Message-ID: On Wed, Mar 18, 2009 at 1:50 PM, Bill Wendling wrote: > On Wed, Mar 18, 2009 at 8:57 AM, Misha Brukman > > wrote: > > Author: brukman > > Date: Wed Mar 18 10:57:08 2009 > > New Revision: 67208 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=67208&view=rev > > Log: > > For non-MachO targets, #define MACHO_DYNAMIC_NO_PIC_P 0 . > > > > Modified: > > llvm-gcc-4.2/trunk/gcc/config/arm/arm.h > > > > Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h > > URL: > http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=67208&r1=67207&r2=67208&view=diff > > > > > ============================================================================== > > --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original) > > +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Wed Mar 18 10:57:08 2009 > > @@ -30,6 +30,7 @@ > > /* Overridden by arm/darwin.h, whether it is included first or not. */ > > #ifndef TARGET_MACHO > > #define TARGET_MACHO 0 > > +#define MACHO_DYNAMIC_NO_PIC_P 0 > > LLVM LOCAL markers, please! Otherwise, this will be deleted in the next > merge. I guess I'm a bit confused on the various markers: if APPLE LOCAL marks what's in Apple's trees, but not in FSF GCC, then does LLVM LOCAL mark what's in public LLVM SVN tree, but not in Apple's or FSF GCC? Can these markers be nested? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/a713847f/attachment.html From dpatel at apple.com Wed Mar 18 13:53:14 2009 From: dpatel at apple.com (Devang Patel) Date: Wed, 18 Mar 2009 11:53:14 -0700 Subject: [llvm-commits] [llvm] r67215 - in /llvm/trunk/test: FrontendC++/2009-02-16-CtorNames-dbg.cpp FrontendC++/2009-03-17-dbg.cpp FrontendC/2009-03-13-dbg.c In-Reply-To: <200903181745.n2IHjCiA020536@zion.cs.uiuc.edu> References: <200903181745.n2IHjCiA020536@zion.cs.uiuc.edu> Message-ID: On Mar 18, 2009, at 10:45 AM, Bill Wendling wrote: > Author: void > Date: Wed Mar 18 12:45:11 2009 > New Revision: 67215 > > URL: http://llvm.org/viewvc/llvm-project?rev=67215&view=rev > Log: > These tests are now passing on Darwin because of r67139. > > Modified: > llvm/trunk/test/FrontendC++/2009-02-16-CtorNames-dbg.cpp This test should pass. > llvm/trunk/test/FrontendC++/2009-03-17-dbg.cpp > llvm/trunk/test/FrontendC/2009-03-13-dbg.c These two test checks crashes caused by first patch in the series of 3 patches reverted by Evan yesterday. So, these two tests should also pass all the time. Thanks, - Devang From isanbard at gmail.com Wed Mar 18 13:53:54 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 11:53:54 -0700 Subject: [llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll In-Reply-To: References: <200903180031.n2I0Vj5m004060@zion.cs.uiuc.edu> <16e5fdf90903181046q5c9009fby8e8cabbec2a0df06@mail.gmail.com> <16e5fdf90903181126i605be1a1s218301d92c83be8b@mail.gmail.com> Message-ID: <16e5fdf90903181153y251a41b4ga0babf452a5ce98d@mail.gmail.com> On Wed, Mar 18, 2009 at 11:45 AM, Dale Johannesen wrote: > \On Mar 18, 2009, at 11:26 AMPDT, Bill Wendling wrote: >> >> On Wed, Mar 18, 2009 at 11:22 AM, Chris Lattner >> wrote: >>> >>> On Mar 18, 2009, at 10:46 AM, Bill Wendling wrote: >>> >>>> Chris, >>>> >>>> These were causing XPASSes (on Darwin) in these tests: >>>> >>>> Sending ? ? ? ?test/FrontendC/2009-03-13-dbg.c >>>> Sending ? ? ? ?test/FrontendC++/2009-02-16-CtorNames-dbg.cpp >>>> Sending ? ? ? ?test/FrontendC++/2009-03-17-dbg.cpp >>>> >>>> Is this expected? I modified them to make them passing. Please check >>>> to see if that's correct. >>> >>> Are you sure? ?I can't imagine how these would be related. >>> >> Buildbot has them passing right after your patch: >> >> http://blamebot.apple.com:80/waterfall > > Hey, that's a nice display, but you gotta read it... > :-) >> The debug info stuff is in flux. Maybe they have weird dependencies. >> >> Devang & Dale, do you know how these could be affected by Chris's r67139 >> patch? > > Looks to me like they passed until Evan reverted Devang's debug info patches > last night, in 67141, and simultaneously (from the buildbot's point of view) > XFAILed the tests in 67143. ?I'm not sure why they didn't start failing, > which is what I'd expect, but I don't think it's anything to do with Chris's > patches. > Okay. Let's chalk it up to weirdness in our testing then (they should have been failing in the *next* run, not this one...maybe the buildbots know the future. ;-). Once Devang's patches are re-committed, we can visit these tests then. -bw From isanbard at gmail.com Wed Mar 18 13:59:17 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 11:59:17 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r67208 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h In-Reply-To: References: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> <16e5fdf90903181050n2b4dc2efi53da37b94d38748d@mail.gmail.com> Message-ID: <16e5fdf90903181159q1b6732ebkf6fb7184d49828a4@mail.gmail.com> On Wed, Mar 18, 2009 at 11:50 AM, Misha Brukman wrote: > On Wed, Mar 18, 2009 at 1:50 PM, Bill Wendling wrote: >> >> On Wed, Mar 18, 2009 at 8:57 AM, Misha Brukman >> wrote: >> > Author: brukman >> > Date: Wed Mar 18 10:57:08 2009 >> > New Revision: 67208 >> > >> > URL: http://llvm.org/viewvc/llvm-project?rev=67208&view=rev >> > Log: >> > For non-MachO targets, #define MACHO_DYNAMIC_NO_PIC_P 0 . >> > >> > Modified: >> > ? ?llvm-gcc-4.2/trunk/gcc/config/arm/arm.h >> > >> > Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h >> > URL: >> > http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=67208&r1=67207&r2=67208&view=diff >> > >> > >> > ============================================================================== >> > --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original) >> > +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Wed Mar 18 10:57:08 2009 >> > @@ -30,6 +30,7 @@ >> > ?/* Overridden by arm/darwin.h, whether it is included first or not. */ >> > ?#ifndef TARGET_MACHO >> > ?#define TARGET_MACHO 0 >> > +#define MACHO_DYNAMIC_NO_PIC_P 0 >> >> LLVM LOCAL markers, please! Otherwise, this will be deleted in the next >> merge. > > I guess I'm a bit confused on the various markers: if APPLE LOCAL marks > what's in Apple's trees, but not in FSF GCC, then does LLVM LOCAL mark > what's in public LLVM SVN tree, but not in Apple's or FSF GCC? > > Can these markers be nested? > The LOCAL markers are confusing. Your assessment is essentially correct. There are two types of markers used: * APPLE LOCAL - These are changes that are in Apple GCC but not in FSF GCC. We merge from Apple GCC into LLVM and keep the APPLE LOCAL markers in tact. * LLVM LOCAL - These are changes that are in LLVM-GCC but not in Apple GCC. When I merge from Apple GCC, I use these markers to determine if the difference from Apple GCC should be merged over into LLVM. The markers can be nested. -bw From brukman+llvm at gmail.com Wed Mar 18 14:33:32 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Wed, 18 Mar 2009 19:33:32 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67222 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Message-ID: <200903181933.n2IJXWIh025341@zion.cs.uiuc.edu> Author: brukman Date: Wed Mar 18 14:33:31 2009 New Revision: 67222 URL: http://llvm.org/viewvc/llvm-project?rev=67222&view=rev Log: Added LLVM LOCAL markers around my last change. Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=67222&r1=67221&r2=67222&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Wed Mar 18 14:33:31 2009 @@ -30,7 +30,9 @@ /* Overridden by arm/darwin.h, whether it is included first or not. */ #ifndef TARGET_MACHO #define TARGET_MACHO 0 +/* LLVM LOCAL begin */ #define MACHO_DYNAMIC_NO_PIC_P 0 +/* LLVM LOCAL end */ #endif /* APPLE LOCAL end ARM darwin target */ From dalej at apple.com Wed Mar 18 15:25:48 2009 From: dalej at apple.com (Dale Johannesen) Date: Wed, 18 Mar 2009 13:25:48 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r67208 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h In-Reply-To: <16e5fdf90903181159q1b6732ebkf6fb7184d49828a4@mail.gmail.com> References: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> <16e5fdf90903181050n2b4dc2efi53da37b94d38748d@mail.gmail.com> <16e5fdf90903181159q1b6732ebkf6fb7184d49828a4@mail.gmail.com> Message-ID: <14DBCE86-5099-4784-AA31-06E786542C56@apple.com> On Mar 18, 2009, at 11:59 AMPDT, Bill Wendling wrote: >> I guess I'm a bit confused on the various markers: if APPLE LOCAL >> marks >> what's in Apple's trees, but not in FSF GCC, then does LLVM LOCAL >> mark >> what's in public LLVM SVN tree, but not in Apple's or FSF GCC? >> >> Can these markers be nested? >> > The LOCAL markers are confusing. Your assessment is essentially > correct. There are two types of markers used: > > * APPLE LOCAL - These are changes that are in Apple GCC but not in FSF > GCC. We merge from Apple GCC into LLVM and keep the APPLE LOCAL > markers in tact. > > * LLVM LOCAL - These are changes that are in LLVM-GCC but not in Apple > GCC. When I merge from Apple GCC, I use these markers to determine if > the difference from Apple GCC should be merged over into LLVM. > > The markers can be nested. This is fairly obvious from inspection, but: LLVM LOCAL begin and LLVM LOCAL end should be used around multi-line changes; LLVM LOCAL without begin or end means only the following line changed. Perhaps less obviously, this means deletions need to be indicated by an empty begin...end pair. (There's a script that's checks all this for the APPLE comments in the Apple gcc tree; nobody's thought it worthwhile to enhance it to understand LLVM comments. Yet.) From sabre at nondot.org Wed Mar 18 15:36:45 2009 From: sabre at nondot.org (Chris Lattner) Date: Wed, 18 Mar 2009 20:36:45 -0000 Subject: [llvm-commits] [llvm] r67232 - /llvm/trunk/utils/TableGen/TGSourceMgr.cpp Message-ID: <200903182036.n2IKajxw027911@zion.cs.uiuc.edu> Author: lattner Date: Wed Mar 18 15:36:45 2009 New Revision: 67232 URL: http://llvm.org/viewvc/llvm-project?rev=67232&view=rev Log: include the null at the end of a memorybuffer as part of the buffer. This allows tblgen to handle include "foo.td" when the quote is exactly the last character in a file. rdar://6695728 Modified: llvm/trunk/utils/TableGen/TGSourceMgr.cpp Modified: llvm/trunk/utils/TableGen/TGSourceMgr.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TGSourceMgr.cpp?rev=67232&r1=67231&r2=67232&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/TGSourceMgr.cpp (original) +++ llvm/trunk/utils/TableGen/TGSourceMgr.cpp Wed Mar 18 15:36:45 2009 @@ -28,7 +28,9 @@ int TGSourceMgr::FindBufferContainingLoc(TGLoc Loc) const { for (unsigned i = 0, e = Buffers.size(); i != e; ++i) if (Loc.getPointer() >= Buffers[i].Buffer->getBufferStart() && - Loc.getPointer() < Buffers[i].Buffer->getBufferEnd()) + // Use <= here so that a pointer to the null at the end of the buffer + // is included as part of the buffer. + Loc.getPointer() <= Buffers[i].Buffer->getBufferEnd()) return i; return -1; } From brukman+llvm at gmail.com Wed Mar 18 15:45:54 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Wed, 18 Mar 2009 20:45:54 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67234 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Message-ID: <200903182045.n2IKjsxZ028323@zion.cs.uiuc.edu> Author: brukman Date: Wed Mar 18 15:45:54 2009 New Revision: 67234 URL: http://llvm.org/viewvc/llvm-project?rev=67234&view=rev Log: Replaced LLVM LOCAL begin/end pair with a single LLVM LOCAL marker for a single-line change. Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=67234&r1=67233&r2=67234&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Wed Mar 18 15:45:54 2009 @@ -30,9 +30,8 @@ /* Overridden by arm/darwin.h, whether it is included first or not. */ #ifndef TARGET_MACHO #define TARGET_MACHO 0 -/* LLVM LOCAL begin */ +/* LLVM LOCAL */ #define MACHO_DYNAMIC_NO_PIC_P 0 -/* LLVM LOCAL end */ #endif /* APPLE LOCAL end ARM darwin target */ From kremenek at apple.com Wed Mar 18 16:16:16 2009 From: kremenek at apple.com (Ted Kremenek) Date: Wed, 18 Mar 2009 21:16:16 -0000 Subject: [llvm-commits] [llvm] r67239 - in /llvm/trunk/utils/TableGen: ClangDiagnosticsEmitter.cpp ClangDiagnosticsEmitter.h TableGen.cpp Message-ID: <200903182116.n2ILGGdN030077@zion.cs.uiuc.edu> Author: kremenek Date: Wed Mar 18 16:16:16 2009 New Revision: 67239 URL: http://llvm.org/viewvc/llvm-project?rev=67239&view=rev Log: Add another Clang TableGen-backend (-gen-clang-diags-options) for emitting declarations for controlling groups of warnings. Currently this transforms: def UnusedMacrosDiags : Option<"unused-macros", [pp_macro_not_used]>; into: static const diag::kind UnusedMacrosDiags[] = { diag::pp_macro_not_used }; Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.h llvm/trunk/utils/TableGen/TableGen.cpp Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp?rev=67239&r1=67238&r2=67239&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Wed Mar 18 16:16:16 2009 @@ -16,8 +16,16 @@ #include "llvm/Support/Debug.h" #include "llvm/Support/Streams.h" #include "llvm/ADT/VectorExtras.h" +#include "llvm/ADT/DenseSet.h" +#include +#include using namespace llvm; + +//===----------------------------------------------------------------------===// +// Generic routines for all Clang TableGen backens. +//===----------------------------------------------------------------------===// + typedef std::vector RecordVector; typedef std::vector SuperClassVector; typedef std::vector RecordValVector; @@ -54,6 +62,10 @@ OS << char(toupper(*I)); } +//===----------------------------------------------------------------------===// +// Warning Tables (.inc file) generation. +//===----------------------------------------------------------------------===// + static void ProcessDiag(std::ostream& OS, const Record* DiagClass, const Record& R) { @@ -106,3 +118,92 @@ ProcessDiag(OS, DiagClass, **I); } } + +//===----------------------------------------------------------------------===// +// Warning Group Tables generation. +//===----------------------------------------------------------------------===// + +typedef std::set DiagnosticSet; +typedef std::map OptionMap; +typedef llvm::DenseSet VisitedLists; + +static void BuildGroup(DiagnosticSet& DS, VisitedLists &Visited, const Init* X); + +static void BuildGroup(DiagnosticSet &DS, VisitedLists &Visited, + const ListInit* LV) { + + // Simple hack to prevent including a list multiple times. This may be useful + // if one declares an Option by including a bunch of other Options that + // include other Options, etc. + if (Visited.count(LV)) + return; + + Visited.insert(LV); + + // Iterate through the list and grab all DiagnosticControlled. + for (ListInit::const_iterator I = LV->begin(), E = LV->end(); I!=E; ++I) + BuildGroup(DS, Visited, *I); +} + +static void BuildGroup(DiagnosticSet& DS, VisitedLists &Visited, + const Record *Def) { + + // If an Option includes another Option, inline the Diagnostics of the + // included Option. + if (Def->isSubClassOf("Option")) { + if (const RecordVal* V = findRecordVal(*Def, "Members")) + if (const ListInit* LV = dynamic_cast(V->getValue())) + BuildGroup(DS, Visited, LV); + + return; + } + + if (Def->isSubClassOf("DiagnosticControlled")) + DS.insert(Def); +} + +static void BuildGroup(DiagnosticSet& DS, VisitedLists &Visited, + const Init* X) { + + if (const DefInit *D = dynamic_cast(X)) + BuildGroup(DS, Visited, D->getDef()); + + // We may have some other cases here in the future. +} + + +void ClangOptionsEmitter::run(std::ostream &OS) { + // Build up a map from options to controlled diagnostics. + OptionMap OM; + + const RecordVector &Opts = Records.getAllDerivedDefinitions("Option"); + for (RecordVector::const_iterator I=Opts.begin(), E=Opts.end(); I!=E; ++I) + if (const RecordVal* V = findRecordVal(**I, "Members")) + if (const ListInit* LV = dynamic_cast(V->getValue())) { + VisitedLists Visited; + BuildGroup(OM[*I], Visited, LV); + } + + // Iterate through the OptionMap and emit the declarations. + for (OptionMap::iterator I = OM.begin(), E = OM.end(); I!=E; ++I) { +// const RecordVal *V = findRecordVal(*I->first, "Name"); +// assert(V && "Options must have a 'Name' value."); +// const StringInit* SV = dynamic_cast(V->getValue()); +// assert(SV && "'Name' entry must be a string."); + + // Output the option. + OS << "static const diag::kind " << I->first->getName() << "[] = { "; + + DiagnosticSet &DS = I->second; + bool first = true; + for (DiagnosticSet::iterator I2 = DS.begin(), E2 = DS.end(); I2!=E2; ++I2) { + if (first) + first = false; + else + OS << ", "; + + OS << "diag::" << (*I2)->getName(); + } + OS << " };\n"; + } +} Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.h?rev=67239&r1=67238&r2=67239&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.h (original) +++ llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.h Wed Mar 18 16:16:16 2009 @@ -32,6 +32,15 @@ void run(std::ostream &OS); }; +class ClangOptionsEmitter : public TableGenBackend { + RecordKeeper &Records; +public: + explicit ClangOptionsEmitter(RecordKeeper &R) : Records(R) {} + + void run(std::ostream &OS); +}; + + } // End llvm namespace #endif Modified: llvm/trunk/utils/TableGen/TableGen.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TableGen.cpp?rev=67239&r1=67238&r2=67239&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/TableGen.cpp (original) +++ llvm/trunk/utils/TableGen/TableGen.cpp Wed Mar 18 16:16:16 2009 @@ -48,6 +48,7 @@ GenInstrEnums, GenInstrs, GenAsmWriter, GenCallingConv, GenClangDiagsDefs, + GenClangDiagsOptions, GenDAGISel, GenFastISel, GenSubtarget, @@ -90,6 +91,8 @@ "Generate target intrinsic information"), clEnumValN(GenClangDiagsDefs, "gen-clang-diags-defs", "Generate Clang diagnostics definitions"), + clEnumValN(GenClangDiagsOptions, "gen-clang-diags-options", + "Generate options for Clang diagnostics"), clEnumValN(GenLLVMCConf, "gen-llvmc", "Generate LLVMC configuration library"), clEnumValN(PrintEnums, "print-enums", @@ -209,6 +212,9 @@ case GenClangDiagsDefs: ClangDiagsDefsEmitter(Records, ClangComponent).run(*Out); break; + case GenClangDiagsOptions: + ClangOptionsEmitter(Records).run(*Out); + break; case GenDAGISel: DAGISelEmitter(Records).run(*Out); break; From kremenek at apple.com Wed Mar 18 16:29:01 2009 From: kremenek at apple.com (Ted Kremenek) Date: Wed, 18 Mar 2009 21:29:01 -0000 Subject: [llvm-commits] [llvm] r67242 - /llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Message-ID: <200903182129.n2ILT2jB030889@zion.cs.uiuc.edu> Author: kremenek Date: Wed Mar 18 16:28:47 2009 New Revision: 67242 URL: http://llvm.org/viewvc/llvm-project?rev=67242&view=rev Log: 'tblgen -gen-clang-diags-options' now outputs the OptionTable: static const WarningOption OptionTable[] = { {"unused-macros", DIAGS(UnusedMacrosDiags)} ... }; This table is not yet properly sorted. Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp?rev=67242&r1=67241&r2=67242&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Wed Mar 18 16:28:47 2009 @@ -186,11 +186,6 @@ // Iterate through the OptionMap and emit the declarations. for (OptionMap::iterator I = OM.begin(), E = OM.end(); I!=E; ++I) { -// const RecordVal *V = findRecordVal(*I->first, "Name"); -// assert(V && "Options must have a 'Name' value."); -// const StringInit* SV = dynamic_cast(V->getValue()); -// assert(SV && "'Name' entry must be a string."); - // Output the option. OS << "static const diag::kind " << I->first->getName() << "[] = { "; @@ -206,4 +201,23 @@ } OS << " };\n"; } + + // Now emit the OptionTable table. + OS << "\nstatic const WarningOption OptionTable[] = {"; + bool first = true; + for (OptionMap::iterator I = OM.begin(), E = OM.end(); I!=E; ++I) { + const RecordVal *V = findRecordVal(*I->first, "Name"); + assert(V && "Options must have a 'Name' value."); + const StringInit* SV = dynamic_cast(V->getValue()); + assert(SV && "'Name' entry must be a string."); + + if (first) + first = false; + else + OS << ','; + + OS << "\n {\"" << SV->getValue() + << "\", DIAGS(" << I->first->getName() << ")}"; + } + OS << "\n};\n"; } From kremenek at apple.com Wed Mar 18 16:36:49 2009 From: kremenek at apple.com (Ted Kremenek) Date: Wed, 18 Mar 2009 21:36:49 -0000 Subject: [llvm-commits] [llvm] r67244 - /llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Message-ID: <200903182136.n2ILaoNq031164@zion.cs.uiuc.edu> Author: kremenek Date: Wed Mar 18 16:36:46 2009 New Revision: 67244 URL: http://llvm.org/viewvc/llvm-project?rev=67244&view=rev Log: tblgen -gen-clang-diags-options: Output OptionTable entries in lexicographic order. Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp?rev=67244&r1=67243&r2=67244&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Wed Mar 18 16:36:46 2009 @@ -14,6 +14,7 @@ #include "ClangDiagnosticsEmitter.h" #include "Record.h" #include "llvm/Support/Debug.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/Streams.h" #include "llvm/ADT/VectorExtras.h" #include "llvm/ADT/DenseSet.h" @@ -123,8 +124,24 @@ // Warning Group Tables generation. //===----------------------------------------------------------------------===// +static const std::string &getOptName(const Record *R) { + const RecordVal *V = findRecordVal(*R, "Name"); + assert(V && "Options must have a 'Name' value."); + const StringInit* SV = dynamic_cast(V->getValue()); + assert(SV && "'Name' entry must be a string."); + return SV->getValue(); +} + +namespace { +struct VISIBILITY_HIDDEN CompareOptName { + bool operator()(const Record* A, const Record* B) { + return getOptName(A) < getOptName(B); + } +}; +} + typedef std::set DiagnosticSet; -typedef std::map OptionMap; +typedef std::map OptionMap; typedef llvm::DenseSet VisitedLists; static void BuildGroup(DiagnosticSet& DS, VisitedLists &Visited, const Init* X); @@ -206,17 +223,12 @@ OS << "\nstatic const WarningOption OptionTable[] = {"; bool first = true; for (OptionMap::iterator I = OM.begin(), E = OM.end(); I!=E; ++I) { - const RecordVal *V = findRecordVal(*I->first, "Name"); - assert(V && "Options must have a 'Name' value."); - const StringInit* SV = dynamic_cast(V->getValue()); - assert(SV && "'Name' entry must be a string."); - if (first) first = false; else OS << ','; - OS << "\n {\"" << SV->getValue() + OS << "\n {\"" << getOptName(I->first) << "\", DIAGS(" << I->first->getName() << ")}"; } OS << "\n};\n"; From kremenek at apple.com Wed Mar 18 17:13:57 2009 From: kremenek at apple.com (Ted Kremenek) Date: Wed, 18 Mar 2009 22:13:57 -0000 Subject: [llvm-commits] [llvm] r67246 - /llvm/tags/checker/checker-0.176/ Message-ID: <200903182213.n2IMDvcJ032525@zion.cs.uiuc.edu> Author: kremenek Date: Wed Mar 18 17:13:57 2009 New Revision: 67246 URL: http://llvm.org/viewvc/llvm-project?rev=67246&view=rev Log: Tagging checker-0.176. Added: llvm/tags/checker/checker-0.176/ - copied from r67245, llvm/trunk/ From brukman at gmail.com Wed Mar 18 17:38:21 2009 From: brukman at gmail.com (Misha Brukman) Date: Wed, 18 Mar 2009 18:38:21 -0400 Subject: [llvm-commits] [llvm-gcc-4.2] r67208 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h In-Reply-To: <14DBCE86-5099-4784-AA31-06E786542C56@apple.com> References: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> <16e5fdf90903181050n2b4dc2efi53da37b94d38748d@mail.gmail.com> <16e5fdf90903181159q1b6732ebkf6fb7184d49828a4@mail.gmail.com> <14DBCE86-5099-4784-AA31-06E786542C56@apple.com> Message-ID: On Wed, Mar 18, 2009 at 4:25 PM, Dale Johannesen wrote: > On Mar 18, 2009, at 11:59 AMPDT, Bill Wendling wrote: > >> I guess I'm a bit confused on the various markers: if APPLE LOCAL > >> marks > >> what's in Apple's trees, but not in FSF GCC, then does LLVM LOCAL > >> mark > >> what's in public LLVM SVN tree, but not in Apple's or FSF GCC? > >> > >> Can these markers be nested? > >> > > The LOCAL markers are confusing. Your assessment is essentially > > correct. There are two types of markers used: > > > > * APPLE LOCAL - These are changes that are in Apple GCC but not in FSF > > GCC. We merge from Apple GCC into LLVM and keep the APPLE LOCAL > > markers in tact. > > > > * LLVM LOCAL - These are changes that are in LLVM-GCC but not in Apple > > GCC. When I merge from Apple GCC, I use these markers to determine if > > the difference from Apple GCC should be merged over into LLVM. > > > > The markers can be nested. > > This is fairly obvious from inspection, but: > LLVM LOCAL begin > and > LLVM LOCAL end > should be used around multi-line changes; LLVM LOCAL without begin or > end means only the following line changed. Sorry, it wasn't obvious to me from just looking at arm.h -- I see this is used elsewhere. Fixed in SVN. > Perhaps less obviously, this means deletions need to be indicated by > an empty begin...end pair. > (There's a script that's checks all this for the APPLE comments in the > Apple gcc tree; nobody's thought it worthwhile to enhance it to > understand LLVM comments. Yet.) I slightly modified Sandeep's earlier patch and added LLVM LOCAL markers, see attached. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/4dce4c25/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: llvm-gcc-arm.patch Type: text/x-diff Size: 2096 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/4dce4c25/attachment.bin From gohman at apple.com Wed Mar 18 18:24:25 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 18 Mar 2009 23:24:25 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67255 - /llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Message-ID: <200903182324.n2INOPeX002453@zion.cs.uiuc.edu> Author: djg Date: Wed Mar 18 18:24:24 2009 New Revision: 67255 URL: http://llvm.org/viewvc/llvm-project?rev=67255&view=rev Log: Don't set the default scheduler to be the default scheduler. This is a bit subtle, but doing so prevents the -pre-RA-sched option from working. Now, it's possible to select alternate schedulers using the -mllvm -pre-RA-sched=... command-line option. 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=67255&r1=67254&r2=67255&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Wed Mar 18 18:24:24 2009 @@ -35,7 +35,6 @@ #include "llvm/Assembly/PrintModulePass.h" #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/CodeGen/RegAllocRegistry.h" -#include "llvm/CodeGen/SchedulerRegistry.h" #include "llvm/Target/SubtargetFeature.h" #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetLowering.h" @@ -441,8 +440,6 @@ TheModule->setDataLayout(TheTarget->getTargetData()-> getStringRepresentation()); - RegisterScheduler::setDefault(createDefaultScheduler); - if (optimize) RegisterRegAlloc::setDefault(createLinearScanRegisterAllocator); else From dalej at apple.com Wed Mar 18 18:46:20 2009 From: dalej at apple.com (Dale Johannesen) Date: Wed, 18 Mar 2009 16:46:20 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r67208 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h In-Reply-To: References: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> <16e5fdf90903181050n2b4dc2efi53da37b94d38748d@mail.gmail.com> <16e5fdf90903181159q1b6732ebkf6fb7184d49828a4@mail.gmail.com> <14DBCE86-5099-4784-AA31-06E786542C56@apple.com> Message-ID: <1A72AC4C-8622-4CAE-8772-CF15AACF60AB@apple.com> Still looks good, that should be Billproof. On Mar 18, 2009, at 3:38 PMPDT, Misha Brukman wrote: > On Wed, Mar 18, 2009 at 4:25 PM, Dale Johannesen > wrote: > On Mar 18, 2009, at 11:59 AMPDT, Bill Wendling wrote: > >> I guess I'm a bit confused on the various markers: if APPLE LOCAL > >> marks > >> what's in Apple's trees, but not in FSF GCC, then does LLVM LOCAL > >> mark > >> what's in public LLVM SVN tree, but not in Apple's or FSF GCC? > >> > >> Can these markers be nested? > >> > > The LOCAL markers are confusing. Your assessment is essentially > > correct. There are two types of markers used: > > > > * APPLE LOCAL - These are changes that are in Apple GCC but not in > FSF > > GCC. We merge from Apple GCC into LLVM and keep the APPLE LOCAL > > markers in tact. > > > > * LLVM LOCAL - These are changes that are in LLVM-GCC but not in > Apple > > GCC. When I merge from Apple GCC, I use these markers to determine > if > > the difference from Apple GCC should be merged over into LLVM. > > > > The markers can be nested. > > This is fairly obvious from inspection, but: > LLVM LOCAL begin > and > LLVM LOCAL end > should be used around multi-line changes; LLVM LOCAL without begin or > end means only the following line changed. > > Sorry, it wasn't obvious to me from just looking at arm.h -- I see > this is used elsewhere. Fixed in SVN. > > Perhaps less obviously, this means deletions need to be indicated by > an empty begin...end pair. > (There's a script that's checks all this for the APPLE comments in the > Apple gcc tree; nobody's thought it worthwhile to enhance it to > understand LLVM comments. Yet.) > > I slightly modified Sandeep's earlier patch and added LLVM LOCAL > markers, see attached. > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/2c5276cd/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: llvm-gcc-arm.patch Type: text/x-diff Size: 2097 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/2c5276cd/attachment.bin -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/2c5276cd/attachment-0001.html From kremenek at apple.com Wed Mar 18 18:49:45 2009 From: kremenek at apple.com (Ted Kremenek) Date: Wed, 18 Mar 2009 23:49:45 -0000 Subject: [llvm-commits] [llvm] r67261 - /llvm/tags/checker/checker-0.176/ Message-ID: <200903182349.n2INnjl9003337@zion.cs.uiuc.edu> Author: kremenek Date: Wed Mar 18 18:49:44 2009 New Revision: 67261 URL: http://llvm.org/viewvc/llvm-project?rev=67261&view=rev Log: Removing checker-0.176. Removed: llvm/tags/checker/checker-0.176/ From kremenek at apple.com Wed Mar 18 18:50:43 2009 From: kremenek at apple.com (Ted Kremenek) Date: Wed, 18 Mar 2009 23:50:43 -0000 Subject: [llvm-commits] [llvm] r67263 - /llvm/tags/checker/checker-0.176/ Message-ID: <200903182350.n2INohpY003394@zion.cs.uiuc.edu> Author: kremenek Date: Wed Mar 18 18:50:42 2009 New Revision: 67263 URL: http://llvm.org/viewvc/llvm-project?rev=67263&view=rev Log: Tagging checker-0.176. Added: llvm/tags/checker/checker-0.176/ - copied from r67262, llvm/trunk/ From bruno.cardoso at gmail.com Wed Mar 18 19:28:48 2009 From: bruno.cardoso at gmail.com (Bruno Cardoso Lopes) Date: Wed, 18 Mar 2009 21:28:48 -0300 Subject: [llvm-commits] register subclass patch! Message-ID: <275e64e40903181728t4c19e43by485489101c403d6@mail.gmail.com> Hi all, Mips has two register classes for f32: def FGR32 : RegisterClass<"Mips", [f32], 32, [F0, F1, F2, F3, F12, F13, F14, F15, F4, F5, F6, F7, F8, F9, F10, F11, F16, F17, F18, F19, F20, F21, F22, F23, F24, F25, F26, F27, F28, F29, F30, F31]> def AFGR32 : RegisterClass<"Mips", [f32], 32, [F0, F2, F12, F14, F4, F6, F8, F10, F16, F18, F20, F22, F24, F26, F28, F30, F31]> Tblgen will set AFGR32 as a subclass of FGR32, which it's a not desired behavior in Mips because only one of them is added in TargetLowering for each execution (it relies on the ABI and other attrs). So, if assignments for both classes at the same program shouldn't be made, I attached a simple patch to avoid the subclass attribution when desired by the target (this is causing some troubles for Mips O32 calling convention). Does anyone suggest another approach? I see this is somehow related to the thread http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-March/020948.html But it seems that the solutions provided in this thread doesn't solve this specific problem in a explicit way. Cheers, -- Bruno Cardoso Lopes http://www.brunocardoso.cc -------------- next part -------------- A non-text attachment was scrubbed... Name: subclass.patch Type: application/octet-stream Size: 1743 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/3343f935/attachment.obj From isanbard at gmail.com Wed Mar 18 19:57:15 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 00:57:15 -0000 Subject: [llvm-commits] [llvm] r67270 - in /llvm/branches/Apple: Dib/ Old-Dib/ Message-ID: <200903190057.n2J0vFDL005718@zion.cs.uiuc.edu> Author: void Date: Wed Mar 18 19:57:15 2009 New Revision: 67270 URL: http://llvm.org/viewvc/llvm-project?rev=67270&view=rev Log: Rebranching Dib. Added: llvm/branches/Apple/Old-Dib/ - copied from r67269, llvm/branches/Apple/Dib/ Removed: llvm/branches/Apple/Dib/ From isanbard at gmail.com Wed Mar 18 19:57:40 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 00:57:40 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67271 - in /llvm-gcc-4.2/branches/Apple: Dib/ Old-Dib/ Message-ID: <200903190057.n2J0veFq005741@zion.cs.uiuc.edu> Author: void Date: Wed Mar 18 19:57:40 2009 New Revision: 67271 URL: http://llvm.org/viewvc/llvm-project?rev=67271&view=rev Log: Rebranching Dib. Added: llvm-gcc-4.2/branches/Apple/Old-Dib/ - copied from r67270, llvm-gcc-4.2/branches/Apple/Dib/ Removed: llvm-gcc-4.2/branches/Apple/Dib/ From isanbard at gmail.com Wed Mar 18 19:57:59 2009 From: isanbard at gmail.com (Bill Wendling) Date: Wed, 18 Mar 2009 17:57:59 -0700 Subject: [llvm-commits] [llvm-gcc-4.2] r67208 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h In-Reply-To: <1A72AC4C-8622-4CAE-8772-CF15AACF60AB@apple.com> References: <200903181557.n2IFv8Qn015896@zion.cs.uiuc.edu> <16e5fdf90903181050n2b4dc2efi53da37b94d38748d@mail.gmail.com> <16e5fdf90903181159q1b6732ebkf6fb7184d49828a4@mail.gmail.com> <14DBCE86-5099-4784-AA31-06E786542C56@apple.com> <1A72AC4C-8622-4CAE-8772-CF15AACF60AB@apple.com> Message-ID: <16e5fdf90903181757u7a63aa02i16183f965f382fb5@mail.gmail.com> On Wed, Mar 18, 2009 at 4:46 PM, Dale Johannesen wrote: > Still looks good, that should be Billproof. > Famous last words? ;-) -bw From isanbard at gmail.com Wed Mar 18 19:58:19 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 00:58:19 -0000 Subject: [llvm-commits] [llvm] r67272 - /llvm/branches/Apple/Dib/ Message-ID: <200903190058.n2J0wJ2w005767@zion.cs.uiuc.edu> Author: void Date: Wed Mar 18 19:58:19 2009 New Revision: 67272 URL: http://llvm.org/viewvc/llvm-project?rev=67272&view=rev Log: Create Dib from mainline trunk. Added: llvm/branches/Apple/Dib/ - copied from r67271, llvm/trunk/ From isanbard at gmail.com Wed Mar 18 19:58:51 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 00:58:51 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67273 - /llvm-gcc-4.2/branches/Apple/Dib/ Message-ID: <200903190058.n2J0wpHN005795@zion.cs.uiuc.edu> Author: void Date: Wed Mar 18 19:58:51 2009 New Revision: 67273 URL: http://llvm.org/viewvc/llvm-project?rev=67273&view=rev Log: Create Dib from mainline trunk. Added: llvm-gcc-4.2/branches/Apple/Dib/ - copied from r67272, llvm-gcc-4.2/trunk/ From kremenek at apple.com Wed Mar 18 20:12:21 2009 From: kremenek at apple.com (Ted Kremenek) Date: Thu, 19 Mar 2009 01:12:21 -0000 Subject: [llvm-commits] [llvm] r67274 - /llvm/tags/checker/checker-0.177/ Message-ID: <200903190112.n2J1CMA5006210@zion.cs.uiuc.edu> Author: kremenek Date: Wed Mar 18 20:12:21 2009 New Revision: 67274 URL: http://llvm.org/viewvc/llvm-project?rev=67274&view=rev Log: Tagging checker-0.177. Added: llvm/tags/checker/checker-0.177/ - copied from r67273, llvm/trunk/ From gohman at apple.com Wed Mar 18 20:13:41 2009 From: gohman at apple.com (Dan Gohman) Date: Wed, 18 Mar 2009 18:13:41 -0700 Subject: [llvm-commits] register subclass patch! In-Reply-To: <275e64e40903181728t4c19e43by485489101c403d6@mail.gmail.com> References: <275e64e40903181728t4c19e43by485489101c403d6@mail.gmail.com> Message-ID: Hello, Instead of creating a separate register class, could you use just FGR32 and then mark the odd registers as non-allocatable when the ABI requires it? Dan On Mar 18, 2009, at 5:28 PM, Bruno Cardoso Lopes wrote: > Hi all, > > Mips has two register classes for f32: > > def FGR32 : RegisterClass<"Mips", [f32], 32, > [F0, F1, F2, F3, F12, F13, F14, F15, > F4, F5, F6, F7, F8, F9, F10, F11, F16, F17, F18, F19, > F20, F21, F22, F23, F24, F25, F26, F27, F28, F29, F30, F31]> > > def AFGR32 : RegisterClass<"Mips", [f32], 32, > [F0, F2, F12, F14, > F4, F6, F8, F10, F16, F18, > F20, F22, F24, F26, F28, F30, > F31]> > > Tblgen will set AFGR32 as a subclass of FGR32, which it's a not > desired behavior in Mips because only one of them is added in > TargetLowering for each execution (it relies on the ABI and other > attrs). So, if assignments for both classes at the same program > shouldn't be made, I attached a simple patch to avoid the subclass > attribution when desired by the target (this is causing some troubles > for Mips O32 calling convention). Does anyone suggest another > approach? > > I see this is somehow related to the thread > http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-March/020948.html > But it seems that the solutions provided in this thread doesn't solve > this specific problem in a explicit way. > > Cheers, > > -- > Bruno Cardoso Lopes > http://www.brunocardoso.cc > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From bruno.cardoso at gmail.com Wed Mar 18 20:50:30 2009 From: bruno.cardoso at gmail.com (Bruno Cardoso Lopes) Date: Wed, 18 Mar 2009 22:50:30 -0300 Subject: [llvm-commits] register subclass patch! In-Reply-To: References: <275e64e40903181728t4c19e43by485489101c403d6@mail.gmail.com> Message-ID: <275e64e40903181850o50261d7sd9885b9b7934bee8@mail.gmail.com> Hi Dan, > Instead of creating a separate register class, could you use just > FGR32 and then mark the odd registers as non-allocatable > when the ABI requires it? By marking them non-allocatable you mean making changes to allocation_order_begin/end so the odd registers doesn't get allocated by getAllocatableSetForRC, right? It seems a better approach to me indeed :) Thanks -- Bruno Cardoso Lopes http://www.brunocardoso.cc From bruno.cardoso at gmail.com Wed Mar 18 21:12:28 2009 From: bruno.cardoso at gmail.com (Bruno Cardoso Lopes) Date: Thu, 19 Mar 2009 02:12:28 -0000 Subject: [llvm-commits] [llvm] r67280 - in /llvm/trunk/lib/Target/Mips: MipsCallingConv.td MipsISelLowering.cpp Message-ID: <200903190212.n2J2CSkd008142@zion.cs.uiuc.edu> Author: bruno Date: Wed Mar 18 21:12:28 2009 New Revision: 67280 URL: http://llvm.org/viewvc/llvm-project?rev=67280&view=rev Log: Added support for Mips O32 Calling Convention Modified: llvm/trunk/lib/Target/Mips/MipsCallingConv.td llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp Modified: llvm/trunk/lib/Target/Mips/MipsCallingConv.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsCallingConv.td?rev=67280&r1=67279&r2=67280&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsCallingConv.td (original) +++ llvm/trunk/lib/Target/Mips/MipsCallingConv.td Wed Mar 18 21:12:28 2009 @@ -16,18 +16,9 @@ //===----------------------------------------------------------------------===// // Mips O32 Calling Convention //===----------------------------------------------------------------------===// -def CC_MipsO32 : CallingConv<[ - // Promote i8/i16 arguments to i32. - CCIfType<[i8, i16], CCPromoteToType>, - - // The first 4 integer arguments are passed in integer registers. - CCIfType<[i32], CCAssignToReg<[A0, A1, A2, A3]>>, - - // Integer values get stored in stack slots that are 4 bytes in - // size and 4-byte aligned. - CCIfType<[i32], CCAssignToStack<4, 4>> -]>; +// Only the return rules are defined here for O32. The rules for argument +// passing are defined in MipsISelLowering.cpp. def RetCC_MipsO32 : CallingConv<[ // i32 are returned in registers V0, V1 CCIfType<[i32], CCAssignToReg<[V0, V1]>>, @@ -42,6 +33,7 @@ //===----------------------------------------------------------------------===// // Mips EABI Calling Convention //===----------------------------------------------------------------------===// + def CC_MipsEABI : CallingConv<[ // Promote i8/i16 arguments to i32. CCIfType<[i8, i16], CCPromoteToType>, @@ -85,8 +77,7 @@ //===----------------------------------------------------------------------===// def CC_Mips : CallingConv<[ - CCIfSubtarget<"isABI_EABI()", CCDelegateTo>, - CCDelegateTo + CCIfSubtarget<"isABI_EABI()", CCDelegateTo> ]>; def RetCC_Mips : CallingConv<[ Modified: llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp?rev=67280&r1=67279&r2=67280&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp (original) +++ llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp Wed Mar 18 21:12:28 2009 @@ -582,6 +582,85 @@ #include "MipsGenCallingConv.inc" //===----------------------------------------------------------------------===// +// TODO: Implement a generic logic using tblgen that can support this. +// Mips O32 ABI rules: +// --- +// i32 - Passed in A0, A1, A2, A3 and stack +// f32 - Only passed in f32 registers if no int reg has been used yet to hold +// an argument. Otherwise, passed in A1, A2, A3 and stack. +// f64 - Only passed in two aliased f32 registers if no int reg has been used +// yet to hold an argument. Otherwise, use A2, A3 and stack. If A1 is +// not used, it must be shadowed. If only A3 is avaiable, shadow it and +// go to stack. +//===----------------------------------------------------------------------===// + +static bool CC_MipsO32(unsigned ValNo, MVT ValVT, + MVT LocVT, CCValAssign::LocInfo LocInfo, + ISD::ArgFlagsTy ArgFlags, CCState &State) { + + static const unsigned IntRegsSize=4, FloatRegsSize=2; + + static const unsigned IntRegs[] = { + Mips::A0, Mips::A1, Mips::A2, Mips::A3 + }; + static const unsigned F32Regs[] = { + Mips::F12, Mips::F14 + }; + static const unsigned F64Regs[] = { + Mips::D6, Mips::D7 + }; + + unsigned Reg=0; + unsigned UnallocIntReg = State.getFirstUnallocated(IntRegs, IntRegsSize); + bool IntRegUsed = (IntRegs[UnallocIntReg] != (unsigned (Mips::A0))); + + // Promote i8 and i16 + if (LocVT == MVT::i8 || LocVT == MVT::i16) { + LocVT = MVT::i32; + if (ArgFlags.isSExt()) + LocInfo = CCValAssign::SExt; + else if (ArgFlags.isZExt()) + LocInfo = CCValAssign::ZExt; + else + LocInfo = CCValAssign::AExt; + } + + if (ValVT == MVT::i32 || (ValVT == MVT::f32 && IntRegUsed)) { + Reg = State.AllocateReg(IntRegs, IntRegsSize); + IntRegUsed = true; + LocVT = MVT::i32; + } + + if (ValVT.isFloatingPoint() && !IntRegUsed) { + if (ValVT == MVT::f32) + Reg = State.AllocateReg(F32Regs, FloatRegsSize); + else + Reg = State.AllocateReg(F64Regs, FloatRegsSize); + } + + if (ValVT == MVT::f64 && IntRegUsed) { + if (UnallocIntReg != IntRegsSize) { + // If we hit register A3 as the first not allocated, we must + // mark it as allocated (shadow) and use the stack instead. + if (IntRegs[UnallocIntReg] != (unsigned (Mips::A3))) + Reg = Mips::A2; + for (;UnallocIntReg < IntRegsSize; ++UnallocIntReg) + State.AllocateReg(UnallocIntReg); + } + LocVT = MVT::i32; + } + + if (!Reg) { + unsigned SizeInBytes = ValVT.getSizeInBits() >> 3; + unsigned Offset = State.AllocateStack(SizeInBytes, SizeInBytes); + State.addLoc(CCValAssign::getMem(ValNo, ValVT, Offset, LocVT, LocInfo)); + } else + State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo)); + + return false; // CC must always match +} + +//===----------------------------------------------------------------------===// // CALL Calling Convention Implementation //===----------------------------------------------------------------------===// @@ -611,9 +690,9 @@ if (Subtarget->isABI_O32()) { int VTsize = MVT(MVT::i32).getSizeInBits()/8; MFI->CreateFixedObject(VTsize, (VTsize*3)); - } - - CCInfo.AnalyzeCallOperands(TheCall, CC_Mips); + CCInfo.AnalyzeCallOperands(TheCall, CC_MipsO32); + } else + CCInfo.AnalyzeCallOperands(TheCall, CC_Mips); // Get a count of how many bytes are to be pushed on the stack. unsigned NumBytes = CCInfo.getNextStackOffset(); @@ -630,15 +709,28 @@ // Walk the register/memloc assignments, inserting copies/loads. for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) { + SDValue Arg = TheCall->getArg(i); CCValAssign &VA = ArgLocs[i]; - // Arguments start after the 5 first operands of ISD::CALL - SDValue Arg = TheCall->getArg(i); - // Promote the value if needed. switch (VA.getLocInfo()) { default: assert(0 && "Unknown loc info!"); - case CCValAssign::Full: break; + case CCValAssign::Full: + if (Subtarget->isABI_O32() && VA.isRegLoc()) { + if (VA.getValVT() == MVT::f32 && VA.getLocVT() == MVT::i32) + Arg = DAG.getNode(ISD::BIT_CONVERT, dl, MVT::i32, Arg); + if (VA.getValVT() == MVT::f64 && VA.getLocVT() == MVT::i32) { + Arg = DAG.getNode(ISD::BIT_CONVERT, dl, MVT::i64, Arg); + SDValue Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32, Arg, + DAG.getConstant(0, getPointerTy())); + SDValue Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32, Arg, + DAG.getConstant(1, getPointerTy())); + RegsToPass.push_back(std::make_pair(VA.getLocReg(), Lo)); + RegsToPass.push_back(std::make_pair(VA.getLocReg()+1, Hi)); + continue; + } + } + break; case CCValAssign::SExt: Arg = DAG.getNode(ISD::SIGN_EXTEND, dl, VA.getLocVT(), Arg); break; @@ -657,7 +749,7 @@ continue; } - // Register cant get to this point... + // Register can't get to this point... assert(VA.isMemLoc()); // Create the frame index object for this incoming parameter @@ -700,7 +792,6 @@ else if (ExternalSymbolSDNode *S = dyn_cast(Callee)) Callee = DAG.getTargetExternalSymbol(S->getSymbol(), getPointerTy()); - // MipsJmpLink = #chain, #target_address, #opt_in_flags... // = Chain, Callee, Reg#1, Reg#2, ... // @@ -824,21 +915,24 @@ SmallVector ArgLocs; CCState CCInfo(CC, isVarArg, getTargetMachine(), ArgLocs); - CCInfo.AnalyzeFormalArguments(Op.getNode(), CC_Mips); + if (Subtarget->isABI_O32()) + CCInfo.AnalyzeFormalArguments(Op.getNode(), CC_MipsO32); + else + CCInfo.AnalyzeFormalArguments(Op.getNode(), CC_Mips); + SmallVector ArgValues; SDValue StackPtr; unsigned FirstStackArgLoc = (Subtarget->isABI_EABI() ? 0 : 16); for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) { - CCValAssign &VA = ArgLocs[i]; // Arguments stored on registers if (VA.isRegLoc()) { MVT RegVT = VA.getLocVT(); TargetRegisterClass *RC = 0; - + if (RegVT == MVT::i32) RC = Mips::CPURegsRegisterClass; else if (RegVT == MVT::f32) { @@ -857,18 +951,33 @@ unsigned Reg = AddLiveIn(DAG.getMachineFunction(), VA.getLocReg(), RC); SDValue ArgValue = DAG.getCopyFromReg(Root, dl, Reg, RegVT); - // If this is an 8 or 16-bit value, it is really passed promoted + // If this is an 8 or 16-bit value, it has been passed promoted // to 32 bits. Insert an assert[sz]ext to capture this, then // truncate to the right size. - if (VA.getLocInfo() == CCValAssign::SExt) - ArgValue = DAG.getNode(ISD::AssertSext, dl, RegVT, ArgValue, - DAG.getValueType(VA.getValVT())); - else if (VA.getLocInfo() == CCValAssign::ZExt) - ArgValue = DAG.getNode(ISD::AssertZext, dl, RegVT, ArgValue, + if (VA.getLocInfo() != CCValAssign::Full) { + unsigned Opcode; + if (VA.getLocInfo() == CCValAssign::SExt) + Opcode = ISD::AssertSext; + else if (VA.getLocInfo() == CCValAssign::ZExt) + Opcode = ISD::AssertZext; + ArgValue = DAG.getNode(Opcode, dl, RegVT, ArgValue, DAG.getValueType(VA.getValVT())); - - if (VA.getLocInfo() != CCValAssign::Full) ArgValue = DAG.getNode(ISD::TRUNCATE, dl, VA.getValVT(), ArgValue); + } + + // Handle O32 ABI cases: i32->f32 and (i32,i32)->f64 + if (Subtarget->isABI_O32()) { + if (RegVT == MVT::i32 && VA.getValVT() == MVT::f32) + ArgValue = DAG.getNode(ISD::BIT_CONVERT, dl, MVT::f32, ArgValue); + if (RegVT == MVT::i32 && VA.getValVT() == MVT::f64) { + unsigned Reg2 = AddLiveIn(DAG.getMachineFunction(), + VA.getLocReg()+1, RC); + SDValue ArgValue2 = DAG.getCopyFromReg(Root, dl, Reg2, RegVT); + SDValue Hi = DAG.getNode(ISD::BIT_CONVERT, dl, MVT::f32, ArgValue); + SDValue Lo = DAG.getNode(ISD::BIT_CONVERT, dl, MVT::f32, ArgValue2); + ArgValue = DAG.getNode(ISD::BUILD_PAIR, dl, MVT::f64, Lo, Hi); + } + } ArgValues.push_back(ArgValue); From natebegeman at mac.com Thu Mar 19 00:21:56 2009 From: natebegeman at mac.com (Nate Begeman) Date: Thu, 19 Mar 2009 05:21:56 -0000 Subject: [llvm-commits] [llvm] r67286 - in /llvm/trunk: lib/Target/Alpha/AlphaInstrInfo.td utils/TableGen/CodeGenDAGPatterns.cpp utils/TableGen/Record.cpp utils/TableGen/Record.h utils/TableGen/TGParser.cpp Message-ID: <200903190521.n2J5Lutw014850@zion.cs.uiuc.edu> Author: sampo Date: Thu Mar 19 00:21:56 2009 New Revision: 67286 URL: http://llvm.org/viewvc/llvm-project?rev=67286&view=rev Log: Add support to tablegen for naming the nodes themselves, not just the operands, in selectiondag patterns. This is required for the upcoming shuffle_vector rewrite, and as it turns out, cleans up a hack in the Alpha instruction info. Modified: llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp llvm/trunk/utils/TableGen/Record.cpp llvm/trunk/utils/TableGen/Record.h llvm/trunk/utils/TableGen/TGParser.cpp Modified: llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td?rev=67286&r1=67285&r2=67286&view=diff ============================================================================== --- llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td (original) +++ llvm/trunk/lib/Target/Alpha/AlphaInstrInfo.td Thu Mar 19 00:21:56 2009 @@ -337,7 +337,7 @@ def ZAPNOTi : OFormL<0x12, 0x31, "zapnot $RA,$L,$RC", [], s_ishf>; // Define the pattern that produces ZAPNOTi. -def : Pat<(i64 (zappat GPRC:$RA):$imm), +def : Pat<(zappat:$imm GPRC:$RA), (ZAPNOTi GPRC:$RA, (iZAPX GPRC:$imm))>; Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=67286&r1=67285&r2=67286&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original) +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Thu Mar 19 00:21:56 2009 @@ -1132,7 +1132,7 @@ if (DefInit *DI = dynamic_cast(Arg)) { Record *R = DI->getDef(); if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag")) { - Dag->setArg(0, new DagInit(DI, + Dag->setArg(0, new DagInit(DI, "", std::vector >())); return ParseTreePattern(Dag); } @@ -1160,12 +1160,14 @@ // Apply the type cast. New->UpdateNodeType(getValueType(Operator), *this); - New->setName(Dag->getArgName(0)); + if (New->getNumChildren() == 0) + New->setName(Dag->getArgName(0)); return New; } // Verify that this is something that makes sense for an operator. - if (!Operator->isSubClassOf("PatFrag") && !Operator->isSubClassOf("SDNode") && + if (!Operator->isSubClassOf("PatFrag") && + !Operator->isSubClassOf("SDNode") && !Operator->isSubClassOf("Instruction") && !Operator->isSubClassOf("SDNodeXForm") && !Operator->isSubClassOf("Intrinsic") && @@ -1192,7 +1194,7 @@ // Direct reference to a leaf DagNode or PatFrag? Turn it into a // TreePatternNode if its own. if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag")) { - Dag->setArg(i, new DagInit(DefI, + Dag->setArg(i, new DagInit(DefI, "", std::vector >())); --i; // Revisit this node... } else { @@ -1253,7 +1255,9 @@ Children.insert(Children.begin(), IIDNode); } - return new TreePatternNode(Operator, Children); + TreePatternNode *Result = new TreePatternNode(Operator, Children); + Result->setName(Dag->getName()); + return Result; } /// InferAllTypes - Infer/propagate as many types throughout the expression @@ -1482,7 +1486,7 @@ for (unsigned op = 0, e = DefaultInfo->getNumArgs(); op != e; ++op) Ops.push_back(std::make_pair(DefaultInfo->getArg(op), DefaultInfo->getArgName(op))); - DagInit *DI = new DagInit(SomeSDNode, Ops); + DagInit *DI = new DagInit(SomeSDNode, "", Ops); // Create a TreePattern to parse this. TreePattern P(DefaultOps[iter][i], DI, false, *this); @@ -1527,7 +1531,6 @@ I->error("Input " + DI->getDef()->getName() + " must be named!"); else if (DI && DI->getDef()->isSubClassOf("Register")) InstImpInputs.push_back(DI->getDef()); - ; } return false; } @@ -1538,7 +1541,6 @@ if (!DI) I->error("Input $" + Pat->getName() + " must be an identifier!"); Rec = DI->getDef(); } else { - assert(Pat->getNumChildren() == 0 && "can't be a use with children!"); Rec = Pat->getOperator(); } @@ -1605,9 +1607,7 @@ // If this is a non-leaf node with no children, treat it basically as if // it were a leaf. This handles nodes like (imm). - bool isUse = false; - if (Pat->getNumChildren() == 0) - isUse = HandleUse(I, Pat, InstInputs, InstImpInputs); + bool isUse = HandleUse(I, Pat, InstInputs, InstImpInputs); if (!isUse && Pat->getTransformFn()) I->error("Cannot specify a transform function for a non-input value!"); Modified: llvm/trunk/utils/TableGen/Record.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/Record.cpp?rev=67286&r1=67285&r2=67286&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/Record.cpp (original) +++ llvm/trunk/utils/TableGen/Record.cpp Thu Mar 19 00:21:56 2009 @@ -426,7 +426,7 @@ Args.push_back(RHSs->getArg(i)); ArgNames.push_back(RHSs->getArgName(i)); } - return new DagInit(LHSs->getOperator(), Args, ArgNames); + return new DagInit(LHSs->getOperator(), "", Args, ArgNames); } break; } @@ -679,7 +679,7 @@ Init *Op = Val->resolveReferences(R, RV); if (Args != NewArgs || Op != Val) - return new DagInit(Op, NewArgs, ArgNames); + return new DagInit(Op, "", NewArgs, ArgNames); return this; } @@ -687,6 +687,8 @@ std::string DagInit::getAsString() const { std::string Result = "(" + Val->getAsString(); + if (!ValName.empty()) + Result += ":" + ValName; if (Args.size()) { Result += " " + Args[0]->getAsString(); if (!ArgNames[0].empty()) Result += ":$" + ArgNames[0]; Modified: llvm/trunk/utils/TableGen/Record.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/Record.h?rev=67286&r1=67285&r2=67286&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/Record.h (original) +++ llvm/trunk/utils/TableGen/Record.h Thu Mar 19 00:21:56 2009 @@ -857,11 +857,13 @@ /// class DagInit : public Init { Init *Val; + std::string ValName; std::vector Args; std::vector ArgNames; public: - DagInit(Init *V, const std::vector > &args) - : Val(V) { + DagInit(Init *V, std::string VN, + const std::vector > &args) + : Val(V), ValName(VN) { Args.reserve(args.size()); ArgNames.reserve(args.size()); for (unsigned i = 0, e = args.size(); i != e; ++i) { @@ -869,9 +871,9 @@ ArgNames.push_back(args[i].second); } } - DagInit(Init *V, const std::vector &args, + DagInit(Init *V, std::string VN, const std::vector &args, const std::vector &argNames) - : Val(V), Args(args), ArgNames(argNames) { + : Val(V), ValName(VN), Args(args), ArgNames(argNames) { } virtual Init *convertInitializerTo(RecTy *Ty) { @@ -880,6 +882,8 @@ Init *getOperator() const { return Val; } + const std::string &getName() const { return ValName; } + unsigned getNumArgs() const { return Args.size(); } Init *getArg(unsigned Num) const { assert(Num < Args.size() && "Arg number out of range!"); Modified: llvm/trunk/utils/TableGen/TGParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TGParser.cpp?rev=67286&r1=67285&r2=67286&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/TGParser.cpp (original) +++ llvm/trunk/utils/TableGen/TGParser.cpp Thu Mar 19 00:21:56 2009 @@ -636,6 +636,18 @@ Init *Operator = ParseIDValue(CurRec); if (Operator == 0) return 0; + // If the operator name is present, parse it. + std::string OperatorName; + if (Lex.getCode() == tgtok::colon) { + if (Lex.Lex() != tgtok::VarName) { // eat the ':' + TokError("expected variable name in dag operator"); + return 0; + } + OperatorName = Lex.getCurStrVal(); + Lex.Lex(); // eat the VarName. + } + + std::vector > DagArgs; if (Lex.getCode() != tgtok::r_paren) { DagArgs = ParseDagArgList(CurRec); @@ -648,7 +660,7 @@ } Lex.Lex(); // eat the ')' - return new DagInit(Operator, DagArgs); + return new DagInit(Operator, OperatorName, DagArgs); } case tgtok::XConcat: case tgtok::XSRA: From nicholas at mxc.ca Thu Mar 19 00:51:40 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Thu, 19 Mar 2009 05:51:40 -0000 Subject: [llvm-commits] [llvm] r67287 - in /llvm/trunk/lib: Target/MSIL/MSILWriter.cpp Target/X86/X86RegisterInfo.cpp Transforms/Scalar/LoopUnswitch.cpp Transforms/Scalar/MemCpyOptimizer.cpp Message-ID: <200903190551.n2J5peCO015864@zion.cs.uiuc.edu> Author: nicholas Date: Thu Mar 19 00:51:39 2009 New Revision: 67287 URL: http://llvm.org/viewvc/llvm-project?rev=67287&view=rev Log: Remove strange extra semicolons. Modified: llvm/trunk/lib/Target/MSIL/MSILWriter.cpp llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Modified: llvm/trunk/lib/Target/MSIL/MSILWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSIL/MSILWriter.cpp?rev=67287&r1=67286&r2=67287&view=diff ============================================================================== --- llvm/trunk/lib/Target/MSIL/MSILWriter.cpp (original) +++ llvm/trunk/lib/Target/MSIL/MSILWriter.cpp Thu Mar 19 00:51:39 2009 @@ -178,7 +178,7 @@ Out << "\tldc.i4.0\n\tret\n}\n"; return; } - bool BadSig = true;; + bool BadSig = true; std::string Args(""); Function::const_arg_iterator Arg1,Arg2; Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=67287&r1=67286&r2=67287&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Thu Mar 19 00:51:39 2009 @@ -332,7 +332,7 @@ } bool X86RegisterInfo::needsStackRealignment(const MachineFunction &MF) const { - const MachineFrameInfo *MFI = MF.getFrameInfo();; + const MachineFrameInfo *MFI = MF.getFrameInfo(); // FIXME: Currently we don't support stack realignment for functions with // variable-sized allocas Modified: llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp?rev=67287&r1=67286&r2=67287&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp Thu Mar 19 00:51:39 2009 @@ -577,7 +577,7 @@ BasicBlock* EndBlock; if (NewExitBlock->getSinglePredecessor() == ExitBlock) { EndBlock = NewExitBlock; - NewExitBlock = EndBlock->getSinglePredecessor();; + NewExitBlock = EndBlock->getSinglePredecessor(); } else { EndBlock = ExitBlock; } Modified: llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=67287&r1=67286&r2=67287&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Thu Mar 19 00:51:39 2009 @@ -277,7 +277,7 @@ // End. if (End > I->End) { I->End = End; - range_iterator NextI = I;; + range_iterator NextI = I; while (++NextI != E && End >= NextI->Start) { // Merge the range in. I->TheStores.append(NextI->TheStores.begin(), NextI->TheStores.end()); From nicholas at mxc.ca Thu Mar 19 01:31:22 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Thu, 19 Mar 2009 06:31:22 -0000 Subject: [llvm-commits] [llvm] r67288 - /llvm/trunk/lib/VMCore/AsmWriter.cpp Message-ID: <200903190631.n2J6VN1Y017245@zion.cs.uiuc.edu> Author: nicholas Date: Thu Mar 19 01:31:22 2009 New Revision: 67288 URL: http://llvm.org/viewvc/llvm-project?rev=67288&view=rev Log: Fix a couple glaring whitespace issues. This file isn't internally consistent either. Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp Modified: llvm/trunk/lib/VMCore/AsmWriter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AsmWriter.cpp?rev=67288&r1=67287&r2=67288&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/AsmWriter.cpp (original) +++ llvm/trunk/lib/VMCore/AsmWriter.cpp Thu Mar 19 01:31:22 2009 @@ -98,7 +98,7 @@ case GlobalPrefix: OS << '@'; break; case LabelPrefix: break; case LocalPrefix: OS << '%'; break; - } + } // Scan the name to see if it needs quotes first. bool NeedsQuotes = isdigit(NameStr[0]); @@ -169,7 +169,7 @@ raw_ostream &OS, bool IgnoreTopLevelName) { // Check to see if the type is named. if (!IgnoreTopLevelName) { - DenseMap &TM = getTypeNamesMap(TypeNames); + DenseMap &TM = getTypeNamesMap(TypeNames); DenseMap::iterator I = TM.find(Ty); if (I != TM.end()) { OS << I->second; From nicholas at mxc.ca Thu Mar 19 01:48:00 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Wed, 18 Mar 2009 23:48:00 -0700 Subject: [llvm-commits] embedded metadata preview In-Reply-To: <7E811979-29E7-4C6D-AA1F-09BD0D7ABFC9@apple.com> References: <49BB6E93.9050802@mxc.ca> <49BF3557.8050409@mxc.ca> <7E811979-29E7-4C6D-AA1F-09BD0D7ABFC9@apple.com> Message-ID: <49C1EAA0.2060405@mxc.ca> Dan Gohman wrote: > On Mar 16, 2009, at 10:29 PM, Nick Lewycky wrote: > >> Dan Gohman wrote: >>> Hi Nick, >>> >>> Here are a few review comments. >>> >>>> Index: lib/Bitcode/Writer/BitcodeWriter.cpp >>>> =================================================================== >>>> --- lib/Bitcode/Writer/BitcodeWriter.cpp (revision 66999) >>>> +++ lib/Bitcode/Writer/BitcodeWriter.cpp (working copy) >>>> @@ -677,6 +677,17 @@ >>>> Record.push_back(CE->getPredicate()); >>>> break; >>>> } >>>> + } else if (const MDString *S = dyn_cast(C)) { >>>> + Code = bitc::CST_CODE_MDSTRING; >>>> + Record.push_back(S->length()); >>>> + for (unsigned i = 0, e = S->length(); i != e; ++i) >>>> + Record.push_back(S->begin()[i]); >>> It seems pretty inefficient to put each char in a uint64_t. >>> Forgive me for prematurely optimizing :-). >> No that's fine, I just copied this out of the handling for strings in >> inline-asm under the assumption that it must be fine. >> >> I tried adding "AbbrevToUse = String8Abbrev;" here but that causes a >> crash ("Invalid abbrev for record"). I'm not really familiar with this >> code, do you know how it's supposed to work? (If not I'm sure I can >> figure it out...) > > I'm not familiar with this code either. > >>>> Index: docs/LangRef.html >>>> =================================================================== >>>> --- docs/LangRef.html (revision 66999) >>>> +++ docs/LangRef.html (working copy) >>>> @@ -1847,6 +1848,14 @@ >>>> large arrays) and is always exactly equivalent to using explicit >>> zero >>>> initializers. >>>>
    >>>> + >>>> +
    Metadata node
    >>>> + >>>> +
    A metadata node is a structure-like constant with the type >>> of an empty >>>> + struct. For example: "{ } !{ i32 0, { } !"test" }". >>> Unlike other >>>> + constants that are meant to be interpreted as part of the >>> instruction stream, >>>> + metadata is a place to attach additional information such as >>> debug info. >>> >>> It would be helpful to mention that this is also expected to be >>> used for >>> encoding information that will be used by optimizations. >> I'm actually thinking of removing any mention of them here and only >> talking about them under the "Embedded Metadata" section. Thoughts? >> >> I added this as the last paragraph in that section: >> "Optimizations may rely on metadata to provide additional >> information >> about the program that isn't available in the instructions, or that >> isn't easily computable. Similarly, the code generator may expect a >> certain metadata format to be used to express debugging information." >> >> Close enough? :) > > Sounds reasonable. > >>> Why do MDString and MDNode inherit from Constant instead of, say, >>> User? I >>> see that ConstantLastVal is moved to include MDStringVal and >>> MDNodeVal, >>> presumably for the same reason. >> I tried that initially, where MDNode was a User and MDString was a >> Value. In practise, they seem to have semantics much closer to that of >> Constants; they're uniqued / pointer comparable and they're global. >> The >> point where it really made a difference was in the .ll parser, >> switching >> them over to being Constant made the parser changes much simpler. > > The parser parts are not present in the patch. That may be a reason > why it wasn't clear why Constant is used. That was accidental. They don't turn up in 'svn diff' unless I explicitly ask for 'svn diff lib/AsmParser'. Here, I've attached a newer version of the patch which ought to include everything. Thanks for the review! Nick > Thanks, > > Dan > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > -------------- next part -------------- A non-text attachment was scrubbed... Name: emb-md2.patch Type: text/x-diff Size: 30860 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20090318/9b7bd177/attachment.bin From baldrick at free.fr Thu Mar 19 06:37:16 2009 From: baldrick at free.fr (Duncan Sands) Date: Thu, 19 Mar 2009 11:37:16 -0000 Subject: [llvm-commits] [llvm] r67302 - /llvm/trunk/lib/Support/APInt.cpp Message-ID: <200903191137.n2JBbGVX008079@zion.cs.uiuc.edu> Author: baldrick Date: Thu Mar 19 06:37:15 2009 New Revision: 67302 URL: http://llvm.org/viewvc/llvm-project?rev=67302&view=rev Log: Fix comment typo. Modified: llvm/trunk/lib/Support/APInt.cpp Modified: llvm/trunk/lib/Support/APInt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APInt.cpp?rev=67302&r1=67301&r2=67302&view=diff ============================================================================== --- llvm/trunk/lib/Support/APInt.cpp (original) +++ llvm/trunk/lib/Support/APInt.cpp Thu Mar 19 06:37:15 2009 @@ -1629,7 +1629,7 @@ // and the the Knuth "classical algorithm" which requires there to be native // operations for +, -, and * on an m bit value with an m*2 bit result. We // can't use 64-bit operands here because we don't have native results of - // 128-bits. Furthremore, casting the 64-bit values to 32-bit values won't + // 128-bits. Furthermore, casting the 64-bit values to 32-bit values won't // work on large-endian machines. uint64_t mask = ~0ull >> (sizeof(unsigned)*8); unsigned n = rhsWords * 2; From brukman+llvm at gmail.com Thu Mar 19 09:25:27 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 19 Mar 2009 14:25:27 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67303 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Message-ID: <200903191425.n2JEPSfM014819@zion.cs.uiuc.edu> Author: brukman Date: Thu Mar 19 09:25:25 2009 New Revision: 67303 URL: http://llvm.org/viewvc/llvm-project?rev=67303&view=rev Log: Fixed macros to allow cross-compilation to ARM for non-Darwin OSes. Original patch by Sandeep Patel. Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=67303&r1=67302&r2=67303&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Thu Mar 19 09:25:25 2009 @@ -1872,6 +1872,14 @@ #define SYMBOL_LONG_CALL_ATTR_P(SYMBOL) \ (SYMBOL_REF_FLAGS (SYMBOL) & SYMBOL_LONG_CALL) +/* LLVM LOCAL begin encoded call attr */ +#define ENCODED_SHORT_CALL_ATTR_P(SYMBOL_NAME) \ + (*(SYMBOL_NAME) == SHORT_CALL_FLAG_CHAR) + +#define ENCODED_LONG_CALL_ATTR_P(SYMBOL_NAME) \ + (*(SYMBOL_NAME) == LONG_CALL_FLAG_CHAR) +/* LLVM LOCAL end encoded call attr */ + #ifndef SUBTARGET_NAME_ENCODING_LENGTHS #define SUBTARGET_NAME_ENCODING_LENGTHS #endif @@ -1880,9 +1888,20 @@ Each case label should return the number of characters to be stripped from the start of a function's name, if that name starts with the indicated character. */ +/* LLVM LOCAL */ +#if TARGET_MACHO #define ARM_NAME_ENCODING_LENGTHS \ case '*': return 1; \ SUBTARGET_NAME_ENCODING_LENGTHS +/* LLVM LOCAL begin name encoding */ +#else +#define ARM_NAME_ENCODING_LENGTHS \ + case SHORT_CALL_FLAG_CHAR: return 1; \ + case LONG_CALL_FLAG_CHAR: return 1; \ + case '*': return 1; \ + SUBTARGET_NAME_ENCODING_LENGTHS +#endif +/* LLVM LOCAL end name encoding */ /* APPLE LOCAL end ARM longcall */ /* This is how to output a reference to a user-level label named NAME. @@ -2319,10 +2338,19 @@ the source code are potential hazards for -mdynamic-no-pic, too. This macro is similar in usage to LEGITIMATE_PIC_OPERAND_P, but it doesn't assume flag_pic is set. */ +/* LLVM LOCAL */ +#ifdef TARGET_MACHO #define LEGITIMATE_INDIRECT_OPERAND_P(X) \ ((! flag_pic || LEGITIMATE_PIC_OPERAND_P(X)) \ && (! MACHO_DYNAMIC_NO_PIC_P \ || LEGITIMATE_DYNAMIC_NO_PIC_OPERAND_P(X))) +/* LLVM LOCAL begin */ +#else +#define LEGITIMATE_INDIRECT_OPERAND_P(X) \ + ((! flag_pic || LEGITIMATE_PIC_OPERAND_P(X)) \ + && (LEGITIMATE_DYNAMIC_NO_PIC_OPERAND_P(X))) +#endif +/* LLVM LOCAL end */ /* APPLE LOCAL end ARM -mdynamic-no-pic support */ /* We need to know when we are making a constant pool; this determines From sabre at nondot.org Thu Mar 19 12:15:45 2009 From: sabre at nondot.org (Chris Lattner) Date: Thu, 19 Mar 2009 17:15:45 -0000 Subject: [llvm-commits] [llvm] r67304 - /llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Message-ID: <200903191715.n2JHFja7021876@zion.cs.uiuc.edu> Author: lattner Date: Thu Mar 19 12:15:43 2009 New Revision: 67304 URL: http://llvm.org/viewvc/llvm-project?rev=67304&view=rev Log: Fix PEI to not walk off the start of a block when an updated instruction is the first in its block. This is PR3842. Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp?rev=67304&r1=67303&r2=67304&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp (original) +++ llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Thu Mar 19 12:15:43 2009 @@ -533,11 +533,15 @@ SPAdj += Size; - MachineBasicBlock::iterator PrevI = prior(I); + MachineBasicBlock::iterator PrevI = BB->end(); + if (I != BB->begin()) PrevI = prior(I); TRI.eliminateCallFramePseudoInstr(Fn, *BB, I); // Visit the instructions created by eliminateCallFramePseudoInstr(). - I = next(PrevI); + if (PrevI == BB->end()) + I = BB->begin(); // The replaced instr was the first in the block. + else + I = next(PrevI); continue; } From kremenek at apple.com Thu Mar 19 12:18:09 2009 From: kremenek at apple.com (Ted Kremenek) Date: Thu, 19 Mar 2009 17:18:09 -0000 Subject: [llvm-commits] [llvm] r67305 - /llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Message-ID: <200903191718.n2JHI9GI022035@zion.cs.uiuc.edu> Author: kremenek Date: Thu Mar 19 12:18:09 2009 New Revision: 67305 URL: http://llvm.org/viewvc/llvm-project?rev=67305&view=rev Log: Fix regression in 'tblgen -gen-clang-diags-defs': Emit the diagnostic kind instead of "DIAGNOSTICCONTROLLED". Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Modified: llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp?rev=67305&r1=67304&r2=67305&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp (original) +++ llvm/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Thu Mar 19 12:18:09 2009 @@ -43,7 +43,8 @@ static const Record* getDiagKind(const Record* DiagClass, const Record &R) { const SuperClassVector &SC = R.getSuperClasses(); for (SuperClassVector::const_iterator I=SC.begin(), E=SC.end(); I!=E; ++I) - if ((*I)->isSubClassOf(DiagClass)) + if ((*I)->isSubClassOf(DiagClass) && + (*I)->getName() != "DiagnosticControlled") return *I; return 0; From dalej at apple.com Thu Mar 19 12:22:54 2009 From: dalej at apple.com (Dale Johannesen) Date: Thu, 19 Mar 2009 17:22:54 -0000 Subject: [llvm-commits] [llvm] r67306 - /llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp Message-ID: <200903191722.n2JHMs0M022249@zion.cs.uiuc.edu> Author: johannes Date: Thu Mar 19 12:22:53 2009 New Revision: 67306 URL: http://llvm.org/viewvc/llvm-project?rev=67306&view=rev Log: This pass keeps a map of Instructions to Rank numbers, and was deleting Instructions without clearing the corresponding map entry. This led to nondeterministic behavior if the same address got allocated to another Instruction within a short time. Modified: llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp Modified: llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp?rev=67306&r1=67305&r2=67306&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp Thu Mar 19 12:22:53 2009 @@ -196,10 +196,12 @@ /// LowerNegateToMultiply - Replace 0-X with X*-1. /// -static Instruction *LowerNegateToMultiply(Instruction *Neg) { +static Instruction *LowerNegateToMultiply(Instruction *Neg, + std::map &ValueRankMap) { Constant *Cst = ConstantInt::getAllOnesValue(Neg->getType()); Instruction *Res = BinaryOperator::CreateMul(Neg->getOperand(1), Cst, "",Neg); + ValueRankMap.erase(Neg); Res->takeName(Neg); Neg->replaceAllUsesWith(Res); Neg->eraseFromParent(); @@ -260,11 +262,11 @@ // transform them into multiplies by -1 so they can be reassociated. if (I->getOpcode() == Instruction::Mul) { if (!LHSBO && LHS->hasOneUse() && BinaryOperator::isNeg(LHS)) { - LHS = LowerNegateToMultiply(cast(LHS)); + LHS = LowerNegateToMultiply(cast(LHS), ValueRankMap); LHSBO = isReassociableOp(LHS, Opcode); } if (!RHSBO && RHS->hasOneUse() && BinaryOperator::isNeg(RHS)) { - RHS = LowerNegateToMultiply(cast(RHS)); + RHS = LowerNegateToMultiply(cast(RHS), ValueRankMap); RHSBO = isReassociableOp(RHS, Opcode); } } @@ -424,7 +426,8 @@ /// BreakUpSubtract - If we have (X-Y), and if either X is an add, or if this is /// only used by an add, transform this into (X+(0-Y)) to promote better /// reassociation. -static Instruction *BreakUpSubtract(Instruction *Sub) { +static Instruction *BreakUpSubtract(Instruction *Sub, + std::map &ValueRankMap) { // Convert a subtract into an add and a neg instruction... so that sub // instructions can be commuted with other add instructions... // @@ -437,6 +440,7 @@ New->takeName(Sub); // Everyone now refers to the add instruction. + ValueRankMap.erase(Sub); Sub->replaceAllUsesWith(New); Sub->eraseFromParent(); @@ -447,7 +451,8 @@ /// ConvertShiftToMul - If this is a shift of a reassociable multiply or is used /// by one, change this into a multiply by a constant to assist with further /// reassociation. -static Instruction *ConvertShiftToMul(Instruction *Shl) { +static Instruction *ConvertShiftToMul(Instruction *Shl, + std::map &ValueRankMap){ // If an operand of this shift is a reassociable multiply, or if the shift // is used by a reassociable multiply or add, turn into a multiply. if (isReassociableOp(Shl->getOperand(0), Instruction::Mul) || @@ -459,6 +464,7 @@ Instruction *Mul = BinaryOperator::CreateMul(Shl->getOperand(0), MulCst, "", Shl); + ValueRankMap.erase(Shl); Mul->takeName(Shl); Shl->replaceAllUsesWith(Mul); Shl->eraseFromParent(); @@ -772,7 +778,7 @@ Instruction *BI = BBI++; if (BI->getOpcode() == Instruction::Shl && isa(BI->getOperand(1))) - if (Instruction *NI = ConvertShiftToMul(BI)) { + if (Instruction *NI = ConvertShiftToMul(BI, ValueRankMap)) { MadeChange = true; BI = NI; } @@ -786,7 +792,7 @@ // see if we can convert it to X+-Y. if (BI->getOpcode() == Instruction::Sub) { if (ShouldBreakUpSubtract(BI)) { - BI = BreakUpSubtract(BI); + BI = BreakUpSubtract(BI, ValueRankMap); MadeChange = true; } else if (BinaryOperator::isNeg(BI)) { // Otherwise, this is a negation. See if the operand is a multiply tree @@ -794,7 +800,7 @@ if (isReassociableOp(BI->getOperand(1), Instruction::Mul) && (!BI->hasOneUse() || !isReassociableOp(BI->use_back(), Instruction::Mul))) { - BI = LowerNegateToMultiply(BI); + BI = LowerNegateToMultiply(BI, ValueRankMap); MadeChange = true; } } From dalej at apple.com Thu Mar 19 12:23:30 2009 From: dalej at apple.com (Dale Johannesen) Date: Thu, 19 Mar 2009 17:23:30 -0000 Subject: [llvm-commits] [llvm] r67307 - /llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Message-ID: <200903191723.n2JHNUDi022298@zion.cs.uiuc.edu> Author: johannes Date: Thu Mar 19 12:23:29 2009 New Revision: 67307 URL: http://llvm.org/viewvc/llvm-project?rev=67307&view=rev Log: Fix comment typo. Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=67307&r1=67306&r2=67307&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Thu Mar 19 12:23:29 2009 @@ -85,7 +85,7 @@ DOUT << "Looking to fold " << BB->getNameStart() << " into " << Succ->getNameStart() << "\n"; - // Shortcut, if there is only a single predecessor is must be BB and merging + // Shortcut, if there is only a single predecessor it must be BB and merging // is always safe if (Succ->getSinglePredecessor()) return true; From gohman at apple.com Thu Mar 19 12:29:04 2009 From: gohman at apple.com (Dan Gohman) Date: Thu, 19 Mar 2009 17:29:04 -0000 Subject: [llvm-commits] [llvm] r67309 - in /llvm/trunk: include/llvm/Analysis/LiveValues.h include/llvm/Analysis/Passes.h include/llvm/LinkAllPasses.h lib/Analysis/LiveValues.cpp Message-ID: <200903191729.n2JHT4F1022572@zion.cs.uiuc.edu> Author: djg Date: Thu Mar 19 12:29:04 2009 New Revision: 67309 URL: http://llvm.org/viewvc/llvm-project?rev=67309&view=rev Log: Add a liveness analysis pass for LLVM IR values. This computes the set of blocks in which values are used, the set in which values are live-through, and the set in which values are killed. For the live-through and killed sets, conservative approximations are used. Added: llvm/trunk/include/llvm/Analysis/LiveValues.h llvm/trunk/lib/Analysis/LiveValues.cpp Modified: llvm/trunk/include/llvm/Analysis/Passes.h llvm/trunk/include/llvm/LinkAllPasses.h Added: llvm/trunk/include/llvm/Analysis/LiveValues.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LiveValues.h?rev=67309&view=auto ============================================================================== --- llvm/trunk/include/llvm/Analysis/LiveValues.h (added) +++ llvm/trunk/include/llvm/Analysis/LiveValues.h Thu Mar 19 12:29:04 2009 @@ -0,0 +1,103 @@ +//===- LiveValues.h - Liveness information for LLVM IR Values. ------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the interface for the LLVM IR Value liveness +// analysis pass. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ANALYSIS_LIVEVALUES_H +#define LLVM_ANALYSIS_LIVEVALUES_H + +#include "llvm/Pass.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/SmallPtrSet.h" + +namespace llvm { + +class DominatorTree; +class LoopInfo; +class Value; + +/// LiveValues - Analysis that provides liveness information for +/// LLVM IR Values. +/// +class LiveValues : public FunctionPass { + DominatorTree *DT; + LoopInfo *LI; + + /// Memo - A bunch of state to be associated with a value. + /// + struct Memo { + /// Used - The set of blocks which contain a use of the value. + /// + SmallPtrSet Used; + + /// LiveThrough - A conservative approximation of the set of blocks in + /// which the value is live-through, meaning blocks properly dominated + /// by the definition, and from which blocks containing uses of the + /// value are reachable. + /// + SmallPtrSet LiveThrough; + + /// Killed - A conservative approximation of the set of blocks in which + /// the value is used and not live-out. + /// + SmallPtrSet Killed; + }; + + /// Memos - Remembers the Memo for each Value. This is populated on + /// demand. + /// + DenseMap Memos; + + /// getMemo - Retrieve an existing Memo for the given value if one + /// is available, otherwise compute a new one. + /// + Memo &getMemo(const Value *V); + + /// compute - Compute a new Memo for the given value. + /// + Memo &compute(const Value *V); + +public: + static char ID; + LiveValues(); + + virtual void getAnalysisUsage(AnalysisUsage &AU) const; + virtual bool runOnFunction(Function &F); + virtual void releaseMemory(); + + /// isUsedInBlock - Test if the given value is used in the given block. + /// + bool isUsedInBlock(const Value *V, const BasicBlock *BB); + + /// isLiveThroughBlock - Test if the given value is known to be + /// live-through the given block, meaning that the block is properly + /// dominated by the value's definition, and there exists a block + /// reachable from it that contains a use. This uses a conservative + /// approximation that errs on the side of returning false. + /// + bool isLiveThroughBlock(const Value *V, const BasicBlock *BB); + + /// isKilledInBlock - Test if the given value is known to be killed in + /// the given block, meaning that the block contains a use of the value, + /// and no blocks reachable from the block contain a use. This uses a + /// conservative approximation that errs on the side of returning false. + /// + bool isKilledInBlock(const Value *V, const BasicBlock *BB); +}; + +/// createLiveValuesPass - This creates an instance of the LiveValues pass. +/// +FunctionPass *createLiveValuesPass(); + +} + +#endif Modified: llvm/trunk/include/llvm/Analysis/Passes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/Passes.h?rev=67309&r1=67308&r2=67309&view=diff ============================================================================== --- llvm/trunk/include/llvm/Analysis/Passes.h (original) +++ llvm/trunk/include/llvm/Analysis/Passes.h Thu Mar 19 12:29:04 2009 @@ -110,6 +110,12 @@ // simple context insensitive alias analysis. // ModulePass *createSteensgaardPass(); + + //===--------------------------------------------------------------------===// + // + // createLiveValuesPass - This creates an instance of the LiveValues pass. + // + FunctionPass *createLiveValuesPass(); // Minor pass prototypes, allowing us to expose them through bugpoint and // analyze. Modified: llvm/trunk/include/llvm/LinkAllPasses.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LinkAllPasses.h?rev=67309&r1=67308&r2=67309&view=diff ============================================================================== --- llvm/trunk/include/llvm/LinkAllPasses.h (original) +++ llvm/trunk/include/llvm/LinkAllPasses.h Thu Mar 19 12:29:04 2009 @@ -76,6 +76,7 @@ (void) llvm::createInternalizePass(false); (void) llvm::createLCSSAPass(); (void) llvm::createLICMPass(); + (void) llvm::createLiveValuesPass(); (void) llvm::createLoopExtractorPass(); (void) llvm::createLoopSimplifyPass(); (void) llvm::createLoopStrengthReducePass(); Added: llvm/trunk/lib/Analysis/LiveValues.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LiveValues.cpp?rev=67309&view=auto ============================================================================== --- llvm/trunk/lib/Analysis/LiveValues.cpp (added) +++ llvm/trunk/lib/Analysis/LiveValues.cpp Thu Mar 19 12:29:04 2009 @@ -0,0 +1,177 @@ +//===- LiveValues.cpp - Liveness information for LLVM IR Values. ----------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the implementation for the LLVM IR Value liveness +// analysis pass. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Analysis/LiveValues.h" +#include "llvm/Analysis/Dominators.h" +#include "llvm/Analysis/LoopInfo.h" +using namespace llvm; + +FunctionPass *llvm::createLiveValuesPass() { return new LiveValues(); } + +char LiveValues::ID = 0; +static RegisterPass +X("live-values", "Value Liveness Analysis", false, true); + +LiveValues::LiveValues() : FunctionPass(&ID) {} + +void LiveValues::getAnalysisUsage(AnalysisUsage &AU) const { + AU.addRequired(); + AU.addRequired(); + AU.setPreservesAll(); +} + +bool LiveValues::runOnFunction(Function &F) { + DT = &getAnalysis(); + LI = &getAnalysis(); + + // This pass' values are computed lazily, so there's nothing to do here. + + return false; +} + +void LiveValues::releaseMemory() { + Memos.clear(); +} + +/// isUsedInBlock - Test if the given value is used in the given block. +/// +bool LiveValues::isUsedInBlock(const Value *V, const BasicBlock *BB) { + Memo &M = getMemo(V); + return M.Used.count(BB); +} + +/// isLiveThroughBlock - Test if the given value is known to be +/// live-through the given block, meaning that the block is properly +/// dominated by the value's definition, and there exists a block +/// reachable from it that contains a use. This uses a conservative +/// approximation that errs on the side of returning false. +/// +bool LiveValues::isLiveThroughBlock(const Value *V, + const BasicBlock *BB) { + Memo &M = getMemo(V); + return M.LiveThrough.count(BB); +} + +/// isKilledInBlock - Test if the given value is known to be killed in +/// the given block, meaning that the block contains a use of the value, +/// and no blocks reachable from the block contain a use. This uses a +/// conservative approximation that errs on the side of returning false. +/// +bool LiveValues::isKilledInBlock(const Value *V, const BasicBlock *BB) { + Memo &M = getMemo(V); + return M.Killed.count(BB); +} + +/// getMemo - Retrieve an existing Memo for the given value if one +/// is available, otherwise compute a new one. +/// +LiveValues::Memo &LiveValues::getMemo(const Value *V) { + DenseMap::iterator I = Memos.find(V); + if (I != Memos.end()) + return I->second; + return compute(V); +} + +/// getImmediateDominator - A handy utility for the specific DominatorTree +/// query that we need here. +/// +static const BasicBlock *getImmediateDominator(const BasicBlock *BB, + const DominatorTree *DT) { + DomTreeNode *Node = DT->getNode(const_cast(BB))->getIDom(); + return Node ? Node->getBlock() : 0; +} + +/// compute - Compute a new Memo for the given value. +/// +LiveValues::Memo &LiveValues::compute(const Value *V) { + Memo &M = Memos[V]; + + // Determine the block containing the definition. + const BasicBlock *DefBB; + // Instructions define values with meaningful live ranges. + if (const Instruction *I = dyn_cast(V)) + DefBB = I->getParent(); + // Arguments can be analyzed as values defined in the entry block. + else if (const Argument *A = dyn_cast(V)) + DefBB = &A->getParent()->getEntryBlock(); + // Constants and other things aren't meaningful here, so just + // return having computed an empty Memo so that we don't come + // here again. The assumption here is that client code won't + // be asking about such values very often. + else + return M; + + // Determine if the value is defined inside a loop. This is used + // to track whether the value is ever used outside the loop, so + // it'll be set to null if the value is either not defined in a + // loop or used outside the loop in which it is defined. + const Loop *L = LI->getLoopFor(DefBB); + + // Track whether the value is used anywhere outside of the block + // in which it is defined. + bool LiveOutOfDefBB = false; + + // Examine each use of the value. + for (Value::use_const_iterator I = V->use_begin(), E = V->use_end(); + I != E; ++I) { + const User *U = *I; + const BasicBlock *UseBB = cast(U)->getParent(); + + // Note the block in which this use occurs. + M.Used.insert(UseBB); + + // Observe whether the value is used outside of the loop in which + // it is defined. Switch to an enclosing loop if necessary. + for (; L; L = L->getParentLoop()) + if (L->contains(UseBB)) + break; + + if (isa(U)) { + // The value is used by a PHI, so it is live-out of the defining block. + LiveOutOfDefBB = true; + } else if (UseBB != DefBB) { + // A use outside the defining block has been found. + LiveOutOfDefBB = true; + + // Climb the immediate dominator tree from the use to the definition + // and mark all intermediate blocks as live-through. Don't do this if + // the user is a PHI because such users may not be dominated by the + // definition. + for (const BasicBlock *BB = getImmediateDominator(UseBB, DT); + BB != DefBB; BB = getImmediateDominator(BB, DT)) + if (!M.LiveThrough.insert(BB)) + break; + } + } + + // If the value is defined inside a loop and is not live outside + // the loop, then each exit block of the loop in which the value + // is used is a kill block. + if (L) { + SmallVector ExitingBlocks; + L->getExitingBlocks(ExitingBlocks); + for (unsigned i = 0, e = ExitingBlocks.size(); i != e; ++i) { + const BasicBlock *ExitingBlock = ExitingBlocks[i]; + if (M.Used.count(ExitingBlock)) + M.Killed.insert(ExitingBlock); + } + } + + // If the value was never used outside the the block in which it was + // defined, it's killed in that block. + if (!LiveOutOfDefBB) + M.Killed.insert(DefBB); + + return M; +} From dalej at apple.com Thu Mar 19 13:03:56 2009 From: dalej at apple.com (Dale Johannesen) Date: Thu, 19 Mar 2009 18:03:56 -0000 Subject: [llvm-commits] [llvm] r67311 - in /llvm/trunk: include/llvm/Transforms/IPO/InlinerPass.h lib/Analysis/IPA/CallGraph.cpp lib/Transforms/IPO/Inliner.cpp lib/Transforms/IPO/PruneEH.cpp Message-ID: <200903191803.n2JI3uXt024444@zion.cs.uiuc.edu> Author: johannes Date: Thu Mar 19 13:03:56 2009 New Revision: 67311 URL: http://llvm.org/viewvc/llvm-project?rev=67311&view=rev Log: Clear the cached cost when removing a function in the inliner; prevents nondeterministic behavior when the same address is reallocated. Don't build call graph nodes for debug intrinsic calls; they're useless, and there were typically a lot of them. Modified: llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h llvm/trunk/lib/Analysis/IPA/CallGraph.cpp llvm/trunk/lib/Transforms/IPO/Inliner.cpp llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Modified: llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h?rev=67311&r1=67310&r2=67311&view=diff ============================================================================== --- llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h (original) +++ llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h Thu Mar 19 13:03:56 2009 @@ -19,6 +19,9 @@ #include "llvm/CallGraphSCCPass.h" #include "llvm/Transforms/Utils/InlineCost.h" +#include "llvm/Target/TargetData.h" +#include + namespace llvm { class CallSite; @@ -43,6 +46,10 @@ // processing to avoid breaking the SCC traversal. virtual bool doFinalization(CallGraph &CG); + // InlineCallIfPossible + bool InlineCallIfPossible(CallSite CS, CallGraph &CG, + const std::set &SCCFunctions, + const TargetData &TD); /// This method returns the value specified by the -inline-threshold value, /// specified on the command line. This is typically not directly needed. Modified: llvm/trunk/lib/Analysis/IPA/CallGraph.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraph.cpp?rev=67311&r1=67310&r2=67311&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/IPA/CallGraph.cpp (original) +++ llvm/trunk/lib/Analysis/IPA/CallGraph.cpp Thu Mar 19 13:03:56 2009 @@ -15,6 +15,7 @@ #include "llvm/Analysis/CallGraph.h" #include "llvm/Module.h" #include "llvm/Instructions.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Streams.h" @@ -143,7 +144,7 @@ for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE; ++II) { CallSite CS = CallSite::get(II); - if (CS.getInstruction()) { + if (CS.getInstruction() && !isa(II)) { const Function *Callee = CS.getCalledFunction(); if (Callee) Node->addCalledFunction(CS, getOrInsertFunction(Callee)); Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=67311&r1=67310&r2=67311&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Thu Mar 19 13:03:56 2009 @@ -16,6 +16,7 @@ #define DEBUG_TYPE "inline" #include "llvm/Module.h" #include "llvm/Instructions.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/Support/CallSite.h" #include "llvm/Target/TargetData.h" @@ -50,7 +51,7 @@ // InlineCallIfPossible - If it is possible to inline the specified call site, // do so and update the CallGraph for this operation. -static bool InlineCallIfPossible(CallSite CS, CallGraph &CG, +bool Inliner::InlineCallIfPossible(CallSite CS, CallGraph &CG, const std::set &SCCFunctions, const TargetData &TD) { Function *Callee = CS.getCalledFunction(); @@ -76,6 +77,8 @@ // Remove any call graph edges from the callee to its callees. CalleeNode->removeAllCalledFunctions(); + resetCachedCostInfo(CalleeNode->getFunction()); + // Removing the node for callee from the call graph and delete it. delete CG.removeFunctionFromModule(CalleeNode); ++NumDeleted; @@ -123,6 +126,7 @@ bool Inliner::runOnSCC(const std::vector &SCC) { CallGraph &CG = getAnalysis(); + TargetData &TD = getAnalysis(); std::set SCCFunctions; DOUT << "Inliner visiting SCC:"; @@ -142,7 +146,8 @@ for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) for (BasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) { CallSite CS = CallSite::get(I); - if (CS.getInstruction() && (!CS.getCalledFunction() || + if (CS.getInstruction() && !isa(I) && + (!CS.getCalledFunction() || !CS.getCalledFunction()->isDeclaration())) CallSites.push_back(CS); } @@ -186,11 +191,10 @@ if (shouldInline(CS)) { Function *Caller = CS.getCaller(); // Attempt to inline the function... - if (InlineCallIfPossible(CS, CG, SCCFunctions, - getAnalysis())) { - // Remove any cached cost info for this caller, as inlining the callee - // has increased the size of the caller (which may be the same as the - // callee). + if (InlineCallIfPossible(CS, CG, SCCFunctions, TD)) { + // Remove any cached cost info for this caller, as inlining the + // callee has increased the size of the caller (which may be the + // same as the callee). resetCachedCostInfo(Caller); // Remove this call site from the list. If possible, use @@ -263,6 +267,7 @@ bool Changed = false; for (std::set::iterator I = FunctionsToRemove.begin(), E = FunctionsToRemove.end(); I != E; ++I) { + resetCachedCostInfo((*I)->getFunction()); delete CG.removeFunctionFromModule(*I); ++NumDeleted; Changed = true; Modified: llvm/trunk/lib/Transforms/IPO/PruneEH.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp?rev=67311&r1=67310&r2=67311&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/IPO/PruneEH.cpp (original) +++ llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Thu Mar 19 13:03:56 2009 @@ -20,6 +20,7 @@ #include "llvm/Constants.h" #include "llvm/Function.h" #include "llvm/Instructions.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" @@ -235,9 +236,10 @@ CallGraphNode *CGN = CG[BB->getParent()]; for (BasicBlock::iterator I = BB->end(), E = BB->begin(); I != E; ) { --I; - if (CallInst *CI = dyn_cast(I)) - CGN->removeCallEdgeFor(CI); - else if (InvokeInst *II = dyn_cast(I)) + if (CallInst *CI = dyn_cast(I)) { + if (!isa(I)) + CGN->removeCallEdgeFor(CI); + } else if (InvokeInst *II = dyn_cast(I)) CGN->removeCallEdgeFor(II); if (!I->use_empty()) I->replaceAllUsesWith(UndefValue::get(I->getType())); From brukman+llvm at gmail.com Thu Mar 19 13:06:05 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 19 Mar 2009 18:06:05 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67312 - /llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm Message-ID: <200903191806.n2JI65Bv024557@zion.cs.uiuc.edu> Author: brukman Date: Thu Mar 19 13:06:05 2009 New Revision: 67312 URL: http://llvm.org/viewvc/llvm-project?rev=67312&view=rev Log: Fixes PR2545 by adding parentheses around parameters to THUMB_DIV_MOD_BODY. Original patch by Adam Treat. Modified: llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm Modified: llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm?rev=67312&r1=67311&r2=67312&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm Thu Mar 19 13:06:05 2009 @@ -845,7 +845,8 @@ cmp dividend, divisor blo LSYM(Lgot_result) - THUMB_DIV_MOD_BODY 0 + /* LLVM LOCAL */ + THUMB_DIV_MOD_BODY(0) mov r0, result pop { work } @@ -920,7 +921,8 @@ LSYM(Lover10): push { work } - THUMB_DIV_MOD_BODY 1 + /* LLVM LOCAL */ + THUMB_DIV_MOD_BODY(1) pop { work } RET @@ -973,7 +975,8 @@ cmp dividend, divisor blo LSYM(Lgot_result) - THUMB_DIV_MOD_BODY 0 + /* LLVM LOCAL */ + THUMB_DIV_MOD_BODY(0) mov r0, result mov work, ip @@ -1076,7 +1079,8 @@ cmp dividend, divisor blo LSYM(Lgot_result) - THUMB_DIV_MOD_BODY 1 + /* LLVM LOCAL */ + THUMB_DIV_MOD_BODY(1) pop { work } cmp work, #0 From clattner at apple.com Thu Mar 19 13:29:58 2009 From: clattner at apple.com (Chris Lattner) Date: Thu, 19 Mar 2009 11:29:58 -0700 Subject: [llvm-commits] [llvm] r67306 - /llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp In-Reply-To: <200903191722.n2JHMs0M022249@zion.cs.uiuc.edu> References: <200903191722.n2JHMs0M022249@zion.cs.uiuc.edu> Message-ID: <39044980-1CEF-41F2-B975-99A59D7531F2@apple.com> On Mar 19, 2009, at 10:22 AM, Dale Johannesen wrote: > Author: johannes > Date: Thu Mar 19 12:22:53 2009 > New Revision: 67306 > > URL: http://llvm.org/viewvc/llvm-project?rev=67306&view=rev > Log: > This pass keeps a map of Instructions to Rank numbers, > and was deleting Instructions without clearing the > corresponding map entry. This led to nondeterministic > behavior if the same address got allocated to another > Instruction within a short time. Very nice catch! Thanks Dale, -Chris From isanbard at gmail.com Thu Mar 19 13:44:45 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 18:44:45 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67317 - /llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Message-ID: <200903191844.n2JIijCZ026745@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 13:44:44 2009 New Revision: 67317 URL: http://llvm.org/viewvc/llvm-project?rev=67317&view=rev Log: Don't redefine MACHO_DYNAMIC_NO_PIC_P. Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.h?rev=67317&r1=67316&r2=67317&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.h Thu Mar 19 13:44:44 2009 @@ -30,9 +30,12 @@ /* Overridden by arm/darwin.h, whether it is included first or not. */ #ifndef TARGET_MACHO #define TARGET_MACHO 0 -/* LLVM LOCAL */ +/* LLVM LOCAL begin */ +#ifndef MACHO_DYNAMIC_NO_PIC_P #define MACHO_DYNAMIC_NO_PIC_P 0 #endif +/* LLVM LOCAL end */ +#endif /* APPLE LOCAL end ARM darwin target */ /* APPLE LOCAL ARM interworking */ From echeng at apple.com Thu Mar 19 13:49:19 2009 From: echeng at apple.com (Evan Cheng) Date: Thu, 19 Mar 2009 11:49:19 -0700 Subject: [llvm-commits] [llvm] r67311 - in /llvm/trunk: include/llvm/Transforms/IPO/InlinerPass.h lib/Analysis/IPA/CallGraph.cpp lib/Transforms/IPO/Inliner.cpp lib/Transforms/IPO/PruneEH.cpp In-Reply-To: <200903191803.n2JI3uXt024444@zion.cs.uiuc.edu> References: <200903191803.n2JI3uXt024444@zion.cs.uiuc.edu> Message-ID: <74B0921B-C927-4FA7-BC04-0B7B265534EE@apple.com> Ah. Very good catch. Does this fix the compile time issue you saw? Should this use SmallPtrSet instead of std::set? Thanks, Evan On Mar 19, 2009, at 11:03 AM, Dale Johannesen wrote: > Author: johannes > Date: Thu Mar 19 13:03:56 2009 > New Revision: 67311 > > URL: http://llvm.org/viewvc/llvm-project?rev=67311&view=rev > Log: > Clear the cached cost when removing a function in > the inliner; prevents nondeterministic behavior > when the same address is reallocated. > Don't build call graph nodes for debug intrinsic calls; > they're useless, and there were typically a lot of them. > > > Modified: > llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h > llvm/trunk/lib/Analysis/IPA/CallGraph.cpp > llvm/trunk/lib/Transforms/IPO/Inliner.cpp > llvm/trunk/lib/Transforms/IPO/PruneEH.cpp > > Modified: llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h?rev=67311&r1=67310&r2=67311&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h (original) > +++ llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h Thu Mar 19 > 13:03:56 2009 > @@ -19,6 +19,9 @@ > > #include "llvm/CallGraphSCCPass.h" > #include "llvm/Transforms/Utils/InlineCost.h" > +#include "llvm/Target/TargetData.h" > +#include > + > > namespace llvm { > class CallSite; > @@ -43,6 +46,10 @@ > // processing to avoid breaking the SCC traversal. > virtual bool doFinalization(CallGraph &CG); > > + // InlineCallIfPossible > + bool InlineCallIfPossible(CallSite CS, CallGraph &CG, > + const std::set &SCCFunctions, > + const TargetData &TD); > > /// This method returns the value specified by the -inline- > threshold value, > /// specified on the command line. This is typically not directly > needed. > > Modified: llvm/trunk/lib/Analysis/IPA/CallGraph.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraph.cpp?rev=67311&r1=67310&r2=67311&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Analysis/IPA/CallGraph.cpp (original) > +++ llvm/trunk/lib/Analysis/IPA/CallGraph.cpp Thu Mar 19 13:03:56 2009 > @@ -15,6 +15,7 @@ > #include "llvm/Analysis/CallGraph.h" > #include "llvm/Module.h" > #include "llvm/Instructions.h" > +#include "llvm/IntrinsicInst.h" > #include "llvm/Support/CallSite.h" > #include "llvm/Support/Compiler.h" > #include "llvm/Support/Streams.h" > @@ -143,7 +144,7 @@ > for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); > II != IE; ++II) { > CallSite CS = CallSite::get(II); > - if (CS.getInstruction()) { > + if (CS.getInstruction() && !isa(II)) { > const Function *Callee = CS.getCalledFunction(); > if (Callee) > Node->addCalledFunction(CS, getOrInsertFunction(Callee)); > > Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=67311&r1=67310&r2=67311&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original) > +++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Thu Mar 19 13:03:56 2009 > @@ -16,6 +16,7 @@ > #define DEBUG_TYPE "inline" > #include "llvm/Module.h" > #include "llvm/Instructions.h" > +#include "llvm/IntrinsicInst.h" > #include "llvm/Analysis/CallGraph.h" > #include "llvm/Support/CallSite.h" > #include "llvm/Target/TargetData.h" > @@ -50,7 +51,7 @@ > > // InlineCallIfPossible - If it is possible to inline the specified > call site, > // do so and update the CallGraph for this operation. > -static bool InlineCallIfPossible(CallSite CS, CallGraph &CG, > +bool Inliner::InlineCallIfPossible(CallSite CS, CallGraph &CG, > const std::set > &SCCFunctions, > const TargetData &TD) { > Function *Callee = CS.getCalledFunction(); > @@ -76,6 +77,8 @@ > // Remove any call graph edges from the callee to its callees. > CalleeNode->removeAllCalledFunctions(); > > + resetCachedCostInfo(CalleeNode->getFunction()); > + > // Removing the node for callee from the call graph and delete it. > delete CG.removeFunctionFromModule(CalleeNode); > ++NumDeleted; > @@ -123,6 +126,7 @@ > > bool Inliner::runOnSCC(const std::vector &SCC) { > CallGraph &CG = getAnalysis(); > + TargetData &TD = getAnalysis(); > > std::set SCCFunctions; > DOUT << "Inliner visiting SCC:"; > @@ -142,7 +146,8 @@ > for (Function::iterator BB = F->begin(), E = F->end(); BB != > E; ++BB) > for (BasicBlock::iterator I = BB->begin(); I != BB->end(); + > +I) { > CallSite CS = CallSite::get(I); > - if (CS.getInstruction() && (!CS.getCalledFunction() || > + if (CS.getInstruction() && !isa(I) && > + (!CS.getCalledFunction() || > !CS.getCalledFunction()- > >isDeclaration())) > CallSites.push_back(CS); > } > @@ -186,11 +191,10 @@ > if (shouldInline(CS)) { > Function *Caller = CS.getCaller(); > // Attempt to inline the function... > - if (InlineCallIfPossible(CS, CG, SCCFunctions, > - getAnalysis())) { > - // Remove any cached cost info for this caller, as > inlining the callee > - // has increased the size of the caller (which may be > the same as the > - // callee). > + if (InlineCallIfPossible(CS, CG, SCCFunctions, TD)) { > + // Remove any cached cost info for this caller, as > inlining the > + // callee has increased the size of the caller (which > may be the > + // same as the callee). > resetCachedCostInfo(Caller); > > // Remove this call site from the list. If possible, use > @@ -263,6 +267,7 @@ > bool Changed = false; > for (std::set::iterator I = > FunctionsToRemove.begin(), > E = FunctionsToRemove.end(); I != E; ++I) { > + resetCachedCostInfo((*I)->getFunction()); > delete CG.removeFunctionFromModule(*I); > ++NumDeleted; > Changed = true; > > Modified: llvm/trunk/lib/Transforms/IPO/PruneEH.cpp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp?rev=67311&r1=67310&r2=67311&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- llvm/trunk/lib/Transforms/IPO/PruneEH.cpp (original) > +++ llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Thu Mar 19 13:03:56 2009 > @@ -20,6 +20,7 @@ > #include "llvm/Constants.h" > #include "llvm/Function.h" > #include "llvm/Instructions.h" > +#include "llvm/IntrinsicInst.h" > #include "llvm/Analysis/CallGraph.h" > #include "llvm/ADT/SmallPtrSet.h" > #include "llvm/ADT/SmallVector.h" > @@ -235,9 +236,10 @@ > CallGraphNode *CGN = CG[BB->getParent()]; > for (BasicBlock::iterator I = BB->end(), E = BB->begin(); I != > E; ) { > --I; > - if (CallInst *CI = dyn_cast(I)) > - CGN->removeCallEdgeFor(CI); > - else if (InvokeInst *II = dyn_cast(I)) > + if (CallInst *CI = dyn_cast(I)) { > + if (!isa(I)) > + CGN->removeCallEdgeFor(CI); > + } else if (InvokeInst *II = dyn_cast(I)) > CGN->removeCallEdgeFor(II); > if (!I->use_empty()) > I->replaceAllUsesWith(UndefValue::get(I->getType())); > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From gohman at apple.com Thu Mar 19 13:53:45 2009 From: gohman at apple.com (Dan Gohman) Date: Thu, 19 Mar 2009 18:53:45 -0000 Subject: [llvm-commits] [llvm] r67319 - /llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Message-ID: <200903191853.n2JIrj0W027312@zion.cs.uiuc.edu> Author: djg Date: Thu Mar 19 13:53:45 2009 New Revision: 67319 URL: http://llvm.org/viewvc/llvm-project?rev=67319&view=rev Log: SADDO and UADDO are commutative. Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=67319&r1=67318&r2=67319&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Thu Mar 19 13:53:45 2009 @@ -770,6 +770,8 @@ case ISD::AND: case ISD::OR: case ISD::XOR: + case ISD::SADDO: + case ISD::UADDO: case ISD::ADDC: case ISD::ADDE: return true; default: return false; From isanbard at gmail.com Thu Mar 19 13:56:38 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 18:56:38 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67322 - /llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.h Message-ID: <200903191856.n2JIucPB027586@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 13:56:38 2009 New Revision: 67322 URL: http://llvm.org/viewvc/llvm-project?rev=67322&view=rev Log: --- Merging (from foreign repository) r67317 into '.': U gcc/config/arm/arm.h Don't redefine MACHO_DYNAMIC_NO_PIC_P. Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.h Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.h?rev=67322&r1=67321&r2=67322&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.h (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.h Thu Mar 19 13:56:38 2009 @@ -30,9 +30,12 @@ /* Overridden by arm/darwin.h, whether it is included first or not. */ #ifndef TARGET_MACHO #define TARGET_MACHO 0 -/* LLVM LOCAL */ +/* LLVM LOCAL begin */ +#ifndef MACHO_DYNAMIC_NO_PIC_P #define MACHO_DYNAMIC_NO_PIC_P 0 #endif +/* LLVM LOCAL end */ +#endif /* APPLE LOCAL end ARM darwin target */ /* APPLE LOCAL ARM interworking */ From dalej at apple.com Thu Mar 19 14:01:52 2009 From: dalej at apple.com (Dale Johannesen) Date: Thu, 19 Mar 2009 12:01:52 -0700 Subject: [llvm-commits] [llvm] r67311 - in /llvm/trunk: include/llvm/Transforms/IPO/InlinerPass.h lib/Analysis/IPA/CallGraph.cpp lib/Transforms/IPO/Inliner.cpp lib/Transforms/IPO/PruneEH.cpp In-Reply-To: <74B0921B-C927-4FA7-BC04-0B7B265534EE@apple.com> References: <200903191803.n2JI3uXt024444@zion.cs.uiuc.edu> <74B0921B-C927-4FA7-BC04-0B7B265534EE@apple.com> Message-ID: <08C333D8-4942-4A81-AA69-8DF9021FEE71@apple.com> On Mar 19, 2009, at 11:49 AMPDT, Evan Cheng wrote: > Ah. Very good catch. Does this fix the compile time issue you saw? No, although it seems to helps some. > Should this use SmallPtrSet instead of std::set? If I'm reading the doc right, iterating through a SmallPtrSet visits elements in nondeterministic order; we don't want that here. > Thanks, > > Evan > > On Mar 19, 2009, at 11:03 AM, Dale Johannesen wrote: > >> Author: johannes >> Date: Thu Mar 19 13:03:56 2009 >> New Revision: 67311 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=67311&view=rev >> Log: >> Clear the cached cost when removing a function in >> the inliner; prevents nondeterministic behavior >> when the same address is reallocated. >> Don't build call graph nodes for debug intrinsic calls; >> they're useless, and there were typically a lot of them. >> >> >> Modified: >> llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h >> llvm/trunk/lib/Analysis/IPA/CallGraph.cpp >> llvm/trunk/lib/Transforms/IPO/Inliner.cpp >> llvm/trunk/lib/Transforms/IPO/PruneEH.cpp >> >> Modified: llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h?rev=67311&r1=67310&r2=67311&view=diff >> >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h (original) >> +++ llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h Thu Mar 19 >> 13:03:56 2009 >> @@ -19,6 +19,9 @@ >> >> #include "llvm/CallGraphSCCPass.h" >> #include "llvm/Transforms/Utils/InlineCost.h" >> +#include "llvm/Target/TargetData.h" >> +#include >> + >> >> namespace llvm { >> class CallSite; >> @@ -43,6 +46,10 @@ >> // processing to avoid breaking the SCC traversal. >> virtual bool doFinalization(CallGraph &CG); >> >> + // InlineCallIfPossible >> + bool InlineCallIfPossible(CallSite CS, CallGraph &CG, >> + const std::set &SCCFunctions, >> + const TargetData &TD); >> >> /// This method returns the value specified by the -inline- >> threshold value, >> /// specified on the command line. This is typically not directly >> needed. >> >> Modified: llvm/trunk/lib/Analysis/IPA/CallGraph.cpp >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraph.cpp?rev=67311&r1=67310&r2=67311&view=diff >> >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- llvm/trunk/lib/Analysis/IPA/CallGraph.cpp (original) >> +++ llvm/trunk/lib/Analysis/IPA/CallGraph.cpp Thu Mar 19 13:03:56 >> 2009 >> @@ -15,6 +15,7 @@ >> #include "llvm/Analysis/CallGraph.h" >> #include "llvm/Module.h" >> #include "llvm/Instructions.h" >> +#include "llvm/IntrinsicInst.h" >> #include "llvm/Support/CallSite.h" >> #include "llvm/Support/Compiler.h" >> #include "llvm/Support/Streams.h" >> @@ -143,7 +144,7 @@ >> for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); >> II != IE; ++II) { >> CallSite CS = CallSite::get(II); >> - if (CS.getInstruction()) { >> + if (CS.getInstruction() && !isa(II)) { >> const Function *Callee = CS.getCalledFunction(); >> if (Callee) >> Node->addCalledFunction(CS, getOrInsertFunction(Callee)); >> >> Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=67311&r1=67310&r2=67311&view=diff >> >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original) >> +++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Thu Mar 19 13:03:56 >> 2009 >> @@ -16,6 +16,7 @@ >> #define DEBUG_TYPE "inline" >> #include "llvm/Module.h" >> #include "llvm/Instructions.h" >> +#include "llvm/IntrinsicInst.h" >> #include "llvm/Analysis/CallGraph.h" >> #include "llvm/Support/CallSite.h" >> #include "llvm/Target/TargetData.h" >> @@ -50,7 +51,7 @@ >> >> // InlineCallIfPossible - If it is possible to inline the specified >> call site, >> // do so and update the CallGraph for this operation. >> -static bool InlineCallIfPossible(CallSite CS, CallGraph &CG, >> +bool Inliner::InlineCallIfPossible(CallSite CS, CallGraph &CG, >> const std::set >> &SCCFunctions, >> const TargetData &TD) { >> Function *Callee = CS.getCalledFunction(); >> @@ -76,6 +77,8 @@ >> // Remove any call graph edges from the callee to its callees. >> CalleeNode->removeAllCalledFunctions(); >> >> + resetCachedCostInfo(CalleeNode->getFunction()); >> + >> // Removing the node for callee from the call graph and delete it. >> delete CG.removeFunctionFromModule(CalleeNode); >> ++NumDeleted; >> @@ -123,6 +126,7 @@ >> >> bool Inliner::runOnSCC(const std::vector &SCC) { >> CallGraph &CG = getAnalysis(); >> + TargetData &TD = getAnalysis(); >> >> std::set SCCFunctions; >> DOUT << "Inliner visiting SCC:"; >> @@ -142,7 +146,8 @@ >> for (Function::iterator BB = F->begin(), E = F->end(); BB != >> E; ++BB) >> for (BasicBlock::iterator I = BB->begin(); I != BB->end(); + >> +I) { >> CallSite CS = CallSite::get(I); >> - if (CS.getInstruction() && (!CS.getCalledFunction() || >> + if (CS.getInstruction() && !isa(I) && >> + (!CS.getCalledFunction() || >> !CS.getCalledFunction()- >>> isDeclaration())) >> CallSites.push_back(CS); >> } >> @@ -186,11 +191,10 @@ >> if (shouldInline(CS)) { >> Function *Caller = CS.getCaller(); >> // Attempt to inline the function... >> - if (InlineCallIfPossible(CS, CG, SCCFunctions, >> - getAnalysis())) { >> - // Remove any cached cost info for this caller, as >> inlining the callee >> - // has increased the size of the caller (which may be >> the same as the >> - // callee). >> + if (InlineCallIfPossible(CS, CG, SCCFunctions, TD)) { >> + // Remove any cached cost info for this caller, as >> inlining the >> + // callee has increased the size of the caller (which >> may be the >> + // same as the callee). >> resetCachedCostInfo(Caller); >> >> // Remove this call site from the list. If possible, use >> @@ -263,6 +267,7 @@ >> bool Changed = false; >> for (std::set::iterator I = >> FunctionsToRemove.begin(), >> E = FunctionsToRemove.end(); I != E; ++I) { >> + resetCachedCostInfo((*I)->getFunction()); >> delete CG.removeFunctionFromModule(*I); >> ++NumDeleted; >> Changed = true; >> >> Modified: llvm/trunk/lib/Transforms/IPO/PruneEH.cpp >> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp?rev=67311&r1=67310&r2=67311&view=diff >> >> = >> = >> = >> = >> = >> = >> = >> = >> = >> ===================================================================== >> --- llvm/trunk/lib/Transforms/IPO/PruneEH.cpp (original) >> +++ llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Thu Mar 19 13:03:56 >> 2009 >> @@ -20,6 +20,7 @@ >> #include "llvm/Constants.h" >> #include "llvm/Function.h" >> #include "llvm/Instructions.h" >> +#include "llvm/IntrinsicInst.h" >> #include "llvm/Analysis/CallGraph.h" >> #include "llvm/ADT/SmallPtrSet.h" >> #include "llvm/ADT/SmallVector.h" >> @@ -235,9 +236,10 @@ >> CallGraphNode *CGN = CG[BB->getParent()]; >> for (BasicBlock::iterator I = BB->end(), E = BB->begin(); I != >> E; ) { >> --I; >> - if (CallInst *CI = dyn_cast(I)) >> - CGN->removeCallEdgeFor(CI); >> - else if (InvokeInst *II = dyn_cast(I)) >> + if (CallInst *CI = dyn_cast(I)) { >> + if (!isa(I)) >> + CGN->removeCallEdgeFor(CI); >> + } else if (InvokeInst *II = dyn_cast(I)) >> CGN->removeCallEdgeFor(II); >> if (!I->use_empty()) >> I->replaceAllUsesWith(UndefValue::get(I->getType())); >> >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From brukman+llvm at gmail.com Thu Mar 19 14:09:48 2009 From: brukman+llvm at gmail.com (Misha Brukman) Date: Thu, 19 Mar 2009 19:09:48 -0000 Subject: [llvm-commits] [llvm] r67326 - in /llvm/trunk/unittests: ADT/APInt.cpp ADT/APIntTest.cpp Support/raw_ostream.cpp Support/raw_ostream_test.cpp Message-ID: <200903191909.n2JJ9mLJ028380@zion.cs.uiuc.edu> Author: brukman Date: Thu Mar 19 14:09:48 2009 New Revision: 67326 URL: http://llvm.org/viewvc/llvm-project?rev=67326&view=rev Log: Renamed unittest files to have a consistent {Tt}est suffix. Added: llvm/trunk/unittests/ADT/APIntTest.cpp - copied unchanged from r67313, llvm/trunk/unittests/ADT/APInt.cpp llvm/trunk/unittests/Support/raw_ostream_test.cpp - copied unchanged from r67313, llvm/trunk/unittests/Support/raw_ostream.cpp Removed: llvm/trunk/unittests/ADT/APInt.cpp llvm/trunk/unittests/Support/raw_ostream.cpp Removed: llvm/trunk/unittests/ADT/APInt.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/APInt.cpp?rev=67325&view=auto ============================================================================== --- llvm/trunk/unittests/ADT/APInt.cpp (original) +++ llvm/trunk/unittests/ADT/APInt.cpp (removed) @@ -1,100 +0,0 @@ -//===- llvm/unittest/ADT/APInt.cpp - APInt unit tests ---------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "gtest/gtest.h" -#include "llvm/ADT/APInt.h" - -using namespace llvm; - -namespace { - -// Test that APInt shift left works when bitwidth > 64 and shiftamt == 0 -TEST(APIntTest, ShiftLeftByZero) { - APInt One = APInt::getNullValue(65) + 1; - APInt Shl = One.shl(0); - EXPECT_EQ(true, Shl[0]); - EXPECT_EQ(false, Shl[1]); -} - -TEST(APIntTest, I128NegativeCount) { - APInt Minus3(128, (uint64_t)-3, true); - EXPECT_EQ(126u, Minus3.countLeadingOnes()); - EXPECT_EQ(-3, Minus3.getSExtValue()); - - APInt Minus1(128, (uint64_t)-1, true); - EXPECT_EQ(0u, Minus1.countLeadingZeros()); - EXPECT_EQ(128u, Minus1.countLeadingOnes()); - EXPECT_EQ(128u, Minus1.getActiveBits()); - EXPECT_EQ(0u, Minus1.countTrailingZeros()); - EXPECT_EQ(128u, Minus1.countTrailingOnes()); - EXPECT_EQ(128u, Minus1.countPopulation()); - EXPECT_EQ(-1, Minus1.getSExtValue()); -} - -TEST(APIntTest, I33Count) { - APInt i33minus2(33, -2, true); - EXPECT_EQ(0u, i33minus2.countLeadingZeros()); - EXPECT_EQ(32u, i33minus2.countLeadingOnes()); - EXPECT_EQ(33u, i33minus2.getActiveBits()); - EXPECT_EQ(1u, i33minus2.countTrailingZeros()); - EXPECT_EQ(32u, i33minus2.countPopulation()); - EXPECT_EQ(-2, i33minus2.getSExtValue()); - EXPECT_EQ(((uint64_t)-2)&((1ull<<33) -1), i33minus2.getZExtValue()); -} - -TEST(APIntTest, I65Count) { - APInt i65minus(65, 0, true); - i65minus.set(64); - EXPECT_EQ(0u, i65minus.countLeadingZeros()); - EXPECT_EQ(1u, i65minus.countLeadingOnes()); - EXPECT_EQ(65u, i65minus.getActiveBits()); - EXPECT_EQ(64u, i65minus.countTrailingZeros()); - EXPECT_EQ(1u, i65minus.countPopulation()); -} - -TEST(APIntTest, I128PositiveCount) { - APInt u128max = APInt::getAllOnesValue(128); - EXPECT_EQ(128u, u128max.countLeadingOnes()); - EXPECT_EQ(0u, u128max.countLeadingZeros()); - EXPECT_EQ(128u, u128max.getActiveBits()); - EXPECT_EQ(0u, u128max.countTrailingZeros()); - EXPECT_EQ(128u, u128max.countTrailingOnes()); - EXPECT_EQ(128u, u128max.countPopulation()); - - APInt u64max(128, (uint64_t)-1, false); - EXPECT_EQ(64u, u64max.countLeadingZeros()); - EXPECT_EQ(0u, u64max.countLeadingOnes()); - EXPECT_EQ(64u, u64max.getActiveBits()); - EXPECT_EQ(0u, u64max.countTrailingZeros()); - EXPECT_EQ(64u, u64max.countTrailingOnes()); - EXPECT_EQ(64u, u64max.countPopulation()); - EXPECT_EQ((uint64_t)~0ull, u64max.getZExtValue()); - - APInt zero(128, 0, true); - EXPECT_EQ(128u, zero.countLeadingZeros()); - EXPECT_EQ(0u, zero.countLeadingOnes()); - EXPECT_EQ(0u, zero.getActiveBits()); - EXPECT_EQ(128u, zero.countTrailingZeros()); - EXPECT_EQ(0u, zero.countTrailingOnes()); - EXPECT_EQ(0u, zero.countPopulation()); - EXPECT_EQ(0u, zero.getSExtValue()); - EXPECT_EQ(0u, zero.getZExtValue()); - - APInt one(128, 1, true); - EXPECT_EQ(127u, one.countLeadingZeros()); - EXPECT_EQ(0u, one.countLeadingOnes()); - EXPECT_EQ(1u, one.getActiveBits()); - EXPECT_EQ(0u, one.countTrailingZeros()); - EXPECT_EQ(1u, one.countTrailingOnes()); - EXPECT_EQ(1u, one.countPopulation()); - EXPECT_EQ(1, one.getSExtValue()); - EXPECT_EQ(1u, one.getZExtValue()); -} - -} Removed: llvm/trunk/unittests/Support/raw_ostream.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/raw_ostream.cpp?rev=67325&view=auto ============================================================================== --- llvm/trunk/unittests/Support/raw_ostream.cpp (original) +++ llvm/trunk/unittests/Support/raw_ostream.cpp (removed) @@ -1,85 +0,0 @@ -//===- llvm/unittest/Support/raw_ostream.cpp - raw_ostream unit tests -----===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "gtest/gtest.h" -#include "llvm/Support/raw_ostream.h" - -using namespace llvm; - -namespace { - -template std::string printToString(const T &Value) { - std::string res; - llvm::raw_string_ostream(res) << Value; - return res; -} - -template std::string printToStringUnbuffered(const T &Value) { - std::string res; - llvm::raw_string_ostream OS(res); - OS.SetUnbuffered(); - OS << Value; - return res; -} - -TEST(raw_ostreamTest, Types_Buffered) { - // Char - EXPECT_EQ("c", printToString('c')); - - // String - EXPECT_EQ("hello", printToString("hello")); - EXPECT_EQ("hello", printToString(std::string("hello"))); - - // Int - EXPECT_EQ("0", printToString(0)); - EXPECT_EQ("2425", printToString(2425)); - EXPECT_EQ("-2425", printToString(-2425)); - - // Long long - EXPECT_EQ("0", printToString(0LL)); - EXPECT_EQ("257257257235709", printToString(257257257235709LL)); - EXPECT_EQ("-257257257235709", printToString(-257257257235709LL)); - - // Double - EXPECT_EQ("1.100000e+00", printToString(1.1)); - - // void* - EXPECT_EQ("0x0", printToString((void*) 0)); - EXPECT_EQ("0xbeef", printToString((void*) 0xbeef)); - EXPECT_EQ("0xdeadbeef", printToString((void*) 0xdeadbeef)); -} - -TEST(raw_ostreamTest, Types_Unbuffered) { - // Char - EXPECT_EQ("c", printToStringUnbuffered('c')); - - // String - EXPECT_EQ("hello", printToStringUnbuffered("hello")); - EXPECT_EQ("hello", printToStringUnbuffered(std::string("hello"))); - - // Int - EXPECT_EQ("0", printToStringUnbuffered(0)); - EXPECT_EQ("2425", printToStringUnbuffered(2425)); - EXPECT_EQ("-2425", printToStringUnbuffered(-2425)); - - // Long long - EXPECT_EQ("0", printToStringUnbuffered(0LL)); - EXPECT_EQ("257257257235709", printToStringUnbuffered(257257257235709LL)); - EXPECT_EQ("-257257257235709", printToStringUnbuffered(-257257257235709LL)); - - // Double - EXPECT_EQ("1.100000e+00", printToStringUnbuffered(1.1)); - - // void* - EXPECT_EQ("0x0", printToStringUnbuffered((void*) 0)); - EXPECT_EQ("0xbeef", printToStringUnbuffered((void*) 0xbeef)); - EXPECT_EQ("0xdeadbeef", printToStringUnbuffered((void*) 0xdeadbeef)); -} - -} From isanbard at gmail.com Thu Mar 19 14:53:35 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 19:53:35 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67328 - /llvm-gcc-4.2/trunk/gcc/config/darwin.h Message-ID: <200903191953.n2JJranb030750@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 14:53:35 2009 New Revision: 67328 URL: http://llvm.org/viewvc/llvm-project?rev=67328&view=rev Log: Because of header file ordering, arm.h might define MACHO_DYNAMIC_NO_PIC_P before config/darwin.h. Let config/darwin.h trump arm.h. Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.h?rev=67328&r1=67327&r2=67328&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Thu Mar 19 14:53:35 2009 @@ -1166,8 +1166,11 @@ /* Macros defining the various PIC cases. */ -/* APPLE LOCAL mdynamic-no-pic */ +/* APPLE LOCAL begin mdynamic-no-pic */ +/* LLVM LOCAL - possibly redefine MACHO_DYNAMIC_NO_PIC_P */ +#undef MACHO_DYNAMIC_NO_PIC_P #define MACHO_DYNAMIC_NO_PIC_P (TARGET_MACHO_DYNAMIC_NO_PIC) +/* APPLE LOCAL end mdynamic-no-pic */ /* APPLE LOCAL begin mach-o cleanup */ #undef MACHOPIC_INDIRECT #define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P) From isanbard at gmail.com Thu Mar 19 14:54:26 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 19:54:26 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67329 - /llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h Message-ID: <200903191954.n2JJsRlG030782@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 14:54:26 2009 New Revision: 67329 URL: http://llvm.org/viewvc/llvm-project?rev=67329&view=rev Log: Because of header file ordering, arm.h might define MACHO_DYNAMIC_NO_PIC_P before config/darwin.h. Let config/darwin.h trump arm.h. Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h?rev=67329&r1=67328&r2=67329&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h Thu Mar 19 14:54:26 2009 @@ -1166,8 +1166,11 @@ /* Macros defining the various PIC cases. */ -/* APPLE LOCAL mdynamic-no-pic */ +/* APPLE LOCAL begin mdynamic-no-pic */ +/* LLVM LOCAL - possibly redefine MACHO_DYNAMIC_NO_PIC_P */ +#undef MACHO_DYNAMIC_NO_PIC_P #define MACHO_DYNAMIC_NO_PIC_P (TARGET_MACHO_DYNAMIC_NO_PIC) +/* APPLE LOCAL end mdynamic-no-pic */ /* APPLE LOCAL begin mach-o cleanup */ #undef MACHOPIC_INDIRECT #define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P) From isanbard at gmail.com Thu Mar 19 14:59:04 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 19:59:04 -0000 Subject: [llvm-commits] [llvm] r67330 - in /llvm/branches/Apple/Dib: lib/Target/Alpha/AlphaInstrInfo.td utils/TableGen/CodeGenDAGPatterns.cpp utils/TableGen/Record.cpp utils/TableGen/Record.h utils/TableGen/TGParser.cpp Message-ID: <200903191959.n2JJx4Rd030974@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 14:59:04 2009 New Revision: 67330 URL: http://llvm.org/viewvc/llvm-project?rev=67330&view=rev Log: --- Merging (from foreign repository) r67286 into '.': U utils/TableGen/Record.h U utils/TableGen/TGParser.cpp U utils/TableGen/CodeGenDAGPatterns.cpp U utils/TableGen/Record.cpp U lib/Target/Alpha/AlphaInstrInfo.td Add support to tablegen for naming the nodes themselves, not just the operands, in selectiondag patterns. This is required for the upcoming shuffle_vector rewrite, and as it turns out, cleans up a hack in the Alpha instruction info. Modified: llvm/branches/Apple/Dib/lib/Target/Alpha/AlphaInstrInfo.td llvm/branches/Apple/Dib/utils/TableGen/CodeGenDAGPatterns.cpp llvm/branches/Apple/Dib/utils/TableGen/Record.cpp llvm/branches/Apple/Dib/utils/TableGen/Record.h llvm/branches/Apple/Dib/utils/TableGen/TGParser.cpp Modified: llvm/branches/Apple/Dib/lib/Target/Alpha/AlphaInstrInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Target/Alpha/AlphaInstrInfo.td?rev=67330&r1=67329&r2=67330&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Target/Alpha/AlphaInstrInfo.td (original) +++ llvm/branches/Apple/Dib/lib/Target/Alpha/AlphaInstrInfo.td Thu Mar 19 14:59:04 2009 @@ -337,7 +337,7 @@ def ZAPNOTi : OFormL<0x12, 0x31, "zapnot $RA,$L,$RC", [], s_ishf>; // Define the pattern that produces ZAPNOTi. -def : Pat<(i64 (zappat GPRC:$RA):$imm), +def : Pat<(zappat:$imm GPRC:$RA), (ZAPNOTi GPRC:$RA, (iZAPX GPRC:$imm))>; Modified: llvm/branches/Apple/Dib/utils/TableGen/CodeGenDAGPatterns.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/utils/TableGen/CodeGenDAGPatterns.cpp?rev=67330&r1=67329&r2=67330&view=diff ============================================================================== --- llvm/branches/Apple/Dib/utils/TableGen/CodeGenDAGPatterns.cpp (original) +++ llvm/branches/Apple/Dib/utils/TableGen/CodeGenDAGPatterns.cpp Thu Mar 19 14:59:04 2009 @@ -1132,7 +1132,7 @@ if (DefInit *DI = dynamic_cast(Arg)) { Record *R = DI->getDef(); if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag")) { - Dag->setArg(0, new DagInit(DI, + Dag->setArg(0, new DagInit(DI, "", std::vector >())); return ParseTreePattern(Dag); } @@ -1160,12 +1160,14 @@ // Apply the type cast. New->UpdateNodeType(getValueType(Operator), *this); - New->setName(Dag->getArgName(0)); + if (New->getNumChildren() == 0) + New->setName(Dag->getArgName(0)); return New; } // Verify that this is something that makes sense for an operator. - if (!Operator->isSubClassOf("PatFrag") && !Operator->isSubClassOf("SDNode") && + if (!Operator->isSubClassOf("PatFrag") && + !Operator->isSubClassOf("SDNode") && !Operator->isSubClassOf("Instruction") && !Operator->isSubClassOf("SDNodeXForm") && !Operator->isSubClassOf("Intrinsic") && @@ -1192,7 +1194,7 @@ // Direct reference to a leaf DagNode or PatFrag? Turn it into a // TreePatternNode if its own. if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrag")) { - Dag->setArg(i, new DagInit(DefI, + Dag->setArg(i, new DagInit(DefI, "", std::vector >())); --i; // Revisit this node... } else { @@ -1253,7 +1255,9 @@ Children.insert(Children.begin(), IIDNode); } - return new TreePatternNode(Operator, Children); + TreePatternNode *Result = new TreePatternNode(Operator, Children); + Result->setName(Dag->getName()); + return Result; } /// InferAllTypes - Infer/propagate as many types throughout the expression @@ -1482,7 +1486,7 @@ for (unsigned op = 0, e = DefaultInfo->getNumArgs(); op != e; ++op) Ops.push_back(std::make_pair(DefaultInfo->getArg(op), DefaultInfo->getArgName(op))); - DagInit *DI = new DagInit(SomeSDNode, Ops); + DagInit *DI = new DagInit(SomeSDNode, "", Ops); // Create a TreePattern to parse this. TreePattern P(DefaultOps[iter][i], DI, false, *this); @@ -1527,7 +1531,6 @@ I->error("Input " + DI->getDef()->getName() + " must be named!"); else if (DI && DI->getDef()->isSubClassOf("Register")) InstImpInputs.push_back(DI->getDef()); - ; } return false; } @@ -1538,7 +1541,6 @@ if (!DI) I->error("Input $" + Pat->getName() + " must be an identifier!"); Rec = DI->getDef(); } else { - assert(Pat->getNumChildren() == 0 && "can't be a use with children!"); Rec = Pat->getOperator(); } @@ -1605,9 +1607,7 @@ // If this is a non-leaf node with no children, treat it basically as if // it were a leaf. This handles nodes like (imm). - bool isUse = false; - if (Pat->getNumChildren() == 0) - isUse = HandleUse(I, Pat, InstInputs, InstImpInputs); + bool isUse = HandleUse(I, Pat, InstInputs, InstImpInputs); if (!isUse && Pat->getTransformFn()) I->error("Cannot specify a transform function for a non-input value!"); Modified: llvm/branches/Apple/Dib/utils/TableGen/Record.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/utils/TableGen/Record.cpp?rev=67330&r1=67329&r2=67330&view=diff ============================================================================== --- llvm/branches/Apple/Dib/utils/TableGen/Record.cpp (original) +++ llvm/branches/Apple/Dib/utils/TableGen/Record.cpp Thu Mar 19 14:59:04 2009 @@ -426,7 +426,7 @@ Args.push_back(RHSs->getArg(i)); ArgNames.push_back(RHSs->getArgName(i)); } - return new DagInit(LHSs->getOperator(), Args, ArgNames); + return new DagInit(LHSs->getOperator(), "", Args, ArgNames); } break; } @@ -679,7 +679,7 @@ Init *Op = Val->resolveReferences(R, RV); if (Args != NewArgs || Op != Val) - return new DagInit(Op, NewArgs, ArgNames); + return new DagInit(Op, "", NewArgs, ArgNames); return this; } @@ -687,6 +687,8 @@ std::string DagInit::getAsString() const { std::string Result = "(" + Val->getAsString(); + if (!ValName.empty()) + Result += ":" + ValName; if (Args.size()) { Result += " " + Args[0]->getAsString(); if (!ArgNames[0].empty()) Result += ":$" + ArgNames[0]; Modified: llvm/branches/Apple/Dib/utils/TableGen/Record.h URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/utils/TableGen/Record.h?rev=67330&r1=67329&r2=67330&view=diff ============================================================================== --- llvm/branches/Apple/Dib/utils/TableGen/Record.h (original) +++ llvm/branches/Apple/Dib/utils/TableGen/Record.h Thu Mar 19 14:59:04 2009 @@ -857,11 +857,13 @@ /// class DagInit : public Init { Init *Val; + std::string ValName; std::vector Args; std::vector ArgNames; public: - DagInit(Init *V, const std::vector > &args) - : Val(V) { + DagInit(Init *V, std::string VN, + const std::vector > &args) + : Val(V), ValName(VN) { Args.reserve(args.size()); ArgNames.reserve(args.size()); for (unsigned i = 0, e = args.size(); i != e; ++i) { @@ -869,9 +871,9 @@ ArgNames.push_back(args[i].second); } } - DagInit(Init *V, const std::vector &args, + DagInit(Init *V, std::string VN, const std::vector &args, const std::vector &argNames) - : Val(V), Args(args), ArgNames(argNames) { + : Val(V), ValName(VN), Args(args), ArgNames(argNames) { } virtual Init *convertInitializerTo(RecTy *Ty) { @@ -880,6 +882,8 @@ Init *getOperator() const { return Val; } + const std::string &getName() const { return ValName; } + unsigned getNumArgs() const { return Args.size(); } Init *getArg(unsigned Num) const { assert(Num < Args.size() && "Arg number out of range!"); Modified: llvm/branches/Apple/Dib/utils/TableGen/TGParser.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/utils/TableGen/TGParser.cpp?rev=67330&r1=67329&r2=67330&view=diff ============================================================================== --- llvm/branches/Apple/Dib/utils/TableGen/TGParser.cpp (original) +++ llvm/branches/Apple/Dib/utils/TableGen/TGParser.cpp Thu Mar 19 14:59:04 2009 @@ -636,6 +636,18 @@ Init *Operator = ParseIDValue(CurRec); if (Operator == 0) return 0; + // If the operator name is present, parse it. + std::string OperatorName; + if (Lex.getCode() == tgtok::colon) { + if (Lex.Lex() != tgtok::VarName) { // eat the ':' + TokError("expected variable name in dag operator"); + return 0; + } + OperatorName = Lex.getCurStrVal(); + Lex.Lex(); // eat the VarName. + } + + std::vector > DagArgs; if (Lex.getCode() != tgtok::r_paren) { DagArgs = ParseDagArgList(CurRec); @@ -648,7 +660,7 @@ } Lex.Lex(); // eat the ')' - return new DagInit(Operator, DagArgs); + return new DagInit(Operator, OperatorName, DagArgs); } case tgtok::XConcat: case tgtok::XSRA: From isanbard at gmail.com Thu Mar 19 15:03:38 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 20:03:38 -0000 Subject: [llvm-commits] [llvm] r67331 - /llvm/branches/Apple/Dib/lib/CodeGen/PrologEpilogInserter.cpp Message-ID: <200903192003.n2JK3c1v031157@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 15:03:38 2009 New Revision: 67331 URL: http://llvm.org/viewvc/llvm-project?rev=67331&view=rev Log: --- Merging (from foreign repository) r67304 into '.': U lib/CodeGen/PrologEpilogInserter.cpp Fix PEI to not walk off the start of a block when an updated instruction is the first in its block. This is PR3842. Modified: llvm/branches/Apple/Dib/lib/CodeGen/PrologEpilogInserter.cpp Modified: llvm/branches/Apple/Dib/lib/CodeGen/PrologEpilogInserter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/CodeGen/PrologEpilogInserter.cpp?rev=67331&r1=67330&r2=67331&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/CodeGen/PrologEpilogInserter.cpp (original) +++ llvm/branches/Apple/Dib/lib/CodeGen/PrologEpilogInserter.cpp Thu Mar 19 15:03:38 2009 @@ -533,11 +533,15 @@ SPAdj += Size; - MachineBasicBlock::iterator PrevI = prior(I); + MachineBasicBlock::iterator PrevI = BB->end(); + if (I != BB->begin()) PrevI = prior(I); TRI.eliminateCallFramePseudoInstr(Fn, *BB, I); // Visit the instructions created by eliminateCallFramePseudoInstr(). - I = next(PrevI); + if (PrevI == BB->end()) + I = BB->begin(); // The replaced instr was the first in the block. + else + I = next(PrevI); continue; } From isanbard at gmail.com Thu Mar 19 15:05:15 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 20:05:15 -0000 Subject: [llvm-commits] [llvm] r67332 - in /llvm/branches/Apple/Dib: include/llvm/Transforms/IPO/InlinerPass.h lib/Analysis/IPA/CallGraph.cpp lib/Transforms/IPO/Inliner.cpp lib/Transforms/IPO/PruneEH.cpp lib/Transforms/Scalar/Reassociate.cpp Message-ID: <200903192005.n2JK5GYT031250@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 15:05:15 2009 New Revision: 67332 URL: http://llvm.org/viewvc/llvm-project?rev=67332&view=rev Log: --- Merging (from foreign repository) r67306 into '.': U lib/Transforms/Scalar/Reassociate.cpp This pass keeps a map of Instructions to Rank numbers, and was deleting Instructions without clearing the corresponding map entry. This led to nondeterministic behavior if the same address got allocated to another Instruction within a short time. --- Merging (from foreign repository) r67311 into '.': U include/llvm/Transforms/IPO/InlinerPass.h U lib/Analysis/IPA/CallGraph.cpp U lib/Transforms/IPO/Inliner.cpp U lib/Transforms/IPO/PruneEH.cpp Clear the cached cost when removing a function in the inliner; prevents nondeterministic behavior when the same address is reallocated. Don't build call graph nodes for debug intrinsic calls; they're useless, and there were typically a lot of them. Modified: llvm/branches/Apple/Dib/include/llvm/Transforms/IPO/InlinerPass.h llvm/branches/Apple/Dib/lib/Analysis/IPA/CallGraph.cpp llvm/branches/Apple/Dib/lib/Transforms/IPO/Inliner.cpp llvm/branches/Apple/Dib/lib/Transforms/IPO/PruneEH.cpp llvm/branches/Apple/Dib/lib/Transforms/Scalar/Reassociate.cpp Modified: llvm/branches/Apple/Dib/include/llvm/Transforms/IPO/InlinerPass.h URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/include/llvm/Transforms/IPO/InlinerPass.h?rev=67332&r1=67331&r2=67332&view=diff ============================================================================== --- llvm/branches/Apple/Dib/include/llvm/Transforms/IPO/InlinerPass.h (original) +++ llvm/branches/Apple/Dib/include/llvm/Transforms/IPO/InlinerPass.h Thu Mar 19 15:05:15 2009 @@ -19,6 +19,9 @@ #include "llvm/CallGraphSCCPass.h" #include "llvm/Transforms/Utils/InlineCost.h" +#include "llvm/Target/TargetData.h" +#include + namespace llvm { class CallSite; @@ -43,6 +46,10 @@ // processing to avoid breaking the SCC traversal. virtual bool doFinalization(CallGraph &CG); + // InlineCallIfPossible + bool InlineCallIfPossible(CallSite CS, CallGraph &CG, + const std::set &SCCFunctions, + const TargetData &TD); /// This method returns the value specified by the -inline-threshold value, /// specified on the command line. This is typically not directly needed. Modified: llvm/branches/Apple/Dib/lib/Analysis/IPA/CallGraph.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Analysis/IPA/CallGraph.cpp?rev=67332&r1=67331&r2=67332&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Analysis/IPA/CallGraph.cpp (original) +++ llvm/branches/Apple/Dib/lib/Analysis/IPA/CallGraph.cpp Thu Mar 19 15:05:15 2009 @@ -15,6 +15,7 @@ #include "llvm/Analysis/CallGraph.h" #include "llvm/Module.h" #include "llvm/Instructions.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Support/CallSite.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/Streams.h" @@ -143,7 +144,7 @@ for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE; ++II) { CallSite CS = CallSite::get(II); - if (CS.getInstruction()) { + if (CS.getInstruction() && !isa(II)) { const Function *Callee = CS.getCalledFunction(); if (Callee) Node->addCalledFunction(CS, getOrInsertFunction(Callee)); Modified: llvm/branches/Apple/Dib/lib/Transforms/IPO/Inliner.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/IPO/Inliner.cpp?rev=67332&r1=67331&r2=67332&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Transforms/IPO/Inliner.cpp (original) +++ llvm/branches/Apple/Dib/lib/Transforms/IPO/Inliner.cpp Thu Mar 19 15:05:15 2009 @@ -16,6 +16,7 @@ #define DEBUG_TYPE "inline" #include "llvm/Module.h" #include "llvm/Instructions.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/Support/CallSite.h" #include "llvm/Target/TargetData.h" @@ -50,7 +51,7 @@ // InlineCallIfPossible - If it is possible to inline the specified call site, // do so and update the CallGraph for this operation. -static bool InlineCallIfPossible(CallSite CS, CallGraph &CG, +bool Inliner::InlineCallIfPossible(CallSite CS, CallGraph &CG, const std::set &SCCFunctions, const TargetData &TD) { Function *Callee = CS.getCalledFunction(); @@ -76,6 +77,8 @@ // Remove any call graph edges from the callee to its callees. CalleeNode->removeAllCalledFunctions(); + resetCachedCostInfo(CalleeNode->getFunction()); + // Removing the node for callee from the call graph and delete it. delete CG.removeFunctionFromModule(CalleeNode); ++NumDeleted; @@ -123,6 +126,7 @@ bool Inliner::runOnSCC(const std::vector &SCC) { CallGraph &CG = getAnalysis(); + TargetData &TD = getAnalysis(); std::set SCCFunctions; DOUT << "Inliner visiting SCC:"; @@ -142,7 +146,8 @@ for (Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB) for (BasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) { CallSite CS = CallSite::get(I); - if (CS.getInstruction() && (!CS.getCalledFunction() || + if (CS.getInstruction() && !isa(I) && + (!CS.getCalledFunction() || !CS.getCalledFunction()->isDeclaration())) CallSites.push_back(CS); } @@ -186,11 +191,10 @@ if (shouldInline(CS)) { Function *Caller = CS.getCaller(); // Attempt to inline the function... - if (InlineCallIfPossible(CS, CG, SCCFunctions, - getAnalysis())) { - // Remove any cached cost info for this caller, as inlining the callee - // has increased the size of the caller (which may be the same as the - // callee). + if (InlineCallIfPossible(CS, CG, SCCFunctions, TD)) { + // Remove any cached cost info for this caller, as inlining the + // callee has increased the size of the caller (which may be the + // same as the callee). resetCachedCostInfo(Caller); // Remove this call site from the list. If possible, use @@ -263,6 +267,7 @@ bool Changed = false; for (std::set::iterator I = FunctionsToRemove.begin(), E = FunctionsToRemove.end(); I != E; ++I) { + resetCachedCostInfo((*I)->getFunction()); delete CG.removeFunctionFromModule(*I); ++NumDeleted; Changed = true; Modified: llvm/branches/Apple/Dib/lib/Transforms/IPO/PruneEH.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/IPO/PruneEH.cpp?rev=67332&r1=67331&r2=67332&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Transforms/IPO/PruneEH.cpp (original) +++ llvm/branches/Apple/Dib/lib/Transforms/IPO/PruneEH.cpp Thu Mar 19 15:05:15 2009 @@ -20,6 +20,7 @@ #include "llvm/Constants.h" #include "llvm/Function.h" #include "llvm/Instructions.h" +#include "llvm/IntrinsicInst.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" @@ -235,9 +236,10 @@ CallGraphNode *CGN = CG[BB->getParent()]; for (BasicBlock::iterator I = BB->end(), E = BB->begin(); I != E; ) { --I; - if (CallInst *CI = dyn_cast(I)) - CGN->removeCallEdgeFor(CI); - else if (InvokeInst *II = dyn_cast(I)) + if (CallInst *CI = dyn_cast(I)) { + if (!isa(I)) + CGN->removeCallEdgeFor(CI); + } else if (InvokeInst *II = dyn_cast(I)) CGN->removeCallEdgeFor(II); if (!I->use_empty()) I->replaceAllUsesWith(UndefValue::get(I->getType())); Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/Reassociate.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/Scalar/Reassociate.cpp?rev=67332&r1=67331&r2=67332&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Transforms/Scalar/Reassociate.cpp (original) +++ llvm/branches/Apple/Dib/lib/Transforms/Scalar/Reassociate.cpp Thu Mar 19 15:05:15 2009 @@ -196,10 +196,12 @@ /// LowerNegateToMultiply - Replace 0-X with X*-1. /// -static Instruction *LowerNegateToMultiply(Instruction *Neg) { +static Instruction *LowerNegateToMultiply(Instruction *Neg, + std::map &ValueRankMap) { Constant *Cst = ConstantInt::getAllOnesValue(Neg->getType()); Instruction *Res = BinaryOperator::CreateMul(Neg->getOperand(1), Cst, "",Neg); + ValueRankMap.erase(Neg); Res->takeName(Neg); Neg->replaceAllUsesWith(Res); Neg->eraseFromParent(); @@ -260,11 +262,11 @@ // transform them into multiplies by -1 so they can be reassociated. if (I->getOpcode() == Instruction::Mul) { if (!LHSBO && LHS->hasOneUse() && BinaryOperator::isNeg(LHS)) { - LHS = LowerNegateToMultiply(cast(LHS)); + LHS = LowerNegateToMultiply(cast(LHS), ValueRankMap); LHSBO = isReassociableOp(LHS, Opcode); } if (!RHSBO && RHS->hasOneUse() && BinaryOperator::isNeg(RHS)) { - RHS = LowerNegateToMultiply(cast(RHS)); + RHS = LowerNegateToMultiply(cast(RHS), ValueRankMap); RHSBO = isReassociableOp(RHS, Opcode); } } @@ -424,7 +426,8 @@ /// BreakUpSubtract - If we have (X-Y), and if either X is an add, or if this is /// only used by an add, transform this into (X+(0-Y)) to promote better /// reassociation. -static Instruction *BreakUpSubtract(Instruction *Sub) { +static Instruction *BreakUpSubtract(Instruction *Sub, + std::map &ValueRankMap) { // Convert a subtract into an add and a neg instruction... so that sub // instructions can be commuted with other add instructions... // @@ -437,6 +440,7 @@ New->takeName(Sub); // Everyone now refers to the add instruction. + ValueRankMap.erase(Sub); Sub->replaceAllUsesWith(New); Sub->eraseFromParent(); @@ -447,7 +451,8 @@ /// ConvertShiftToMul - If this is a shift of a reassociable multiply or is used /// by one, change this into a multiply by a constant to assist with further /// reassociation. -static Instruction *ConvertShiftToMul(Instruction *Shl) { +static Instruction *ConvertShiftToMul(Instruction *Shl, + std::map &ValueRankMap){ // If an operand of this shift is a reassociable multiply, or if the shift // is used by a reassociable multiply or add, turn into a multiply. if (isReassociableOp(Shl->getOperand(0), Instruction::Mul) || @@ -459,6 +464,7 @@ Instruction *Mul = BinaryOperator::CreateMul(Shl->getOperand(0), MulCst, "", Shl); + ValueRankMap.erase(Shl); Mul->takeName(Shl); Shl->replaceAllUsesWith(Mul); Shl->eraseFromParent(); @@ -772,7 +778,7 @@ Instruction *BI = BBI++; if (BI->getOpcode() == Instruction::Shl && isa(BI->getOperand(1))) - if (Instruction *NI = ConvertShiftToMul(BI)) { + if (Instruction *NI = ConvertShiftToMul(BI, ValueRankMap)) { MadeChange = true; BI = NI; } @@ -786,7 +792,7 @@ // see if we can convert it to X+-Y. if (BI->getOpcode() == Instruction::Sub) { if (ShouldBreakUpSubtract(BI)) { - BI = BreakUpSubtract(BI); + BI = BreakUpSubtract(BI, ValueRankMap); MadeChange = true; } else if (BinaryOperator::isNeg(BI)) { // Otherwise, this is a negation. See if the operand is a multiply tree @@ -794,7 +800,7 @@ if (isReassociableOp(BI->getOperand(1), Instruction::Mul) && (!BI->hasOneUse() || !isReassociableOp(BI->use_back(), Instruction::Mul))) { - BI = LowerNegateToMultiply(BI); + BI = LowerNegateToMultiply(BI, ValueRankMap); MadeChange = true; } } From isanbard at gmail.com Thu Mar 19 15:07:26 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 20:07:26 -0000 Subject: [llvm-commits] [llvm] r67333 - /llvm/branches/Apple/Dib/include/llvm/CodeGen/SelectionDAG.h Message-ID: <200903192007.n2JK7QBs031350@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 15:07:26 2009 New Revision: 67333 URL: http://llvm.org/viewvc/llvm-project?rev=67333&view=rev Log: --- Merging (from foreign repository) r67319 into '.': U include/llvm/CodeGen/SelectionDAG.h SADDO and UADDO are commutative. Modified: llvm/branches/Apple/Dib/include/llvm/CodeGen/SelectionDAG.h Modified: llvm/branches/Apple/Dib/include/llvm/CodeGen/SelectionDAG.h URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/include/llvm/CodeGen/SelectionDAG.h?rev=67333&r1=67332&r2=67333&view=diff ============================================================================== --- llvm/branches/Apple/Dib/include/llvm/CodeGen/SelectionDAG.h (original) +++ llvm/branches/Apple/Dib/include/llvm/CodeGen/SelectionDAG.h Thu Mar 19 15:07:26 2009 @@ -770,6 +770,8 @@ case ISD::AND: case ISD::OR: case ISD::XOR: + case ISD::SADDO: + case ISD::UADDO: case ISD::ADDC: case ISD::ADDE: return true; default: return false; From evan.cheng at apple.com Thu Mar 19 15:27:23 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 19 Mar 2009 20:27:23 -0000 Subject: [llvm-commits] [llvm] r67334 - in /llvm/trunk: Makefile.rules test/BugPoint/misopt-basictest.ll test/BugPoint/remove_arguments_test.ll test/Makefile test/lib/llvm.exp Message-ID: <200903192027.n2JKRNk9032247@zion.cs.uiuc.edu> Author: evancheng Date: Thu Mar 19 15:27:23 2009 New Revision: 67334 URL: http://llvm.org/viewvc/llvm-project?rev=67334&view=rev Log: More makefile changes to allow dejagnu tests to pass when system tools default to a different target from the llvm configuration (e.g. 64-bit gcc and 32-bit llvm). Modified: llvm/trunk/Makefile.rules llvm/trunk/test/BugPoint/misopt-basictest.ll llvm/trunk/test/BugPoint/remove_arguments_test.ll llvm/trunk/test/Makefile llvm/trunk/test/lib/llvm.exp Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=67334&r1=67333&r2=67334&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Thu Mar 19 15:27:23 2009 @@ -437,7 +437,7 @@ SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -bundle \ -mmacosx-version-min=$(DARWIN_VERSION) - CompileCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) + TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) else ifeq ($(OS),Cygwin) SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \ @@ -536,10 +536,10 @@ else ifeq ($(OS),Darwin) ifeq ($(ARCH),x86_64) - CompileCommonOpts += -m64 + TargetCommonOpts = -m64 else ifeq ($(ARCH),x86) - CompileCommonOpts += -m32 + TargetCommonOpts = -m32 endif endif endif @@ -560,33 +560,35 @@ ifeq ($(BUILD_COMPONENT), 1) Compile.C = $(BUILD_CC) $(CPP.Flags) $(C.Flags) $(C.Flags.NoRelink) \ - $(CompileCommonOpts) -c + $(TargetCommonOpts) $(CompileCommonOpts) -c Compile.CXX = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ - $(CompileCommonOpts) -c - Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) \ - $(CXX.Flags.NoRelink) -E + $(TargetCommonOpts) $(CompileCommonOpts) -c + Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(TargetCommonOpts) \ + $(CompileCommonOpts) $(CXX.Flags) $(CXX.Flags.NoRelink) -E Link = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ - $(CompileCommonOpts) $(LD.Flags) $(Strip) - Relink = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ - $(Relink.Flags) + $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) $(Strip) + Relink = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) \ + $(CompileCommonOpts) $(Relink.Flags) else Compile.C = $(CC) $(CPP.Flags) $(C.Flags) $(C.Flags.NoRelink) \ - $(CompileCommonOpts) -c + $(TargetCommonOpts) $(CompileCommonOpts) -c Compile.CXX = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ - $(CompileCommonOpts) -c - Preprocess.CXX= $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) \ - $(CXX.Flags.NoRelink) -E + $(TargetCommonOpts) $(CompileCommonOpts) -c + Preprocess.CXX= $(CXX) $(CPP.Flags) $(TargetCommonOpts) \ + $(CompileCommonOpts) $(CXX.Flags) $(CXX.Flags.NoRelink) -E Link = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ - $(CompileCommonOpts) $(LD.Flags) $(Strip) - Relink = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ - $(Relink.Flags) + $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) $(Strip) + Relink = $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) \ + $(CompileCommonOpts) $(Relink.Flags) endif -BCCompile.C = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -Preprocess.C = $(CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -E +BCCompile.C = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) \ + $(TargetCommonOpts) $(CompileCommonOpts) +Preprocess.C = $(CC) $(CPP.Flags) $(C.Flags) \ + $(TargetCommonOpts) $(CompileCommonOpts) -E BCCompile.CXX = $(LLVMGXXWITHPATH) $(CPP.Flags) $(CXX.Flags) \ - $(CompileCommonOpts) + $(TargetCommonOpts) $(CompileCommonOpts) ProgInstall = $(INSTALL) $(Install.StripFlag) -m 0755 ScriptInstall = $(INSTALL) -m 0755 Modified: llvm/trunk/test/BugPoint/misopt-basictest.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/misopt-basictest.ll?rev=67334&r1=67333&r2=67334&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/misopt-basictest.ll (original) +++ llvm/trunk/test/BugPoint/misopt-basictest.ll Thu Mar 19 15:27:23 2009 @@ -1,4 +1,4 @@ -; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes +; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes %bugpoint_tops @.LC0 = internal global [13 x i8] c"Hello World\0A\00" ; <[13 x i8]*> [#uses=1] Modified: llvm/trunk/test/BugPoint/remove_arguments_test.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/remove_arguments_test.ll?rev=67334&r1=67333&r2=67334&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/remove_arguments_test.ll (original) +++ llvm/trunk/test/BugPoint/remove_arguments_test.ll Thu Mar 19 15:27:23 2009 @@ -1,4 +1,4 @@ -; RUN: bugpoint %s -bugpoint-crashcalls -silence-passes +; RUN: bugpoint %s -bugpoint-crashcalls -silence-passes ; Test to make sure that arguments are removed from the function if they are ; unnecessary. Modified: llvm/trunk/test/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Makefile?rev=67334&r1=67333&r2=67334&view=diff ============================================================================== --- llvm/trunk/test/Makefile (original) +++ llvm/trunk/test/Makefile Thu Mar 19 15:27:23 2009 @@ -87,6 +87,9 @@ else DSYMUTIL=true endif +ifeq ($(OS),Darwin) +BUGPOINT_TOPTS="-gcc-tool-args $(TargetCommonOpts)" +endif FORCE: @@ -108,12 +111,13 @@ @echo 'set objdir "$(LLVM_OBJ_ROOT)/test"' >>site.tmp @echo 'set gccpath "$(CC)"' >>site.tmp @echo 'set gxxpath "$(CXX)"' >>site.tmp - @echo 'set compile_c "' $(CC) $(CPP.Flags) $(CompileCommonOpts) -c '"' >>site.tmp - @echo 'set compile_cxx "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) -c '"' >> site.tmp - @echo 'set link "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) $(LD.Flags) '"' >>site.tmp - @echo 'set llvmgcc "$(LLVMGCC) $(EXTRA_OPTIONS)"' >> site.tmp - @echo 'set llvmgxx "$(LLVMGCC) $(EXTRA_OPTIONS)"' >> site.tmp + @echo 'set compile_c "' $(CC) $(CPP.Flags) $(TargetCommonOpts) $(CompileCommonOpts) -c '"' >>site.tmp + @echo 'set compile_cxx "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) $(CompileCommonOpts) -c '"' >> site.tmp + @echo 'set link "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) '"' >>site.tmp + @echo 'set llvmgcc "$(LLVMGCC) $(TargetCommonOpts) $(EXTRA_OPTIONS)"' >> site.tmp + @echo 'set llvmgxx "$(LLVMGCC) $(TargetCommonOpts) $(EXTRA_OPTIONS)"' >> site.tmp @echo 'set llvmgccmajvers "$(LLVMGCC_MAJVERS)"' >> site.tmp + @echo 'set bugpoint_topts $(BUGPOINT_TOPTS)' >> site.tmp @echo 'set shlibext "$(SHLIBEXT)"' >> site.tmp @echo 'set ocamlc "$(OCAMLC) -cc $(CXX) -I $(LibDir)/ocaml"' >> site.tmp @echo 'set valgrind "$(VALGRIND)"' >> site.tmp Modified: llvm/trunk/test/lib/llvm.exp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lib/llvm.exp?rev=67334&r1=67333&r2=67334&view=diff ============================================================================== --- llvm/trunk/test/lib/llvm.exp (original) +++ llvm/trunk/test/lib/llvm.exp Thu Mar 19 15:27:23 2009 @@ -48,8 +48,8 @@ proc substitute { line test tmpFile } { global srcroot objroot srcdir objdir subdir target_triplet prcontext global llvmgcc llvmgxx llvmgcc_version llvmgccmajvers ocamlc - global gccpath gxxpath compile_c compile_cxx link shlibext llvmlibsdir llvmdsymutil - global valgrind grep gas + global gccpath gxxpath compile_c compile_cxx link shlibext llvmlibsdir + global llvmdsymutil valgrind grep gas bugpoint_topts set path [file join $srcdir $subdir] # Substitute all Tcl variables. @@ -77,6 +77,8 @@ regsub -all {%llvmdsymutil} $new_line "$llvmdsymutil" new_line #replace %llvmlibsdir with configure library directory regsub -all {%llvmlibsdir} $new_line "$llvmlibsdir" new_line + #replace %bugpoint_tops with actual bugpoint target options + regsub -all {%bugpoint_tops} $new_line "$bugpoint_topts" new_line #replace %p with path to source, regsub -all {%p} $new_line [file join $srcdir $subdir] new_line #replace %s with filename From evan.cheng at apple.com Thu Mar 19 15:30:07 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 19 Mar 2009 20:30:07 -0000 Subject: [llvm-commits] [llvm] r67335 - in /llvm/trunk: include/llvm/CodeGen/MachineInstr.h lib/CodeGen/LiveIntervalAnalysis.cpp lib/CodeGen/MachineInstr.cpp lib/CodeGen/RegAllocLocal.cpp lib/CodeGen/Spiller.cpp lib/CodeGen/TwoAddressInstructionPass.cpp Message-ID: <200903192030.n2JKU78F032331@zion.cs.uiuc.edu> Author: evancheng Date: Thu Mar 19 15:30:06 2009 New Revision: 67335 URL: http://llvm.org/viewvc/llvm-project?rev=67335&view=rev Log: Added MachineInstr::isRegTiedToDefOperand to check for two-addressness. Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp llvm/trunk/lib/CodeGen/MachineInstr.cpp llvm/trunk/lib/CodeGen/RegAllocLocal.cpp llvm/trunk/lib/CodeGen/Spiller.cpp llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp Modified: llvm/trunk/include/llvm/CodeGen/MachineInstr.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstr.h?rev=67335&r1=67334&r2=67335&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineInstr.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineInstr.h Thu Mar 19 15:30:06 2009 @@ -245,6 +245,11 @@ /// check if the register def is a re-definition due to two addr elimination. bool isRegReDefinedByTwoAddr(unsigned DefIdx) const; + /// isRegTiedToDefOperand - Return true if the use operand of the specified + /// index is tied to an def operand. It also returns the def operand index by + /// reference if DefOpIdx is not null. + bool isRegTiedToDefOperand(unsigned UseOpIdx, unsigned *DefOpIdx = 0); + /// copyKillDeadInfo - Copies kill / dead operand properties from MI. /// void copyKillDeadInfo(const MachineInstr *MI); Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=67335&r1=67334&r2=67335&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Thu Mar 19 15:30:06 2009 @@ -1062,8 +1062,6 @@ SmallVector &Ops, unsigned &MRInfo, SmallVector &FoldOps) { - const TargetInstrDesc &TID = MI->getDesc(); - MRInfo = 0; for (unsigned i = 0, e = Ops.size(); i != e; ++i) { unsigned OpIdx = Ops[i]; @@ -1075,8 +1073,7 @@ MRInfo |= (unsigned)VirtRegMap::isMod; else { // Filter out two-address use operand(s). - if (!MO.isImplicit() && - TID.getOperandConstraint(OpIdx, TOI::TIED_TO) != -1) { + if (MI->isRegTiedToDefOperand(OpIdx)) { MRInfo = VirtRegMap::isModRef; continue; } @@ -2160,8 +2157,7 @@ MachineInstr *LastUse = getInstructionFromIndex(LastUseIdx); int UseIdx = LastUse->findRegisterUseOperandIdx(LI->reg, false); assert(UseIdx != -1); - if (LastUse->getOperand(UseIdx).isImplicit() || - LastUse->getDesc().getOperandConstraint(UseIdx,TOI::TIED_TO) == -1){ + if (!LastUse->isRegTiedToDefOperand(UseIdx)) { LastUse->getOperand(UseIdx).setIsKill(); vrm.addKillPoint(LI->reg, LastUseIdx); } Modified: llvm/trunk/lib/CodeGen/MachineInstr.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineInstr.cpp?rev=67335&r1=67334&r2=67335&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/MachineInstr.cpp (original) +++ llvm/trunk/lib/CodeGen/MachineInstr.cpp Thu Mar 19 15:30:06 2009 @@ -689,7 +689,7 @@ return -1; } -/// isRegReDefinedByTwoAddr - Given the index of a register def operand, +/// isRegReDefinedByTwoAddr - Given the index of a register operand, /// check if the register def is a re-definition due to two addr elimination. bool MachineInstr::isRegReDefinedByTwoAddr(unsigned DefIdx) const{ assert(getOperand(DefIdx).isDef() && "DefIdx is not a def!"); @@ -703,6 +703,24 @@ return false; } +/// isRegTiedToDefOperand - Return true if the operand of the specified index +/// is a register use and it is tied to an def operand. It also returns the def +/// operand index by reference. +bool MachineInstr::isRegTiedToDefOperand(unsigned UseOpIdx, unsigned *DefOpIdx){ + const TargetInstrDesc &TID = getDesc(); + if (UseOpIdx >= TID.getNumOperands()) + return false; + const MachineOperand &MO = getOperand(UseOpIdx); + if (!MO.isReg() || !MO.isUse()) + return false; + int DefIdx = TID.getOperandConstraint(UseOpIdx, TOI::TIED_TO); + if (DefIdx == -1) + return false; + if (DefOpIdx) + *DefOpIdx = (unsigned)DefIdx; + return true; +} + /// copyKillDeadInfo - Copies kill / dead operand properties from MI. /// void MachineInstr::copyKillDeadInfo(const MachineInstr *MI) { Modified: llvm/trunk/lib/CodeGen/RegAllocLocal.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocLocal.cpp?rev=67335&r1=67334&r2=67335&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/RegAllocLocal.cpp (original) +++ llvm/trunk/lib/CodeGen/RegAllocLocal.cpp Thu Mar 19 15:30:06 2009 @@ -695,7 +695,7 @@ if (isPhysReg || !usedOutsideBlock) { if (MO.isUse()) { // Don't mark uses that are tied to defs as kills. - if (MI->getDesc().getOperandConstraint(idx, TOI::TIED_TO) == -1) + if (!MI->isRegTiedToDefOperand(idx)) MO.setIsKill(true); } else MO.setIsDead(true); Modified: llvm/trunk/lib/CodeGen/Spiller.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Spiller.cpp?rev=67335&r1=67334&r2=67335&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/Spiller.cpp (original) +++ llvm/trunk/lib/CodeGen/Spiller.cpp Thu Mar 19 15:30:06 2009 @@ -233,8 +233,7 @@ KillOps[Reg]->setIsKill(false); KillOps[Reg] = NULL; RegKills.reset(Reg); - if (i < TID.getNumOperands() && - TID.getOperandConstraint(i, TOI::TIED_TO) == -1) + if (!MI.isRegTiedToDefOperand(i)) // Unless it's a two-address operand, this is the new kill. MO.setIsKill(); } @@ -748,8 +747,8 @@ int UseIdx = DefMI->findRegisterUseOperandIdx(DestReg, false); if (UseIdx == -1) return false; - int DefIdx = TID.getOperandConstraint(UseIdx, TOI::TIED_TO); - if (DefIdx == -1) + unsigned DefIdx; + if (!MI.isRegTiedToDefOperand(UseIdx, &DefIdx)) return false; assert(DefMI->getOperand(DefIdx).isReg() && DefMI->getOperand(DefIdx).getReg() == SrcReg); @@ -890,7 +889,7 @@ continue; if (!LastUD || (LastUD->isUse() && MO.isDef())) LastUD = &MO; - if (TID.getOperandConstraint(i, TOI::TIED_TO) != -1) + if (LastUDMI->isRegTiedToDefOperand(i)) return; } if (LastUD->isDef()) @@ -1168,8 +1167,8 @@ // aren't allowed to modify the reused register. If none of these cases // apply, reuse it. bool CanReuse = true; - int ti = TID.getOperandConstraint(i, TOI::TIED_TO); - if (ti != -1) { + bool isTied = MI.isRegTiedToDefOperand(i); + if (isTied) { // Okay, we have a two address operand. We can reuse this physreg as // long as we are allowed to clobber the value and there isn't an // earlier def that has already clobbered the physreg. @@ -1206,7 +1205,7 @@ // we can get at R0 or its alias. ReusedOperands.addReuse(i, ReuseSlot, PhysReg, VRM.getPhys(VirtReg), VirtReg); - if (ti != -1) + if (isTied) // Only mark it clobbered if this is a use&def operand. ReusedOperands.markClobbered(PhysReg); ++NumReused; @@ -1226,7 +1225,7 @@ // Mark is isKill if it's there no other uses of the same virtual // register and it's not a two-address operand. IsKill will be // unset if reg is reused. - if (ti == -1 && KilledMIRegs.count(VirtReg) == 0) { + if (!isTied && KilledMIRegs.count(VirtReg) == 0) { MI.getOperand(i).setIsKill(); KilledMIRegs.insert(VirtReg); } @@ -1325,7 +1324,7 @@ Spills.addAvailable(SSorRMId, PhysReg); // Assumes this is the last use. IsKill will be unset if reg is reused // unless it's a two-address operand. - if (TID.getOperandConstraint(i, TOI::TIED_TO) == -1 && + if (!MI.isRegTiedToDefOperand(i) && KilledMIRegs.count(VirtReg) == 0) { MI.getOperand(i).setIsKill(); KilledMIRegs.insert(VirtReg); Modified: llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp?rev=67335&r1=67334&r2=67335&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp (original) +++ llvm/trunk/lib/CodeGen/TwoAddressInstructionPass.cpp Thu Mar 19 15:30:06 2009 @@ -234,7 +234,7 @@ for (unsigned i = 0, e = TID.getNumOperands(); i != e; ++i) { MachineOperand &MO = UseMI->getOperand(i); if (MO.isReg() && MO.getReg() == Reg && - (MO.isDef() || TID.getOperandConstraint(i, TOI::TIED_TO) != -1)) + (MO.isDef() || UseMI->isRegTiedToDefOperand(i))) // Earlier use is a two-address one. return true; } @@ -338,8 +338,8 @@ const MachineOperand &MO = MI.getOperand(i); if (!MO.isReg() || !MO.isUse() || MO.getReg() != Reg) continue; - int ti = TID.getOperandConstraint(i, TOI::TIED_TO); - if (ti != -1) { + unsigned ti; + if (MI.isRegTiedToDefOperand(i, &ti)) { DstReg = MI.getOperand(ti).getReg(); return true; } @@ -635,8 +635,8 @@ ProcessCopy(&*mi, &*mbbi, Processed); for (unsigned si = 1, e = TID.getNumOperands(); si < e; ++si) { - int ti = TID.getOperandConstraint(si, TOI::TIED_TO); - if (ti == -1) + unsigned ti = 0; + if (!mi->isRegTiedToDefOperand(si, &ti)) continue; if (FirstTied) { @@ -669,7 +669,7 @@ // b + a for example) because our transformation will not work. This // should never occur because we are in SSA form. for (unsigned i = 0; i != mi->getNumOperands(); ++i) - assert((int)i == ti || + assert(i == ti || !mi->getOperand(i).isReg() || mi->getOperand(i).getReg() != regA); #endif From echeng at apple.com Thu Mar 19 15:34:31 2009 From: echeng at apple.com (Evan Cheng) Date: Thu, 19 Mar 2009 13:34:31 -0700 Subject: [llvm-commits] [llvm] r67311 - in /llvm/trunk: include/llvm/Transforms/IPO/InlinerPass.h lib/Analysis/IPA/CallGraph.cpp lib/Transforms/IPO/Inliner.cpp lib/Transforms/IPO/PruneEH.cpp In-Reply-To: <08C333D8-4942-4A81-AA69-8DF9021FEE71@apple.com> References: <200903191803.n2JI3uXt024444@zion.cs.uiuc.edu> <74B0921B-C927-4FA7-BC04-0B7B265534EE@apple.com> <08C333D8-4942-4A81-AA69-8DF9021FEE71@apple.com> Message-ID: <4BB2AE32-F7BB-4E80-936E-93B6572D5F65@apple.com> On Mar 19, 2009, at 12:01 PM, Dale Johannesen wrote: > > On Mar 19, 2009, at 11:49 AMPDT, Evan Cheng wrote: > >> Ah. Very good catch. Does this fix the compile time issue you saw? > > No, although it seems to helps some. > >> Should this use SmallPtrSet instead of std::set? > > If I'm reading the doc right, iterating through a SmallPtrSet visits > elements in nondeterministic order; we don't want that here. Right. But I don't see SCCFunctions being iterated. Evan > > >> Thanks, >> >> Evan >> >> On Mar 19, 2009, at 11:03 AM, Dale Johannesen wrote: >> >>> Author: johannes >>> Date: Thu Mar 19 13:03:56 2009 >>> New Revision: 67311 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=67311&view=rev >>> Log: >>> Clear the cached cost when removing a function in >>> the inliner; prevents nondeterministic behavior >>> when the same address is reallocated. >>> Don't build call graph nodes for debug intrinsic calls; >>> they're useless, and there were typically a lot of them. >>> >>> >>> Modified: >>> llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h >>> llvm/trunk/lib/Analysis/IPA/CallGraph.cpp >>> llvm/trunk/lib/Transforms/IPO/Inliner.cpp >>> llvm/trunk/lib/Transforms/IPO/PruneEH.cpp >>> >>> Modified: llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h >>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h?rev=67311&r1=67310&r2=67311&view=diff >>> >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> ==================================================================== >>> --- llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h (original) >>> +++ llvm/trunk/include/llvm/Transforms/IPO/InlinerPass.h Thu Mar 19 >>> 13:03:56 2009 >>> @@ -19,6 +19,9 @@ >>> >>> #include "llvm/CallGraphSCCPass.h" >>> #include "llvm/Transforms/Utils/InlineCost.h" >>> +#include "llvm/Target/TargetData.h" >>> +#include >>> + >>> >>> namespace llvm { >>> class CallSite; >>> @@ -43,6 +46,10 @@ >>> // processing to avoid breaking the SCC traversal. >>> virtual bool doFinalization(CallGraph &CG); >>> >>> + // InlineCallIfPossible >>> + bool InlineCallIfPossible(CallSite CS, CallGraph &CG, >>> + const std::set >>> &SCCFunctions, >>> + const TargetData &TD); >>> >>> /// This method returns the value specified by the -inline- >>> threshold value, >>> /// specified on the command line. This is typically not directly >>> needed. >>> >>> Modified: llvm/trunk/lib/Analysis/IPA/CallGraph.cpp >>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraph.cpp?rev=67311&r1=67310&r2=67311&view=diff >>> >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> ==================================================================== >>> --- llvm/trunk/lib/Analysis/IPA/CallGraph.cpp (original) >>> +++ llvm/trunk/lib/Analysis/IPA/CallGraph.cpp Thu Mar 19 13:03:56 >>> 2009 >>> @@ -15,6 +15,7 @@ >>> #include "llvm/Analysis/CallGraph.h" >>> #include "llvm/Module.h" >>> #include "llvm/Instructions.h" >>> +#include "llvm/IntrinsicInst.h" >>> #include "llvm/Support/CallSite.h" >>> #include "llvm/Support/Compiler.h" >>> #include "llvm/Support/Streams.h" >>> @@ -143,7 +144,7 @@ >>> for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); >>> II != IE; ++II) { >>> CallSite CS = CallSite::get(II); >>> - if (CS.getInstruction()) { >>> + if (CS.getInstruction() && !isa(II)) { >>> const Function *Callee = CS.getCalledFunction(); >>> if (Callee) >>> Node->addCalledFunction(CS, getOrInsertFunction(Callee)); >>> >>> Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp >>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=67311&r1=67310&r2=67311&view=diff >>> >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> ==================================================================== >>> --- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original) >>> +++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Thu Mar 19 13:03:56 >>> 2009 >>> @@ -16,6 +16,7 @@ >>> #define DEBUG_TYPE "inline" >>> #include "llvm/Module.h" >>> #include "llvm/Instructions.h" >>> +#include "llvm/IntrinsicInst.h" >>> #include "llvm/Analysis/CallGraph.h" >>> #include "llvm/Support/CallSite.h" >>> #include "llvm/Target/TargetData.h" >>> @@ -50,7 +51,7 @@ >>> >>> // InlineCallIfPossible - If it is possible to inline the specified >>> call site, >>> // do so and update the CallGraph for this operation. >>> -static bool InlineCallIfPossible(CallSite CS, CallGraph &CG, >>> +bool Inliner::InlineCallIfPossible(CallSite CS, CallGraph &CG, >>> const std::set >>> &SCCFunctions, >>> const TargetData &TD) { >>> Function *Callee = CS.getCalledFunction(); >>> @@ -76,6 +77,8 @@ >>> // Remove any call graph edges from the callee to its callees. >>> CalleeNode->removeAllCalledFunctions(); >>> >>> + resetCachedCostInfo(CalleeNode->getFunction()); >>> + >>> // Removing the node for callee from the call graph and delete it. >>> delete CG.removeFunctionFromModule(CalleeNode); >>> ++NumDeleted; >>> @@ -123,6 +126,7 @@ >>> >>> bool Inliner::runOnSCC(const std::vector &SCC) { >>> CallGraph &CG = getAnalysis(); >>> + TargetData &TD = getAnalysis(); >>> >>> std::set SCCFunctions; >>> DOUT << "Inliner visiting SCC:"; >>> @@ -142,7 +146,8 @@ >>> for (Function::iterator BB = F->begin(), E = F->end(); BB != >>> E; ++BB) >>> for (BasicBlock::iterator I = BB->begin(); I != BB->end(); + >>> +I) { >>> CallSite CS = CallSite::get(I); >>> - if (CS.getInstruction() && (!CS.getCalledFunction() || >>> + if (CS.getInstruction() && !isa(I) && >>> + (!CS.getCalledFunction() || >>> !CS.getCalledFunction()- >>>> isDeclaration())) >>> CallSites.push_back(CS); >>> } >>> @@ -186,11 +191,10 @@ >>> if (shouldInline(CS)) { >>> Function *Caller = CS.getCaller(); >>> // Attempt to inline the function... >>> - if (InlineCallIfPossible(CS, CG, SCCFunctions, >>> - getAnalysis())) { >>> - // Remove any cached cost info for this caller, as >>> inlining the callee >>> - // has increased the size of the caller (which may be >>> the same as the >>> - // callee). >>> + if (InlineCallIfPossible(CS, CG, SCCFunctions, TD)) { >>> + // Remove any cached cost info for this caller, as >>> inlining the >>> + // callee has increased the size of the caller (which >>> may be the >>> + // same as the callee). >>> resetCachedCostInfo(Caller); >>> >>> // Remove this call site from the list. If possible, use >>> @@ -263,6 +267,7 @@ >>> bool Changed = false; >>> for (std::set::iterator I = >>> FunctionsToRemove.begin(), >>> E = FunctionsToRemove.end(); I != E; ++I) { >>> + resetCachedCostInfo((*I)->getFunction()); >>> delete CG.removeFunctionFromModule(*I); >>> ++NumDeleted; >>> Changed = true; >>> >>> Modified: llvm/trunk/lib/Transforms/IPO/PruneEH.cpp >>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp?rev=67311&r1=67310&r2=67311&view=diff >>> >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> = >>> ==================================================================== >>> --- llvm/trunk/lib/Transforms/IPO/PruneEH.cpp (original) >>> +++ llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Thu Mar 19 13:03:56 >>> 2009 >>> @@ -20,6 +20,7 @@ >>> #include "llvm/Constants.h" >>> #include "llvm/Function.h" >>> #include "llvm/Instructions.h" >>> +#include "llvm/IntrinsicInst.h" >>> #include "llvm/Analysis/CallGraph.h" >>> #include "llvm/ADT/SmallPtrSet.h" >>> #include "llvm/ADT/SmallVector.h" >>> @@ -235,9 +236,10 @@ >>> CallGraphNode *CGN = CG[BB->getParent()]; >>> for (BasicBlock::iterator I = BB->end(), E = BB->begin(); I != >>> E; ) { >>> --I; >>> - if (CallInst *CI = dyn_cast(I)) >>> - CGN->removeCallEdgeFor(CI); >>> - else if (InvokeInst *II = dyn_cast(I)) >>> + if (CallInst *CI = dyn_cast(I)) { >>> + if (!isa(I)) >>> + CGN->removeCallEdgeFor(CI); >>> + } else if (InvokeInst *II = dyn_cast(I)) >>> CGN->removeCallEdgeFor(II); >>> if (!I->use_empty()) >>> I->replaceAllUsesWith(UndefValue::get(I->getType())); >>> >>> >>> _______________________________________________ >>> llvm-commits mailing list >>> llvm-commits at cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From isanbard at gmail.com Thu Mar 19 17:03:59 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 22:03:59 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67338 - in /llvm-gcc-4.2/branches/Apple/Dib: gcc/ gcc/config/ gcc/config/arm/ gcc/config/i386/ gcc/cp/ gcc/testsuite/ gcc/testsuite/g++.apple/ gcc/testsuite/obj-c++.dg/ gcc/testsuite/objc.dg/ libcpp/ Message-ID: <200903192204.n2JM41Qo004209@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 17:03:59 2009 New Revision: 67338 URL: http://llvm.org/viewvc/llvm-project?rev=67338&view=rev Log: Merge LLVM-GCC with Apple GCC 5642.1. Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g++.apple/debug.C llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/obj-c++.dg/block-seq.mm llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/block-seq.m llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/import.m llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/property-weak.m Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/ChangeLog.apple llvm-gcc-4.2/branches/Apple/Dib/gcc/c-common.c llvm-gcc-4.2/branches/Apple/Dib/gcc/c-decl.c llvm-gcc-4.2/branches/Apple/Dib/gcc/c-parser.c llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c llvm-gcc-4.2/branches/Apple/Dib/gcc/cgraphunit.c llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.c llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/lib1funcs.asm llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/t-darwin llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.c llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/darwin.h llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.c llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.h llvm-gcc-4.2/branches/Apple/Dib/gcc/convert.c llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/decl.c llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/name-lookup.c llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c llvm-gcc-4.2/branches/Apple/Dib/gcc/libgcov.c llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/ChangeLog.apple llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.h llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c llvm-gcc-4.2/branches/Apple/Dib/libcpp/directives.c Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/ChangeLog.apple URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/ChangeLog.apple?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/ChangeLog.apple (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/ChangeLog.apple Thu Mar 19 17:03:59 2009 @@ -1,3 +1,22 @@ +2009-03-12 Caroline Tice + + Radar 6144634 + * c-parser.c (c_parser_statement_after_labels): When + re-setting the expression location at the end, use the input + location for Block pointer assignments. + +2009-02-25 Jim Grosbach + + Radar 6465387 + * gcc/config/arm/t-darwin (LIB1ASMFUNCS): Add _save_vfp_d8_d15_regs, + _restore_vfp_d8_d15_regs. + * gcc/config/arm/arm.c (handle_thumb_unexpanded_prologue, + handle_thumb_unexpanded_epilogue): Add call to + ___{save,restore}_vfp_d8_d15_regs when compiling a function + w/ a non-local label in Thumb1 mode for a v6 or later processor. + * gcc/config/arm/lib1funcs.asm (save_vfp_d8_d15_regs, + restore_vfp_d8_d15_regs): New functions, built only for v6 ARM. + 2009-02-11 Fariborz Jahanian Radar 6573923 Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/c-common.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/c-common.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/c-common.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/c-common.c Thu Mar 19 17:03:59 2009 @@ -6150,7 +6150,7 @@ *no_add_attrs = true; if (!(*node) || TREE_CODE (*node) != VAR_DECL) { - warning (OPT_Wattributes, "__block attribute can be specified on variables only - ignored"); + error ("__block attribute can be specified on variables only"); return NULL_TREE; } arg_ident = TREE_VALUE (args); @@ -7319,6 +7319,9 @@ #define ri8 r8 "i" #define ri16 r16 "i" #define ri32 r32 "i" +#define rmi8 ri8 m8 +#define rmi16 ri16 m16 +#define rmi32 ri32 m32 #define rel8 "s" S("1") #define m32fp "m" S("3") #define m64fp "m" S("6") @@ -7328,6 +7331,7 @@ #define M64 X(m64) #define RM64 R64 M64 #define RI64 X(R64 "i") +#define RMI64 RI64 M64 #define r32R64 r32 R64 #define r16r32R64 r16 r32 R64 #define rm32RM64 rm32 RM64 @@ -7435,6 +7439,9 @@ #undef ri8 #undef ri16 #undef ri32 +#undef rmi8 +#undef rmi16 +#undef rmi32 #undef rel8 #undef m32fp #undef m64fp @@ -7443,6 +7450,8 @@ #undef m32fpm64fpm80fp #undef M64 #undef RM64 +#undef RI64 +#undef RMI64 #undef r32R64 #undef r16r32R64 #undef rm32RM64 Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/c-decl.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/c-decl.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/c-decl.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/c-decl.c Thu Mar 19 17:03:59 2009 @@ -3938,8 +3938,7 @@ { if (DECL_EXTERNAL (decl) || TREE_STATIC (decl)) { - warning (0, - "__block attribute is only allowed on local variables - ignored"); + error ("__block attribute on %q+D not allowed, only allowed on local variables", decl); COPYABLE_BYREF_LOCAL_VAR (decl) = 0; COPYABLE_BYREF_LOCAL_NONPOD (decl) = 0; } Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/c-parser.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/c-parser.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/c-parser.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/c-parser.c Thu Mar 19 17:03:59 2009 @@ -4143,8 +4143,20 @@ (recursively) all of the component statements should already have line numbers assigned. ??? Can we discard no-op statements earlier? */ + /* APPLE LOCAL begin Radar 6144634 */ + /* Normal expr stmts, including modify exprs, get the location where + the statement began, i.e. 'loc'. Assignments of Blocks to Block + pointer variables get the location of the end of the Block definition, + i.e. 'input_location', which should already be set by this point. */ if (stmt && EXPR_P (stmt)) - SET_EXPR_LOCATION (stmt, loc); + { + if (TREE_CODE (stmt) == MODIFY_EXPR + && TREE_CODE (TREE_TYPE (TREE_OPERAND (stmt, 0))) == BLOCK_POINTER_TYPE) + SET_EXPR_LOCATION (stmt, input_location); + else + SET_EXPR_LOCATION (stmt, loc); + } + /* APPLE LOCAL end Radar 6144634 */ } /* Parse a parenthesized condition from an if, do or while statement. @@ -6514,7 +6526,11 @@ objc_set_property_attr (0, NULL_TREE); c_parser_objc_property_attr_decl (parser); objc_property_attr_context = 0; + /* APPLE LOCAL weak_import on property 6676828 */ + note_objc_property_decl_context (); prop = c_parser_component_decl (parser); + /* APPLE LOCAL weak_import on property 6676828 */ + note_end_objc_property_decl_context (); /* Comma-separated properties are chained together in reverse order; add them one by one. */ prop = nreverse (prop); Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c Thu Mar 19 17:03:59 2009 @@ -4152,6 +4152,8 @@ tree newrhs; tree lhstype = TREE_TYPE (lhs); tree olhstype = lhstype; + /* APPLE LOCAL __block assign sequence point 6639533 */ + bool insert_sequence_point = false; /* APPLE LOCAL begin radar 4426814 */ if (c_dialect_objc () && flag_objc_gc) @@ -4179,6 +4181,38 @@ newrhs = rhs; + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + /* For byref = x;, we have to transform this into {( typeof(x) x' = + x; byref = x`; )} to ensure there is a sequence point before the + evaluation of the byref, inorder to ensure that the access + expression for byref doesn't start running before x is evaluated, + as it will access the __forwarding pointer and that must be done + after x is evaluated. */ + /* First we check to see if lhs is a byref... byrefs look like: + __Block_byref_X.__forwarding->x */ + if (TREE_CODE (lhs) == COMPONENT_REF) + { + tree inner = TREE_OPERAND (lhs, 0); + /* now check for -> */ + if (TREE_CODE (inner) == INDIRECT_REF) + { + inner = TREE_OPERAND (inner, 0); + if (TREE_CODE (inner) == COMPONENT_REF) + { + inner = TREE_OPERAND (inner, 0); + if (TREE_CODE (inner) == VAR_DECL + && COPYABLE_BYREF_LOCAL_VAR (inner)) + { + /* then we save the rhs. */ + rhs = save_expr (rhs); + /* And arrage for the sequence point to be inserted. */ + insert_sequence_point = true; + } + } + } + } + /* APPLE LOCAL end __block assign sequence point 6639533 */ + /* If a binary op has been requested, combine the old LHS value with the RHS producing the value we should actually store into the LHS. */ @@ -4193,7 +4227,13 @@ { result = objc_build_setter_call (lhs, newrhs); if (result) - return result; + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + { + if (insert_sequence_point) + result = build2 (COMPOUND_EXPR, TREE_TYPE (result), rhs, result); + return result; + } + /* APPLE LOCAL end __block assign sequence point 6639533 */ } /* APPLE LOCAL end C* property (Radar 4436866) */ @@ -4241,7 +4281,13 @@ { result = objc_generate_write_barrier (lhs, modifycode, newrhs); if (result) - return result; + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + { + if (insert_sequence_point) + result = build2 (COMPOUND_EXPR, TREE_TYPE (result), rhs, result); + return result; + } + /* APPLE LOCAL end __block assign sequence point 6639533 */ } /* Scan operands. */ @@ -4249,6 +4295,11 @@ result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs); TREE_SIDE_EFFECTS (result) = 1; + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + if (insert_sequence_point) + result = build2 (COMPOUND_EXPR, TREE_TYPE (result), rhs, result); + /* APPLE LOCAL end __block assign sequence point 6639533 */ + /* If we got the LHS in a different type for storing in, convert the result back to the nominal type of LHS so that the value we return always has the same type Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/cgraphunit.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/cgraphunit.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/cgraphunit.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/cgraphunit.c Thu Mar 19 17:03:59 2009 @@ -1313,6 +1313,7 @@ gcc_assert (node->global.inlined_to || !DECL_SAVED_TREE (decl) || IS_EXTERN_INLINE (decl)); } + } } Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/arm.c Thu Mar 19 17:03:59 2009 @@ -11928,6 +11928,12 @@ saved = bit_count (thumb_compute_save_reg_mask ()) * 4; if (TARGET_BACKTRACE) saved += 16; + /* APPLE LOCAL begin 6465387 exception handling interworking VFP save */ + /* Saved VFP registers in thumb mode aren't accounted for by + thumb1_compute_save_reg_mask() */ + if (current_function_has_nonlocal_label && arm_arch6) + saved += 64; + /* APPLE LOCAL end 6465387 exception handling interworking VFP save */ } /* Saved registers include the stack frame. */ @@ -14953,6 +14959,15 @@ if (IS_NAKED (arm_current_func_type ())) return bytes; + /* APPLE LOCAL begin 6465387 exception handling interworking VFP save */ + if (current_function_has_nonlocal_label && arm_arch6) + { + bytes += 4; + if (emit) + asm_fprintf (asm_out_file, "\tblx ___restore_vfp_d8_d15_regs\n"); + } + /* APPLE LOCAL end 6465387 exception handling interworking VFP save */ + live_regs_mask = thumb_compute_save_reg_mask (); high_regs_pushed = bit_count (live_regs_mask & 0x0f00); @@ -15726,6 +15741,14 @@ bytes += handle_thumb_pushpop (f, pushable_regs, 1, &cfa_offset, real_regs_mask, emit); } } + /* APPLE LOCAL begin 6465387 exception handling interworking VFP save */ + if (current_function_has_nonlocal_label && arm_arch6) + { + bytes += 4; + if (emit) + asm_fprintf (f, "\tblx ___save_vfp_d8_d15_regs\n"); + } + /* APPLE LOCAL end 6465387 exception handling interworking VFP save */ return bytes; } Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/lib1funcs.asm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/lib1funcs.asm?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/lib1funcs.asm (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/lib1funcs.asm Thu Mar 19 17:03:59 2009 @@ -1352,6 +1352,24 @@ #endif /* APPLE LOCAL end ARM 4790140 compact switch tables */ +/* APPLE LOCAL begin 6465387 exception handling interworking VFP save */ +#if (__ARM_ARCH__ == 6) +#ifdef L_save_vfp_d8_d15_regs + ARM_FUNC_START save_vfp_d8_d15_regs + vpush {d8-d15} + RET + FUNC_END save_vfp_d8_d15_regs +#endif + +#ifdef L_restore_vfp_d8_d15__regs + ARM_FUNC_START restore_vfp_d8_d15_regs + vpop {d8-d15} + RET + FUNC_END restore_vfp_d8_d15_regs +#endif +#endif +/* APPLE LOCAL end 6465387 exception handling interworking VFP save */ + #endif /* __symbian__ */ /* ------------------------------------------------------------------------ */ Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/t-darwin URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/t-darwin?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/t-darwin (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/arm/t-darwin Thu Mar 19 17:03:59 2009 @@ -13,6 +13,8 @@ _eqsf2vfp _nesf2vfp _ltsf2vfp _gtsf2vfp _lesf2vfp _gesf2vfp _unordsf2vfp \ _fixsfsivfp _fixunssfsivfp _floatsisfvfp _floatunssisfvfp \ _switchu8 _switch8 _switch16 _switch32 +# APPLE LOCAL 6465387 exception handling interworking VFP save +LIB1ASMFUNCS += _save_vfp_d8_d15_regs _restore_vfp_d8_d15__regs # APPLE LOCAL begin 5316398 improved float/double -> int64 functions LIB2FUNCS_EXCLUDE = _fixdfdi _fixunsdfdi _fixsfdi _fixunssfdi Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.c Thu Mar 19 17:03:59 2009 @@ -2074,6 +2074,13 @@ if (objc_method_decl (TREE_CODE (*node))) return NULL_TREE; /* APPLE LOCAL end radar 4733555 */ + /* APPLE LOCAL begin weak_import on property 6676828 */ + if (in_objc_property_decl_context ()) + { + *no_add_attrs = true; + return NULL_TREE; + } + /* APPLE LOCAL end weak_import on property 6676828 */ /* LLVM LOCAL 6652529 begin */ if ((TREE_CODE (*node) != FUNCTION_DECL && TREE_CODE (*node) != VAR_DECL) || !DECL_EXTERNAL (*node)) Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/darwin.h Thu Mar 19 17:03:59 2009 @@ -352,7 +352,8 @@ %(link_libgcc) %o %{fprofile-arcs|fprofile-generate|fcreate-profile|coverage:-lgcov} \ "/* APPLE LOCAL nested functions 4357979 */"\ %{fnested-functions: -allow_stack_execute} \ - %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %G %L}} \ +"/* APPLE LOCAL prefer -lSystem 6645902 */"\ + %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}} \ "/* APPLE LOCAL begin mainline 4.3 2006-10-31 4370146 */"\ %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} }}}}}}}}\n\ %{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\ @@ -568,6 +569,10 @@ %:version-compare(>= 10.5 mmacosx-version-min= -lcrt1.10.5.o)}" /* APPLE LOCAL end ARM 5683689 */ +/* APPLE LOCAL begin prefer -lSystem 6645902 */ +#define LINK_GCC_C_SEQUENCE_SPEC "%G %L" +/* APPLE LOCAL end prefer -lSystem 6645902 */ + /* Default Darwin ASM_SPEC, very simple. */ /* APPLE LOCAL begin kext weak_import 5935650 */ /* APPLE LOCAL begin radar 4161346 */ Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/darwin.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/darwin.h?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/darwin.h (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/darwin.h Thu Mar 19 17:03:59 2009 @@ -166,6 +166,14 @@ { "darwin_subarch", DARWIN_SUBARCH_SPEC }, /* APPLE LOCAL end mainline */ +/* APPLE LOCAL begin prefer -lSystem 6645902 */ +#undef LINK_GCC_C_SEQUENCE_SPEC +#define LINK_GCC_C_SEQUENCE_SPEC \ + "%{miphoneos-version-min=*: %G %L} \ + %{!miphoneos-version-min=*: \ + %{!static:%:version-compare(>= 10.6 mmacosx-version-min= -lSystem)} %G %L}" +/* APPLE LOCAL end prefer -lSystem 6645902 */ + /* Use the following macro for any Darwin/x86-specific command-line option translation. */ #define SUBTARGET_OPTION_TRANSLATE_TABLE \ Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.c Thu Mar 19 17:03:59 2009 @@ -16515,7 +16515,7 @@ tree float128_type; tree ftype; - /* APPLE LOCAL begin LLVM */ + /* LLVM LOCAL begin */ #ifdef ENABLE_LLVM /* LLVM doesn't initialize the RTL backend, so build_vector_type will assign all of these types BLKmode. This interferes with i386.c-specific @@ -16533,7 +16533,7 @@ TYPE_MODE (V8HI_type_node) = V8HImode; TYPE_MODE (V1DI_type_node) = V1DImode; #endif - /* APPLE LOCAL end LLVM */ + /* LLVM LOCAL end */ /* The __float80 type. */ if (TYPE_MODE (long_double_type_node) == XFmode) @@ -22152,13 +22152,13 @@ v = TREE_OPERAND (v, 0); if (TREE_CODE (v) == VAR_DECL && TREE_STATIC (v) -/* APPLE LOCAL begin LLVM */ +/* LLVM LOCAL begin */ /* DECL_RTL is not set for LLVM */ #ifndef ENABLE_LLVM && MEM_P (DECL_RTL (v)) #endif ) -/* APPLE LOCAL end LLVM */ +/* LLVM LOCAL end */ { note_alternative_entry_points (); return true; @@ -22169,13 +22169,13 @@ } if (TREE_CODE (v) == VAR_DECL && TREE_STATIC (v) -/* APPLE LOCAL begin LLVM */ +/* LLVM LOCAL begin */ /* DECL_RTL is not set for LLVM */ #ifndef ENABLE_LLVM && MEM_P (DECL_RTL (v)) #endif ) -/* APPLE LOCAL end LLVM */ +/* LLVM LOCAL end */ { note_alternative_entry_points (); return true; @@ -22832,19 +22832,7 @@ && (e->mod[0] == e->mod[1] || e->mod[1] == 0))) { - if (e->mod[0] == 'q' - && !(strcasecmp (opcode, "inc") == 0 - || strcasecmp (opcode, "or") == 0 - || strcasecmp (opcode, "idiv") == 0 - || strcasecmp (opcode, "movs") == 0 - || strcasecmp (opcode, "scas") == 0 - || strcasecmp (opcode, "dec") == 0 - || strcasecmp (opcode, "push") == 0 - || strcasecmp (opcode, "pop") == 0 - || strcasecmp (opcode, "mov") == 0)) - sprintf (buf, "%s%s", opcode, "ll"); - else - sprintf (buf, "%s%c", opcode, e->mod[0]); + sprintf (buf, "%s%c", opcode, e->mod[0]); *opcode_p = buf; } else if (argnum == 2 && e->mod[0] && e->mod[1]) Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.h?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.h (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/config/i386/i386.h Thu Mar 19 17:03:59 2009 @@ -2515,10 +2515,10 @@ /* Table of instructions that need extra constraints. Keep this table sorted. */ #undef TARGET_IASM_OP_CONSTRAINT #define TARGET_IASM_OP_CONSTRAINT \ - { "adc", 1, "+rm,r" }, \ - { "adc", 2, "ir,m" }, \ - { "add", 1, "+rm,r" }, \ - { "add", 2, "ir,m" }, \ + { "adc", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64 },\ + { "adc", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64 },\ + { "add", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64 },\ + { "add", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "addpd", 1, "+x"}, \ { "addpd", 2, "xm"}, \ { "addps", 1, "+x"}, \ @@ -2531,8 +2531,8 @@ { "addsubpd", 2, "xm"}, \ { "addsubps", 1, "+x"}, \ { "addsubps", 2, "xm"}, \ - { "and", 1, "+rm,r"}, \ - { "and", 2, "ir,m"}, \ + { "and", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "and", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "andnpd", 1, "+x"}, \ { "andnpd", 2, "xm"}, \ { "andnps", 1, "+x"}, \ @@ -2590,8 +2590,8 @@ { "cmovpo", 2, "rm"}, \ { "cmovs", 2, "rm"}, \ { "cmovz", 2, "rm"}, \ - { "cmp", 1, "rm,r"}, \ - { "cmp", 2, "ir,m"}, \ + { "cmp", 1, rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "cmp", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "cmpeqpd", 1, "=x"}, \ { "cmpeqpd", 2, "xm"}, \ { "cmpeqps", 1, "=x"}, \ @@ -2718,7 +2718,7 @@ { "cvttsd2si", 2, "xm"}, \ { "cvttss2si", 1, "=r"}, \ { "cvttss2si", 2, "xm"}, \ - { "dec", 1, "+" rm8rm16rm32}, \ + { "dec", 1, "+" rm8rm16rm32RM64},\ { "div", 1, rm8rm16rm32}, \ { "divpd", 1, "+x"}, \ { "divpd", 2, "xm"}, \ @@ -2912,8 +2912,8 @@ { "minsd", 2, "xm"}, \ { "minss", 1, "+x"}, \ { "minss", 2, "xm"}, \ - { "mov", 1, "=rm" S("4") ",r"},\ - { "mov", 2, "ri,rmi"}, \ + { "mov", 1, "=" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64}, \ + { "mov", 2, ri8 "," ri16 "," ri32 C RI64 "," rmi8 "," rmi16 "," rmi32 C RMI64}, \ { "movapd", 1, "=x,xm"}, \ { "movapd", 2, "xm,x"}, \ { "movaps", 1, "=x,xm"}, \ @@ -2987,8 +2987,8 @@ { "mulss", 2, "xm"}, \ { "neg", 1, "+" rm8rm16rm32}, \ { "not", 1, "+" rm8rm16rm32}, \ - { "or", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32},\ - { "or", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32},\ + { "or", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "or", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "orpd", 1, "+x"}, \ { "orpd", 2, "xm"}, \ { "orps", 1, "+x"}, \ @@ -3226,8 +3226,8 @@ { "stmxcsr", 1, "m"}, \ { "stos", 1, "=m"}, \ { "str", 1, "=q" S("2") "m"},\ - { "sub", 1, "=rm,r"}, \ - { "sub", 2, "ir,m"}, \ + { "sub", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "sub", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "subpd", 1, "+x"}, \ { "subpd", 2, "xm"}, \ { "subps", 1, "+x"}, \ @@ -3254,11 +3254,11 @@ { "verw", 1, rm16}, \ { "xadd", 1, "+" rm8 "," rm16 "," rm32},\ { "xadd", 2, r8 "," r16 "," r32},\ - { "xchg", 1, "+rm,r"}, \ - { "xchg", 2, "+r,m"}, \ + { "xchg", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "xchg", 2, "+" r8 "," r16 "," r32 C R64 "," m8 "," m16 "," m32 C M64},\ { "xlat", 1, "m"}, \ - { "xor", 1, "+rm,r"}, \ - { "xor", 2, "ri,m"}, \ + { "xor", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "xor", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "xorpd", 1, "+x"}, \ { "xorpd", 2, "xm"}, \ { "xorps", 1, "+x"}, \ Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/convert.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/convert.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/convert.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/convert.c Thu Mar 19 17:03:59 2009 @@ -38,11 +38,11 @@ #include "langhooks.h" #include "real.h" -/* APPLE LOCAL LLVM - begin */ +/* LLVM LOCAL - begin */ #ifdef ENABLE_LLVM #include "llvm.h" #endif -/* APPLE LOCAL LLVM - end */ +/* LLVM LOCAL - end */ /* Convert EXPR to some pointer or reference type TYPE. EXPR must be pointer, reference, integer, enumeral, or literal zero; Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/decl.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/decl.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/decl.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/decl.c Thu Mar 19 17:03:59 2009 @@ -5799,9 +5799,8 @@ /* APPLE LOCAL begin blocks 6040305 (cq) */ if (COPYABLE_BYREF_LOCAL_VAR (decl)) { if (DECL_EXTERNAL (decl) || TREE_STATIC (decl)) - { - warning (0, - "__block attribute is only allowed on local variables - ignored"); + { + error ("__block attribute on %q+D not allowed, only allowed on local variables", decl); COPYABLE_BYREF_LOCAL_VAR (decl) = 0; COPYABLE_BYREF_LOCAL_NONPOD (decl) = 0; } Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/name-lookup.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/name-lookup.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/name-lookup.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/name-lookup.c Thu Mar 19 17:03:59 2009 @@ -3415,7 +3415,10 @@ error ("strong using only meaningful at namespace scope"); else if (namespace != error_mark_node) { - if (!is_ancestor (current_namespace, namespace)) + /* APPLE LOCAL begin 10.5 debug mode 6621704 */ + if (! in_system_header + && !is_ancestor (current_namespace, namespace)) + /* APPLE LOCAL end 10.5 debug mode 6621704 */ error ("current namespace %qD does not enclose strongly used namespace %qD", current_namespace, namespace); DECL_NAMESPACE_ASSOCIATIONS (namespace) Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c Thu Mar 19 17:03:59 2009 @@ -6230,10 +6230,45 @@ tree build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs) { + /* APPLE LOCAL __block assign sequence point 6639533 */ + bool insert_sequence_point = false; + if (processing_template_decl) return build_min_nt (MODOP_EXPR, lhs, build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs); + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + /* For byref = x;, we have to transform this into ({ typeof(x) x' = + x; byref = x`; )} to ensure there is a sequence point before the + evaluation of the byref, inorder to ensure that the access + expression for byref doesn't start running before x is evaluated, + as it will access the __forwarding pointer and that must be done + after x is evaluated. */ + /* First we check to see if lhs is a byref... byrefs look like: + __Block_byref_X.__forwarding->x */ + if (TREE_CODE (lhs) == COMPONENT_REF) + { + tree inner = TREE_OPERAND (lhs, 0); + /* now check for -> */ + if (TREE_CODE (inner) == INDIRECT_REF) + { + inner = TREE_OPERAND (inner, 0); + if (TREE_CODE (inner) == COMPONENT_REF) + { + inner = TREE_OPERAND (inner, 0); + if (TREE_CODE (inner) == VAR_DECL + && COPYABLE_BYREF_LOCAL_VAR (inner)) + { + /* then we save the rhs. */ + rhs = save_expr (rhs); + /* And arrage for the sequence point to be inserted. */ + insert_sequence_point = true; + } + } + } + } + /* APPLE LOCAL end __block assign sequence point 6639533 */ + if (modifycode != NOP_EXPR) { tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs, @@ -6241,11 +6276,20 @@ /*overloaded_p=*/NULL); if (rval) { + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + if (insert_sequence_point) + rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), rhs, rval); + /* APPLE LOCAL end __block assign sequence point 6639533 */ TREE_NO_WARNING (rval) = 1; return rval; } } - return build_modify_expr (lhs, modifycode, rhs); + lhs = build_modify_expr (lhs, modifycode, rhs); + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + if (insert_sequence_point) + lhs = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), rhs, lhs); + /* APPLE LOCAL end __block assign sequence point 6639533 */ + return lhs; } Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/libgcov.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/libgcov.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/libgcov.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/libgcov.c Thu Mar 19 17:03:59 2009 @@ -35,7 +35,7 @@ #include "tm.h" /* APPLE LOCAL begin instant off 6414141 */ -#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) && !defined(__arm__) +#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) #include #if defined(VPROC_HAS_TRANSACTIONS) vproc_transaction_t vproc_transaction_begin(vproc_t virtual_proc) __attribute__((weak)); @@ -160,7 +160,7 @@ } /* APPLE LOCAL begin instant off 6414141 */ -#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) && !defined(__arm__) +#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) #if defined(VPROC_HAS_TRANSACTIONS) static vproc_transaction_t gcov_trans; #endif Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/ChangeLog.apple URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/ChangeLog.apple?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/ChangeLog.apple (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/ChangeLog.apple Thu Mar 19 17:03:59 2009 @@ -1,3 +1,8 @@ +2009-02-11 Fariborz Jahanian + + Radar 6545782 + g++.apple/block-no-trampoline-1.C: Add + 2009-01-22 Stuart Hastings Radar 6515001 Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g++.apple/debug.C URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g%2B%2B.apple/debug.C?rev=67338&view=auto ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g++.apple/debug.C (added) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g++.apple/debug.C Thu Mar 19 17:03:59 2009 @@ -0,0 +1,25 @@ +/* APPLE LOCAL file 10.5 debug mode 6621704 */ +/* { dg-do run { target *-*-darwin* } } */ +/* { dg-options "-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" } */ + +#define _GLIBCXX_DEBUG 1 + +#include +#include +#include + +std::string a; +std::map m; + +using namespace std; + +string a1; +map m1; + +main() { + m[1]=2; + a += "World\n"; + m1[1]=2; + a1 += "hi"; + cout << "Hello " << a; +} Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/obj-c++.dg/block-seq.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/obj-c%2B%2B.dg/block-seq.mm?rev=67338&view=auto ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/obj-c++.dg/block-seq.mm (added) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/obj-c++.dg/block-seq.mm Thu Mar 19 17:03:59 2009 @@ -0,0 +1,35 @@ +/* APPLE LOCAL file __block assign sequence point 6639533 */ +/* { dg-options "-framework Foundation -lobjc" } */ +/* { dg-do run { target i?86*-*-darwin* } } */ + +#import + + at interface MyClass : NSObject { +} + ++ (int)doSomethingWithBlock:(void (^)(void))block; + + at end + + at implementation MyClass + ++ (int)doSomethingWithBlock:(void (^)(void))block { + Block_copy(block); + return 2; +} + + at end + + +int main(void) { + [[NSAutoreleasePool alloc] init]; + __block int foo = 0; + void (^block)(void) = ^{ + foo = 1; + }; + foo = [MyClass doSomethingWithBlock:block]; + if (foo == 2) + return 0; + printf("foo: %d\n", foo); + return 1; +} Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/block-seq.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/block-seq.m?rev=67338&view=auto ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/block-seq.m (added) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/block-seq.m Thu Mar 19 17:03:59 2009 @@ -0,0 +1,35 @@ +/* APPLE LOCAL file __block assign sequence point 6639533 */ +/* { dg-options "-framework Foundation -lobjc" } */ +/* { dg-do run { target i?86*-*-darwin* } } */ + +#import + + at interface MyClass : NSObject { +} + ++ (int)doSomethingWithBlock:(void (^)(void))block; + + at end + + at implementation MyClass + ++ (int)doSomethingWithBlock:(void (^)(void))block { + Block_copy(block); + return 2; +} + + at end + + +int main(void) { + [[NSAutoreleasePool alloc] init]; + __block int foo = 0; + void (^block)(void) = ^{ + foo = 1; + }; + foo = [MyClass doSomethingWithBlock:block]; + if (foo == 2) + return 0; + printf("foo: %d\n", foo); + return 1; +} Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/import.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/import.m?rev=67338&view=auto ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/import.m (added) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/import.m Thu Mar 19 17:03:59 2009 @@ -0,0 +1,5 @@ +/* APPLE LOCAL file import valid for objc 4588440 */ +/* { dg-options "-pedantic" } */ + +#import +#assert Foo(1) /* { dg-warning "#assert is a GCC extension" } */ Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/property-weak.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/property-weak.m?rev=67338&view=auto ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/property-weak.m (added) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/objc.dg/property-weak.m Thu Mar 19 17:03:59 2009 @@ -0,0 +1,8 @@ +/* APPLE LOCAL file weak_import on property 6676828 */ +/* Ignore weak_import on properties. */ +/* Radar 6676828 */ +/* { dg-do compile { target *-*-darwin* } } */ + + at interface foo + at property(nonatomic) int foo __attribute__((weak_import)); + at end Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.h?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.h (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.h Thu Mar 19 17:03:59 2009 @@ -4604,6 +4604,12 @@ extern bool fields_compatible_p (tree, tree); extern tree find_compatible_field (tree, tree); +/* APPLE LOCAL begin weak_import on property 6676828 */ +extern void note_objc_property_decl_context (void); +extern void note_end_objc_property_decl_context (void); +extern bool in_objc_property_decl_context (void); +/* APPLE LOCAL end weak_import on property 6676828 */ + /* In function.c */ extern void expand_main_function (void); extern void init_dummy_function_start (void); Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c Thu Mar 19 17:03:59 2009 @@ -11,12 +11,12 @@ /* APPLE LOCAL begin Apple version */ #ifdef ENABLE_LLVM #ifdef LLVM_VERSION_INFO -#define VERSUFFIX " (Based on Apple Inc. build 5641) (LLVM build " LLVM_VERSION_INFO ")" +#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1)) (LLVM build " LLVM_VERSION_INFO ")" #else -#define VERSUFFIX " (Based on Apple Inc. build 5641) (LLVM build)" +#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1)) (LLVM build)" #endif #else -#define VERSUFFIX " (Based on Apple Inc. build 5641)" +#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1))" #endif /* APPLE LOCAL end Apple version */ Modified: llvm-gcc-4.2/branches/Apple/Dib/libcpp/directives.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/libcpp/directives.c?rev=67338&r1=67337&r2=67338&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/libcpp/directives.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/libcpp/directives.c Thu Mar 19 17:03:59 2009 @@ -352,7 +352,11 @@ /* Issue -pedantic warnings for extensions. */ if (CPP_PEDANTIC (pfile) && ! pfile->state.skipping - && dir->origin == EXTENSION) + /* APPLE LOCAL begin import valid for objc 4588440 */ + && dir->origin == EXTENSION + && (!CPP_OPTION (pfile, objc) + || dir != &dtable[T_IMPORT])) + /* APPLE LOCAL end import valid for objc 4588440 */ cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name); /* Traditionally, a directive is ignored unless its # is in From isanbard at gmail.com Thu Mar 19 17:06:49 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 22:06:49 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67339 - in /llvm-gcc-4.2/trunk: gcc/ gcc/config/ gcc/config/arm/ gcc/config/i386/ gcc/cp/ gcc/testsuite/ gcc/testsuite/g++.apple/ gcc/testsuite/obj-c++.dg/ gcc/testsuite/objc.dg/ libcpp/ Message-ID: <200903192206.n2JM6ou5004329@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 17:06:48 2009 New Revision: 67339 URL: http://llvm.org/viewvc/llvm-project?rev=67339&view=rev Log: Merge LLVM-GCC with Apple GCC 5642.1. Added: llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/debug.C llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/block-seq.mm llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/block-seq.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/import.m llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/property-weak.m Modified: llvm-gcc-4.2/trunk/gcc/ChangeLog.apple llvm-gcc-4.2/trunk/gcc/c-common.c llvm-gcc-4.2/trunk/gcc/c-decl.c llvm-gcc-4.2/trunk/gcc/c-parser.c llvm-gcc-4.2/trunk/gcc/c-typeck.c llvm-gcc-4.2/trunk/gcc/cgraphunit.c llvm-gcc-4.2/trunk/gcc/config/arm/arm.c llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm llvm-gcc-4.2/trunk/gcc/config/arm/t-darwin llvm-gcc-4.2/trunk/gcc/config/darwin.c llvm-gcc-4.2/trunk/gcc/config/darwin.h llvm-gcc-4.2/trunk/gcc/config/i386/darwin.h llvm-gcc-4.2/trunk/gcc/config/i386/i386.c llvm-gcc-4.2/trunk/gcc/config/i386/i386.h llvm-gcc-4.2/trunk/gcc/convert.c llvm-gcc-4.2/trunk/gcc/cp/decl.c llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c llvm-gcc-4.2/trunk/gcc/cp/typeck.c llvm-gcc-4.2/trunk/gcc/libgcov.c llvm-gcc-4.2/trunk/gcc/testsuite/ChangeLog.apple llvm-gcc-4.2/trunk/gcc/tree.h llvm-gcc-4.2/trunk/gcc/version.c llvm-gcc-4.2/trunk/libcpp/directives.c Modified: llvm-gcc-4.2/trunk/gcc/ChangeLog.apple URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/ChangeLog.apple?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/ChangeLog.apple (original) +++ llvm-gcc-4.2/trunk/gcc/ChangeLog.apple Thu Mar 19 17:06:48 2009 @@ -1,3 +1,22 @@ +2009-03-12 Caroline Tice + + Radar 6144634 + * c-parser.c (c_parser_statement_after_labels): When + re-setting the expression location at the end, use the input + location for Block pointer assignments. + +2009-02-25 Jim Grosbach + + Radar 6465387 + * gcc/config/arm/t-darwin (LIB1ASMFUNCS): Add _save_vfp_d8_d15_regs, + _restore_vfp_d8_d15_regs. + * gcc/config/arm/arm.c (handle_thumb_unexpanded_prologue, + handle_thumb_unexpanded_epilogue): Add call to + ___{save,restore}_vfp_d8_d15_regs when compiling a function + w/ a non-local label in Thumb1 mode for a v6 or later processor. + * gcc/config/arm/lib1funcs.asm (save_vfp_d8_d15_regs, + restore_vfp_d8_d15_regs): New functions, built only for v6 ARM. + 2009-02-11 Fariborz Jahanian Radar 6573923 Modified: llvm-gcc-4.2/trunk/gcc/c-common.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-common.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/c-common.c (original) +++ llvm-gcc-4.2/trunk/gcc/c-common.c Thu Mar 19 17:06:48 2009 @@ -6150,7 +6150,7 @@ *no_add_attrs = true; if (!(*node) || TREE_CODE (*node) != VAR_DECL) { - warning (OPT_Wattributes, "__block attribute can be specified on variables only - ignored"); + error ("__block attribute can be specified on variables only"); return NULL_TREE; } arg_ident = TREE_VALUE (args); @@ -7319,6 +7319,9 @@ #define ri8 r8 "i" #define ri16 r16 "i" #define ri32 r32 "i" +#define rmi8 ri8 m8 +#define rmi16 ri16 m16 +#define rmi32 ri32 m32 #define rel8 "s" S("1") #define m32fp "m" S("3") #define m64fp "m" S("6") @@ -7328,6 +7331,7 @@ #define M64 X(m64) #define RM64 R64 M64 #define RI64 X(R64 "i") +#define RMI64 RI64 M64 #define r32R64 r32 R64 #define r16r32R64 r16 r32 R64 #define rm32RM64 rm32 RM64 @@ -7435,6 +7439,9 @@ #undef ri8 #undef ri16 #undef ri32 +#undef rmi8 +#undef rmi16 +#undef rmi32 #undef rel8 #undef m32fp #undef m64fp @@ -7443,6 +7450,8 @@ #undef m32fpm64fpm80fp #undef M64 #undef RM64 +#undef RI64 +#undef RMI64 #undef r32R64 #undef r16r32R64 #undef rm32RM64 Modified: llvm-gcc-4.2/trunk/gcc/c-decl.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-decl.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/c-decl.c (original) +++ llvm-gcc-4.2/trunk/gcc/c-decl.c Thu Mar 19 17:06:48 2009 @@ -3938,8 +3938,7 @@ { if (DECL_EXTERNAL (decl) || TREE_STATIC (decl)) { - warning (0, - "__block attribute is only allowed on local variables - ignored"); + error ("__block attribute on %q+D not allowed, only allowed on local variables", decl); COPYABLE_BYREF_LOCAL_VAR (decl) = 0; COPYABLE_BYREF_LOCAL_NONPOD (decl) = 0; } Modified: llvm-gcc-4.2/trunk/gcc/c-parser.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-parser.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/c-parser.c (original) +++ llvm-gcc-4.2/trunk/gcc/c-parser.c Thu Mar 19 17:06:48 2009 @@ -4143,8 +4143,20 @@ (recursively) all of the component statements should already have line numbers assigned. ??? Can we discard no-op statements earlier? */ + /* APPLE LOCAL begin Radar 6144634 */ + /* Normal expr stmts, including modify exprs, get the location where + the statement began, i.e. 'loc'. Assignments of Blocks to Block + pointer variables get the location of the end of the Block definition, + i.e. 'input_location', which should already be set by this point. */ if (stmt && EXPR_P (stmt)) - SET_EXPR_LOCATION (stmt, loc); + { + if (TREE_CODE (stmt) == MODIFY_EXPR + && TREE_CODE (TREE_TYPE (TREE_OPERAND (stmt, 0))) == BLOCK_POINTER_TYPE) + SET_EXPR_LOCATION (stmt, input_location); + else + SET_EXPR_LOCATION (stmt, loc); + } + /* APPLE LOCAL end Radar 6144634 */ } /* Parse a parenthesized condition from an if, do or while statement. @@ -6514,7 +6526,11 @@ objc_set_property_attr (0, NULL_TREE); c_parser_objc_property_attr_decl (parser); objc_property_attr_context = 0; + /* APPLE LOCAL weak_import on property 6676828 */ + note_objc_property_decl_context (); prop = c_parser_component_decl (parser); + /* APPLE LOCAL weak_import on property 6676828 */ + note_end_objc_property_decl_context (); /* Comma-separated properties are chained together in reverse order; add them one by one. */ prop = nreverse (prop); Modified: llvm-gcc-4.2/trunk/gcc/c-typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-typeck.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/c-typeck.c (original) +++ llvm-gcc-4.2/trunk/gcc/c-typeck.c Thu Mar 19 17:06:48 2009 @@ -4152,6 +4152,8 @@ tree newrhs; tree lhstype = TREE_TYPE (lhs); tree olhstype = lhstype; + /* APPLE LOCAL __block assign sequence point 6639533 */ + bool insert_sequence_point = false; /* APPLE LOCAL begin radar 4426814 */ if (c_dialect_objc () && flag_objc_gc) @@ -4179,6 +4181,38 @@ newrhs = rhs; + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + /* For byref = x;, we have to transform this into {( typeof(x) x' = + x; byref = x`; )} to ensure there is a sequence point before the + evaluation of the byref, inorder to ensure that the access + expression for byref doesn't start running before x is evaluated, + as it will access the __forwarding pointer and that must be done + after x is evaluated. */ + /* First we check to see if lhs is a byref... byrefs look like: + __Block_byref_X.__forwarding->x */ + if (TREE_CODE (lhs) == COMPONENT_REF) + { + tree inner = TREE_OPERAND (lhs, 0); + /* now check for -> */ + if (TREE_CODE (inner) == INDIRECT_REF) + { + inner = TREE_OPERAND (inner, 0); + if (TREE_CODE (inner) == COMPONENT_REF) + { + inner = TREE_OPERAND (inner, 0); + if (TREE_CODE (inner) == VAR_DECL + && COPYABLE_BYREF_LOCAL_VAR (inner)) + { + /* then we save the rhs. */ + rhs = save_expr (rhs); + /* And arrage for the sequence point to be inserted. */ + insert_sequence_point = true; + } + } + } + } + /* APPLE LOCAL end __block assign sequence point 6639533 */ + /* If a binary op has been requested, combine the old LHS value with the RHS producing the value we should actually store into the LHS. */ @@ -4193,7 +4227,13 @@ { result = objc_build_setter_call (lhs, newrhs); if (result) - return result; + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + { + if (insert_sequence_point) + result = build2 (COMPOUND_EXPR, TREE_TYPE (result), rhs, result); + return result; + } + /* APPLE LOCAL end __block assign sequence point 6639533 */ } /* APPLE LOCAL end C* property (Radar 4436866) */ @@ -4241,7 +4281,13 @@ { result = objc_generate_write_barrier (lhs, modifycode, newrhs); if (result) - return result; + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + { + if (insert_sequence_point) + result = build2 (COMPOUND_EXPR, TREE_TYPE (result), rhs, result); + return result; + } + /* APPLE LOCAL end __block assign sequence point 6639533 */ } /* Scan operands. */ @@ -4249,6 +4295,11 @@ result = build2 (MODIFY_EXPR, lhstype, lhs, newrhs); TREE_SIDE_EFFECTS (result) = 1; + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + if (insert_sequence_point) + result = build2 (COMPOUND_EXPR, TREE_TYPE (result), rhs, result); + /* APPLE LOCAL end __block assign sequence point 6639533 */ + /* If we got the LHS in a different type for storing in, convert the result back to the nominal type of LHS so that the value we return always has the same type Modified: llvm-gcc-4.2/trunk/gcc/cgraphunit.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cgraphunit.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cgraphunit.c (original) +++ llvm-gcc-4.2/trunk/gcc/cgraphunit.c Thu Mar 19 17:06:48 2009 @@ -1313,6 +1313,7 @@ gcc_assert (node->global.inlined_to || !DECL_SAVED_TREE (decl) || IS_EXTERN_INLINE (decl)); } + } } Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/arm.c (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.c Thu Mar 19 17:06:48 2009 @@ -11928,6 +11928,12 @@ saved = bit_count (thumb_compute_save_reg_mask ()) * 4; if (TARGET_BACKTRACE) saved += 16; + /* APPLE LOCAL begin 6465387 exception handling interworking VFP save */ + /* Saved VFP registers in thumb mode aren't accounted for by + thumb1_compute_save_reg_mask() */ + if (current_function_has_nonlocal_label && arm_arch6) + saved += 64; + /* APPLE LOCAL end 6465387 exception handling interworking VFP save */ } /* Saved registers include the stack frame. */ @@ -14953,6 +14959,15 @@ if (IS_NAKED (arm_current_func_type ())) return bytes; + /* APPLE LOCAL begin 6465387 exception handling interworking VFP save */ + if (current_function_has_nonlocal_label && arm_arch6) + { + bytes += 4; + if (emit) + asm_fprintf (asm_out_file, "\tblx ___restore_vfp_d8_d15_regs\n"); + } + /* APPLE LOCAL end 6465387 exception handling interworking VFP save */ + live_regs_mask = thumb_compute_save_reg_mask (); high_regs_pushed = bit_count (live_regs_mask & 0x0f00); @@ -15726,6 +15741,14 @@ bytes += handle_thumb_pushpop (f, pushable_regs, 1, &cfa_offset, real_regs_mask, emit); } } + /* APPLE LOCAL begin 6465387 exception handling interworking VFP save */ + if (current_function_has_nonlocal_label && arm_arch6) + { + bytes += 4; + if (emit) + asm_fprintf (f, "\tblx ___save_vfp_d8_d15_regs\n"); + } + /* APPLE LOCAL end 6465387 exception handling interworking VFP save */ return bytes; } Modified: llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/lib1funcs.asm Thu Mar 19 17:06:48 2009 @@ -1356,6 +1356,24 @@ #endif /* APPLE LOCAL end ARM 4790140 compact switch tables */ +/* APPLE LOCAL begin 6465387 exception handling interworking VFP save */ +#if (__ARM_ARCH__ == 6) +#ifdef L_save_vfp_d8_d15_regs + ARM_FUNC_START save_vfp_d8_d15_regs + vpush {d8-d15} + RET + FUNC_END save_vfp_d8_d15_regs +#endif + +#ifdef L_restore_vfp_d8_d15__regs + ARM_FUNC_START restore_vfp_d8_d15_regs + vpop {d8-d15} + RET + FUNC_END restore_vfp_d8_d15_regs +#endif +#endif +/* APPLE LOCAL end 6465387 exception handling interworking VFP save */ + #endif /* __symbian__ */ /* ------------------------------------------------------------------------ */ Modified: llvm-gcc-4.2/trunk/gcc/config/arm/t-darwin URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/t-darwin?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/arm/t-darwin (original) +++ llvm-gcc-4.2/trunk/gcc/config/arm/t-darwin Thu Mar 19 17:06:48 2009 @@ -13,6 +13,8 @@ _eqsf2vfp _nesf2vfp _ltsf2vfp _gtsf2vfp _lesf2vfp _gesf2vfp _unordsf2vfp \ _fixsfsivfp _fixunssfsivfp _floatsisfvfp _floatunssisfvfp \ _switchu8 _switch8 _switch16 _switch32 +# APPLE LOCAL 6465387 exception handling interworking VFP save +LIB1ASMFUNCS += _save_vfp_d8_d15_regs _restore_vfp_d8_d15__regs # APPLE LOCAL begin 5316398 improved float/double -> int64 functions LIB2FUNCS_EXCLUDE = _fixdfdi _fixunsdfdi _fixsfdi _fixunssfdi Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/darwin.c (original) +++ llvm-gcc-4.2/trunk/gcc/config/darwin.c Thu Mar 19 17:06:48 2009 @@ -2074,6 +2074,13 @@ if (objc_method_decl (TREE_CODE (*node))) return NULL_TREE; /* APPLE LOCAL end radar 4733555 */ + /* APPLE LOCAL begin weak_import on property 6676828 */ + if (in_objc_property_decl_context ()) + { + *no_add_attrs = true; + return NULL_TREE; + } + /* APPLE LOCAL end weak_import on property 6676828 */ /* LLVM LOCAL 6652529 begin */ if ((TREE_CODE (*node) != FUNCTION_DECL && TREE_CODE (*node) != VAR_DECL) || !DECL_EXTERNAL (*node)) Modified: llvm-gcc-4.2/trunk/gcc/config/darwin.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/darwin.h?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/darwin.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/darwin.h Thu Mar 19 17:06:48 2009 @@ -352,7 +352,8 @@ %(link_libgcc) %o %{fprofile-arcs|fprofile-generate|fcreate-profile|coverage:-lgcov} \ "/* APPLE LOCAL nested functions 4357979 */"\ %{fnested-functions: -allow_stack_execute} \ - %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %G %L}} \ +"/* APPLE LOCAL prefer -lSystem 6645902 */"\ + %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}} \ "/* APPLE LOCAL begin mainline 4.3 2006-10-31 4370146 */"\ %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} %{F*} }}}}}}}}\n\ %{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\ @@ -568,6 +569,10 @@ %:version-compare(>= 10.5 mmacosx-version-min= -lcrt1.10.5.o)}" /* APPLE LOCAL end ARM 5683689 */ +/* APPLE LOCAL begin prefer -lSystem 6645902 */ +#define LINK_GCC_C_SEQUENCE_SPEC "%G %L" +/* APPLE LOCAL end prefer -lSystem 6645902 */ + /* Default Darwin ASM_SPEC, very simple. */ /* APPLE LOCAL begin kext weak_import 5935650 */ /* APPLE LOCAL begin radar 4161346 */ Modified: llvm-gcc-4.2/trunk/gcc/config/i386/darwin.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/darwin.h?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/i386/darwin.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/i386/darwin.h Thu Mar 19 17:06:48 2009 @@ -166,6 +166,14 @@ { "darwin_subarch", DARWIN_SUBARCH_SPEC }, /* APPLE LOCAL end mainline */ +/* APPLE LOCAL begin prefer -lSystem 6645902 */ +#undef LINK_GCC_C_SEQUENCE_SPEC +#define LINK_GCC_C_SEQUENCE_SPEC \ + "%{miphoneos-version-min=*: %G %L} \ + %{!miphoneos-version-min=*: \ + %{!static:%:version-compare(>= 10.6 mmacosx-version-min= -lSystem)} %G %L}" +/* APPLE LOCAL end prefer -lSystem 6645902 */ + /* Use the following macro for any Darwin/x86-specific command-line option translation. */ #define SUBTARGET_OPTION_TRANSLATE_TABLE \ Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/i386/i386.c (original) +++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.c Thu Mar 19 17:06:48 2009 @@ -16515,7 +16515,7 @@ tree float128_type; tree ftype; - /* APPLE LOCAL begin LLVM */ + /* LLVM LOCAL begin */ #ifdef ENABLE_LLVM /* LLVM doesn't initialize the RTL backend, so build_vector_type will assign all of these types BLKmode. This interferes with i386.c-specific @@ -16533,7 +16533,7 @@ TYPE_MODE (V8HI_type_node) = V8HImode; TYPE_MODE (V1DI_type_node) = V1DImode; #endif - /* APPLE LOCAL end LLVM */ + /* LLVM LOCAL end */ /* The __float80 type. */ if (TYPE_MODE (long_double_type_node) == XFmode) @@ -22152,13 +22152,13 @@ v = TREE_OPERAND (v, 0); if (TREE_CODE (v) == VAR_DECL && TREE_STATIC (v) -/* APPLE LOCAL begin LLVM */ +/* LLVM LOCAL begin */ /* DECL_RTL is not set for LLVM */ #ifndef ENABLE_LLVM && MEM_P (DECL_RTL (v)) #endif ) -/* APPLE LOCAL end LLVM */ +/* LLVM LOCAL end */ { note_alternative_entry_points (); return true; @@ -22169,13 +22169,13 @@ } if (TREE_CODE (v) == VAR_DECL && TREE_STATIC (v) -/* APPLE LOCAL begin LLVM */ +/* LLVM LOCAL begin */ /* DECL_RTL is not set for LLVM */ #ifndef ENABLE_LLVM && MEM_P (DECL_RTL (v)) #endif ) -/* APPLE LOCAL end LLVM */ +/* LLVM LOCAL end */ { note_alternative_entry_points (); return true; @@ -22832,19 +22832,7 @@ && (e->mod[0] == e->mod[1] || e->mod[1] == 0))) { - if (e->mod[0] == 'q' - && !(strcasecmp (opcode, "inc") == 0 - || strcasecmp (opcode, "or") == 0 - || strcasecmp (opcode, "idiv") == 0 - || strcasecmp (opcode, "movs") == 0 - || strcasecmp (opcode, "scas") == 0 - || strcasecmp (opcode, "dec") == 0 - || strcasecmp (opcode, "push") == 0 - || strcasecmp (opcode, "pop") == 0 - || strcasecmp (opcode, "mov") == 0)) - sprintf (buf, "%s%s", opcode, "ll"); - else - sprintf (buf, "%s%c", opcode, e->mod[0]); + sprintf (buf, "%s%c", opcode, e->mod[0]); *opcode_p = buf; } else if (argnum == 2 && e->mod[0] && e->mod[1]) Modified: llvm-gcc-4.2/trunk/gcc/config/i386/i386.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/i386.h?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/i386/i386.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/i386/i386.h Thu Mar 19 17:06:48 2009 @@ -2515,10 +2515,10 @@ /* Table of instructions that need extra constraints. Keep this table sorted. */ #undef TARGET_IASM_OP_CONSTRAINT #define TARGET_IASM_OP_CONSTRAINT \ - { "adc", 1, "+rm,r" }, \ - { "adc", 2, "ir,m" }, \ - { "add", 1, "+rm,r" }, \ - { "add", 2, "ir,m" }, \ + { "adc", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64 },\ + { "adc", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64 },\ + { "add", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64 },\ + { "add", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "addpd", 1, "+x"}, \ { "addpd", 2, "xm"}, \ { "addps", 1, "+x"}, \ @@ -2531,8 +2531,8 @@ { "addsubpd", 2, "xm"}, \ { "addsubps", 1, "+x"}, \ { "addsubps", 2, "xm"}, \ - { "and", 1, "+rm,r"}, \ - { "and", 2, "ir,m"}, \ + { "and", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "and", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "andnpd", 1, "+x"}, \ { "andnpd", 2, "xm"}, \ { "andnps", 1, "+x"}, \ @@ -2590,8 +2590,8 @@ { "cmovpo", 2, "rm"}, \ { "cmovs", 2, "rm"}, \ { "cmovz", 2, "rm"}, \ - { "cmp", 1, "rm,r"}, \ - { "cmp", 2, "ir,m"}, \ + { "cmp", 1, rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "cmp", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "cmpeqpd", 1, "=x"}, \ { "cmpeqpd", 2, "xm"}, \ { "cmpeqps", 1, "=x"}, \ @@ -2718,7 +2718,7 @@ { "cvttsd2si", 2, "xm"}, \ { "cvttss2si", 1, "=r"}, \ { "cvttss2si", 2, "xm"}, \ - { "dec", 1, "+" rm8rm16rm32}, \ + { "dec", 1, "+" rm8rm16rm32RM64},\ { "div", 1, rm8rm16rm32}, \ { "divpd", 1, "+x"}, \ { "divpd", 2, "xm"}, \ @@ -2912,8 +2912,8 @@ { "minsd", 2, "xm"}, \ { "minss", 1, "+x"}, \ { "minss", 2, "xm"}, \ - { "mov", 1, "=rm" S("4") ",r"},\ - { "mov", 2, "ri,rmi"}, \ + { "mov", 1, "=" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64}, \ + { "mov", 2, ri8 "," ri16 "," ri32 C RI64 "," rmi8 "," rmi16 "," rmi32 C RMI64}, \ { "movapd", 1, "=x,xm"}, \ { "movapd", 2, "xm,x"}, \ { "movaps", 1, "=x,xm"}, \ @@ -2987,8 +2987,8 @@ { "mulss", 2, "xm"}, \ { "neg", 1, "+" rm8rm16rm32}, \ { "not", 1, "+" rm8rm16rm32}, \ - { "or", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32},\ - { "or", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32},\ + { "or", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "or", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "orpd", 1, "+x"}, \ { "orpd", 2, "xm"}, \ { "orps", 1, "+x"}, \ @@ -3226,8 +3226,8 @@ { "stmxcsr", 1, "m"}, \ { "stos", 1, "=m"}, \ { "str", 1, "=q" S("2") "m"},\ - { "sub", 1, "=rm,r"}, \ - { "sub", 2, "ir,m"}, \ + { "sub", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "sub", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "subpd", 1, "+x"}, \ { "subpd", 2, "xm"}, \ { "subps", 1, "+x"}, \ @@ -3254,11 +3254,11 @@ { "verw", 1, rm16}, \ { "xadd", 1, "+" rm8 "," rm16 "," rm32},\ { "xadd", 2, r8 "," r16 "," r32},\ - { "xchg", 1, "+rm,r"}, \ - { "xchg", 2, "+r,m"}, \ + { "xchg", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "xchg", 2, "+" r8 "," r16 "," r32 C R64 "," m8 "," m16 "," m32 C M64},\ { "xlat", 1, "m"}, \ - { "xor", 1, "+rm,r"}, \ - { "xor", 2, "ri,m"}, \ + { "xor", 1, "+" rm8 "," rm16 "," rm32 C RM64 "," r8 "," r16 "," r32 C R64},\ + { "xor", 2, ri8 "," ri16 "," ri32 C RI64 "," m8 "," m16 "," m32 C M64},\ { "xorpd", 1, "+x"}, \ { "xorpd", 2, "xm"}, \ { "xorps", 1, "+x"}, \ Modified: llvm-gcc-4.2/trunk/gcc/convert.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/convert.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/convert.c (original) +++ llvm-gcc-4.2/trunk/gcc/convert.c Thu Mar 19 17:06:48 2009 @@ -38,11 +38,11 @@ #include "langhooks.h" #include "real.h" -/* APPLE LOCAL LLVM - begin */ +/* LLVM LOCAL - begin */ #ifdef ENABLE_LLVM #include "llvm.h" #endif -/* APPLE LOCAL LLVM - end */ +/* LLVM LOCAL - end */ /* Convert EXPR to some pointer or reference type TYPE. EXPR must be pointer, reference, integer, enumeral, or literal zero; Modified: llvm-gcc-4.2/trunk/gcc/cp/decl.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/decl.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/decl.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/decl.c Thu Mar 19 17:06:48 2009 @@ -5799,9 +5799,8 @@ /* APPLE LOCAL begin blocks 6040305 (cq) */ if (COPYABLE_BYREF_LOCAL_VAR (decl)) { if (DECL_EXTERNAL (decl) || TREE_STATIC (decl)) - { - warning (0, - "__block attribute is only allowed on local variables - ignored"); + { + error ("__block attribute on %q+D not allowed, only allowed on local variables", decl); COPYABLE_BYREF_LOCAL_VAR (decl) = 0; COPYABLE_BYREF_LOCAL_NONPOD (decl) = 0; } Modified: llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/name-lookup.c Thu Mar 19 17:06:48 2009 @@ -3415,7 +3415,10 @@ error ("strong using only meaningful at namespace scope"); else if (namespace != error_mark_node) { - if (!is_ancestor (current_namespace, namespace)) + /* APPLE LOCAL begin 10.5 debug mode 6621704 */ + if (! in_system_header + && !is_ancestor (current_namespace, namespace)) + /* APPLE LOCAL end 10.5 debug mode 6621704 */ error ("current namespace %qD does not enclose strongly used namespace %qD", current_namespace, namespace); DECL_NAMESPACE_ASSOCIATIONS (namespace) Modified: llvm-gcc-4.2/trunk/gcc/cp/typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/typeck.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/typeck.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/typeck.c Thu Mar 19 17:06:48 2009 @@ -6230,10 +6230,45 @@ tree build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs) { + /* APPLE LOCAL __block assign sequence point 6639533 */ + bool insert_sequence_point = false; + if (processing_template_decl) return build_min_nt (MODOP_EXPR, lhs, build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs); + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + /* For byref = x;, we have to transform this into ({ typeof(x) x' = + x; byref = x`; )} to ensure there is a sequence point before the + evaluation of the byref, inorder to ensure that the access + expression for byref doesn't start running before x is evaluated, + as it will access the __forwarding pointer and that must be done + after x is evaluated. */ + /* First we check to see if lhs is a byref... byrefs look like: + __Block_byref_X.__forwarding->x */ + if (TREE_CODE (lhs) == COMPONENT_REF) + { + tree inner = TREE_OPERAND (lhs, 0); + /* now check for -> */ + if (TREE_CODE (inner) == INDIRECT_REF) + { + inner = TREE_OPERAND (inner, 0); + if (TREE_CODE (inner) == COMPONENT_REF) + { + inner = TREE_OPERAND (inner, 0); + if (TREE_CODE (inner) == VAR_DECL + && COPYABLE_BYREF_LOCAL_VAR (inner)) + { + /* then we save the rhs. */ + rhs = save_expr (rhs); + /* And arrage for the sequence point to be inserted. */ + insert_sequence_point = true; + } + } + } + } + /* APPLE LOCAL end __block assign sequence point 6639533 */ + if (modifycode != NOP_EXPR) { tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs, @@ -6241,11 +6276,20 @@ /*overloaded_p=*/NULL); if (rval) { + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + if (insert_sequence_point) + rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), rhs, rval); + /* APPLE LOCAL end __block assign sequence point 6639533 */ TREE_NO_WARNING (rval) = 1; return rval; } } - return build_modify_expr (lhs, modifycode, rhs); + lhs = build_modify_expr (lhs, modifycode, rhs); + /* APPLE LOCAL begin __block assign sequence point 6639533 */ + if (insert_sequence_point) + lhs = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), rhs, lhs); + /* APPLE LOCAL end __block assign sequence point 6639533 */ + return lhs; } Modified: llvm-gcc-4.2/trunk/gcc/libgcov.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/libgcov.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/libgcov.c (original) +++ llvm-gcc-4.2/trunk/gcc/libgcov.c Thu Mar 19 17:06:48 2009 @@ -35,7 +35,7 @@ #include "tm.h" /* APPLE LOCAL begin instant off 6414141 */ -#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) && !defined(__arm__) +#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) #include #if defined(VPROC_HAS_TRANSACTIONS) vproc_transaction_t vproc_transaction_begin(vproc_t virtual_proc) __attribute__((weak)); @@ -160,7 +160,7 @@ } /* APPLE LOCAL begin instant off 6414141 */ -#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) && !defined(__arm__) +#if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) #if defined(VPROC_HAS_TRANSACTIONS) static vproc_transaction_t gcov_trans; #endif Modified: llvm-gcc-4.2/trunk/gcc/testsuite/ChangeLog.apple URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/ChangeLog.apple?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/ChangeLog.apple (original) +++ llvm-gcc-4.2/trunk/gcc/testsuite/ChangeLog.apple Thu Mar 19 17:06:48 2009 @@ -1,3 +1,8 @@ +2009-02-11 Fariborz Jahanian + + Radar 6545782 + g++.apple/block-no-trampoline-1.C: Add + 2009-01-22 Stuart Hastings Radar 6515001 Added: llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/debug.C URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/g%2B%2B.apple/debug.C?rev=67339&view=auto ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/debug.C (added) +++ llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/debug.C Thu Mar 19 17:06:48 2009 @@ -0,0 +1,25 @@ +/* APPLE LOCAL file 10.5 debug mode 6621704 */ +/* { dg-do run { target *-*-darwin* } } */ +/* { dg-options "-isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5" } */ + +#define _GLIBCXX_DEBUG 1 + +#include +#include +#include + +std::string a; +std::map m; + +using namespace std; + +string a1; +map m1; + +main() { + m[1]=2; + a += "World\n"; + m1[1]=2; + a1 += "hi"; + cout << "Hello " << a; +} Added: llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/block-seq.mm URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/obj-c%2B%2B.dg/block-seq.mm?rev=67339&view=auto ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/block-seq.mm (added) +++ llvm-gcc-4.2/trunk/gcc/testsuite/obj-c++.dg/block-seq.mm Thu Mar 19 17:06:48 2009 @@ -0,0 +1,35 @@ +/* APPLE LOCAL file __block assign sequence point 6639533 */ +/* { dg-options "-framework Foundation -lobjc" } */ +/* { dg-do run { target i?86*-*-darwin* } } */ + +#import + + at interface MyClass : NSObject { +} + ++ (int)doSomethingWithBlock:(void (^)(void))block; + + at end + + at implementation MyClass + ++ (int)doSomethingWithBlock:(void (^)(void))block { + Block_copy(block); + return 2; +} + + at end + + +int main(void) { + [[NSAutoreleasePool alloc] init]; + __block int foo = 0; + void (^block)(void) = ^{ + foo = 1; + }; + foo = [MyClass doSomethingWithBlock:block]; + if (foo == 2) + return 0; + printf("foo: %d\n", foo); + return 1; +} Added: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/block-seq.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/block-seq.m?rev=67339&view=auto ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/block-seq.m (added) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/block-seq.m Thu Mar 19 17:06:48 2009 @@ -0,0 +1,35 @@ +/* APPLE LOCAL file __block assign sequence point 6639533 */ +/* { dg-options "-framework Foundation -lobjc" } */ +/* { dg-do run { target i?86*-*-darwin* } } */ + +#import + + at interface MyClass : NSObject { +} + ++ (int)doSomethingWithBlock:(void (^)(void))block; + + at end + + at implementation MyClass + ++ (int)doSomethingWithBlock:(void (^)(void))block { + Block_copy(block); + return 2; +} + + at end + + +int main(void) { + [[NSAutoreleasePool alloc] init]; + __block int foo = 0; + void (^block)(void) = ^{ + foo = 1; + }; + foo = [MyClass doSomethingWithBlock:block]; + if (foo == 2) + return 0; + printf("foo: %d\n", foo); + return 1; +} Added: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/import.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/import.m?rev=67339&view=auto ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/import.m (added) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/import.m Thu Mar 19 17:06:48 2009 @@ -0,0 +1,5 @@ +/* APPLE LOCAL file import valid for objc 4588440 */ +/* { dg-options "-pedantic" } */ + +#import +#assert Foo(1) /* { dg-warning "#assert is a GCC extension" } */ Added: llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/property-weak.m URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/property-weak.m?rev=67339&view=auto ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/property-weak.m (added) +++ llvm-gcc-4.2/trunk/gcc/testsuite/objc.dg/property-weak.m Thu Mar 19 17:06:48 2009 @@ -0,0 +1,8 @@ +/* APPLE LOCAL file weak_import on property 6676828 */ +/* Ignore weak_import on properties. */ +/* Radar 6676828 */ +/* { dg-do compile { target *-*-darwin* } } */ + + at interface foo + at property(nonatomic) int foo __attribute__((weak_import)); + at end Modified: llvm-gcc-4.2/trunk/gcc/tree.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/tree.h?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/tree.h (original) +++ llvm-gcc-4.2/trunk/gcc/tree.h Thu Mar 19 17:06:48 2009 @@ -4604,6 +4604,12 @@ extern bool fields_compatible_p (tree, tree); extern tree find_compatible_field (tree, tree); +/* APPLE LOCAL begin weak_import on property 6676828 */ +extern void note_objc_property_decl_context (void); +extern void note_end_objc_property_decl_context (void); +extern bool in_objc_property_decl_context (void); +/* APPLE LOCAL end weak_import on property 6676828 */ + /* In function.c */ extern void expand_main_function (void); extern void init_dummy_function_start (void); Modified: llvm-gcc-4.2/trunk/gcc/version.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/version.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/version.c (original) +++ llvm-gcc-4.2/trunk/gcc/version.c Thu Mar 19 17:06:48 2009 @@ -11,12 +11,12 @@ /* APPLE LOCAL begin Apple version */ #ifdef ENABLE_LLVM #ifdef LLVM_VERSION_INFO -#define VERSUFFIX " (Based on Apple Inc. build 5641) (LLVM build " LLVM_VERSION_INFO ")" +#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1)) (LLVM build " LLVM_VERSION_INFO ")" #else -#define VERSUFFIX " (Based on Apple Inc. build 5641) (LLVM build)" +#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1)) (LLVM build)" #endif #else -#define VERSUFFIX " (Based on Apple Inc. build 5641)" +#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1))" #endif /* APPLE LOCAL end Apple version */ Modified: llvm-gcc-4.2/trunk/libcpp/directives.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/libcpp/directives.c?rev=67339&r1=67338&r2=67339&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/libcpp/directives.c (original) +++ llvm-gcc-4.2/trunk/libcpp/directives.c Thu Mar 19 17:06:48 2009 @@ -352,7 +352,11 @@ /* Issue -pedantic warnings for extensions. */ if (CPP_PEDANTIC (pfile) && ! pfile->state.skipping - && dir->origin == EXTENSION) + /* APPLE LOCAL begin import valid for objc 4588440 */ + && dir->origin == EXTENSION + && (!CPP_OPTION (pfile, objc) + || dir != &dtable[T_IMPORT])) + /* APPLE LOCAL end import valid for objc 4588440 */ cpp_error (pfile, CPP_DL_PEDWARN, "#%s is a GCC extension", dir->name); /* Traditionally, a directive is ignored unless its # is in From isanbard at gmail.com Thu Mar 19 17:13:20 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 22:13:20 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67341 - /llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.c Message-ID: <200903192213.n2JMDK9j004552@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 17:13:20 2009 New Revision: 67341 URL: http://llvm.org/viewvc/llvm-project?rev=67341&view=rev Log: This file had a merge problem. Fixed. Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.c Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.c?rev=67341&r1=67340&r2=67341&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/tree.c Thu Mar 19 17:13:20 2009 @@ -7961,4 +7961,19 @@ } #endif /* LLVM LOCAL end */ + +/* APPLE LOCAL begin weak_import on property 6676828 */ +static GTY(()) int objc_property_decl_context; + +void note_objc_property_decl_context (void) { + objc_property_decl_context = 1; +} +void note_end_objc_property_decl_context (void) { + objc_property_decl_context = 0; +} +bool in_objc_property_decl_context (void) { + return objc_property_decl_context; +} +/* APPLE LOCAL end weak_import on property 6676828 */ + #include "gt-tree.h" From isanbard at gmail.com Thu Mar 19 17:14:10 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 22:14:10 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67342 - /llvm-gcc-4.2/trunk/gcc/tree.c Message-ID: <200903192214.n2JMEAjl004597@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 17:14:10 2009 New Revision: 67342 URL: http://llvm.org/viewvc/llvm-project?rev=67342&view=rev Log: This file had a merge problem. Fixed. Modified: llvm-gcc-4.2/trunk/gcc/tree.c Modified: llvm-gcc-4.2/trunk/gcc/tree.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/tree.c?rev=67342&r1=67341&r2=67342&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/tree.c (original) +++ llvm-gcc-4.2/trunk/gcc/tree.c Thu Mar 19 17:14:10 2009 @@ -7961,4 +7961,19 @@ } #endif /* LLVM LOCAL end */ + +/* APPLE LOCAL begin weak_import on property 6676828 */ +static GTY(()) int objc_property_decl_context; + +void note_objc_property_decl_context (void) { + objc_property_decl_context = 1; +} +void note_end_objc_property_decl_context (void) { + objc_property_decl_context = 0; +} +bool in_objc_property_decl_context (void) { + return objc_property_decl_context; +} +/* APPLE LOCAL end weak_import on property 6676828 */ + #include "gt-tree.h" From isanbard at gmail.com Thu Mar 19 17:23:24 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 22:23:24 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67344 - /llvm-gcc-4.2/trunk/gcc/version.c Message-ID: <200903192223.n2JMNOFr004919@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 17:23:24 2009 New Revision: 67344 URL: http://llvm.org/viewvc/llvm-project?rev=67344&view=rev Log: Put version string in correct format. Modified: llvm-gcc-4.2/trunk/gcc/version.c Modified: llvm-gcc-4.2/trunk/gcc/version.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/version.c?rev=67344&r1=67343&r2=67344&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/version.c (original) +++ llvm-gcc-4.2/trunk/gcc/version.c Thu Mar 19 17:23:24 2009 @@ -11,12 +11,12 @@ /* APPLE LOCAL begin Apple version */ #ifdef ENABLE_LLVM #ifdef LLVM_VERSION_INFO -#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1)) (LLVM build " LLVM_VERSION_INFO ")" +#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1) (LLVM build " LLVM_VERSION_INFO ")" #else -#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1)) (LLVM build)" +#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1) (LLVM build)" #endif #else -#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1))" +#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1)" #endif /* APPLE LOCAL end Apple version */ From isanbard at gmail.com Thu Mar 19 17:23:34 2009 From: isanbard at gmail.com (Bill Wendling) Date: Thu, 19 Mar 2009 22:23:34 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67345 - /llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c Message-ID: <200903192223.n2JMNYmx004935@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 17:23:34 2009 New Revision: 67345 URL: http://llvm.org/viewvc/llvm-project?rev=67345&view=rev Log: Put version string in correct format. Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c?rev=67345&r1=67344&r2=67345&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c Thu Mar 19 17:23:34 2009 @@ -11,12 +11,12 @@ /* APPLE LOCAL begin Apple version */ #ifdef ENABLE_LLVM #ifdef LLVM_VERSION_INFO -#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1)) (LLVM build " LLVM_VERSION_INFO ")" +#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1) (LLVM build " LLVM_VERSION_INFO ")" #else -#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1)) (LLVM build)" +#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1) (LLVM build)" #endif #else -#define VERSUFFIX " (Based on Apple Inc. build 5641 (dot 1))" +#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1)" #endif /* APPLE LOCAL end Apple version */ From sebastian.redl at getdesigned.at Thu Mar 19 18:26:53 2009 From: sebastian.redl at getdesigned.at (Sebastian Redl) Date: Thu, 19 Mar 2009 23:26:53 -0000 Subject: [llvm-commits] [llvm] r67347 - in /llvm/trunk: CMakeLists.txt include/llvm/CodeGen/ScheduleDAG.h include/llvm/Support/CommandLine.h include/llvm/User.h lib/Analysis/CMakeLists.txt lib/CodeGen/LiveIntervalAnalysis.cpp lib/System/Win32/Alarm.inc lib/System/Win32/Signals.inc utils/TableGen/TGParser.h Message-ID: <200903192326.n2JNQrpk007400@zion.cs.uiuc.edu> Author: cornedbee Date: Thu Mar 19 18:26:52 2009 New Revision: 67347 URL: http://llvm.org/viewvc/llvm-project?rev=67347&view=rev Log: Fix the Win32 VS2008 build: - Make type declarations match the struct/class keyword of the definition. - Move AddSignalHandler into the namespace where it belongs. - Correctly call functions from template base. - Some other small changes. With this patch, LLVM and Clang should build properly and with far less noise under VS2008. Modified: llvm/trunk/CMakeLists.txt llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h llvm/trunk/include/llvm/Support/CommandLine.h llvm/trunk/include/llvm/User.h llvm/trunk/lib/Analysis/CMakeLists.txt llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp llvm/trunk/lib/System/Win32/Alarm.inc llvm/trunk/lib/System/Win32/Signals.inc llvm/trunk/utils/TableGen/TGParser.h Modified: llvm/trunk/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/CMakeLists.txt (original) +++ llvm/trunk/CMakeLists.txt Thu Mar 19 18:26:52 2009 @@ -145,7 +145,7 @@ add_definitions( -D_SCL_SECURE_NO_WARNINGS -DCRT_NONSTDC_NO_WARNINGS ) add_definitions( -D_SCL_SECURE_NO_DEPRECATE ) add_definitions( -wd4146 -wd4503 -wd4996 -wd4800 -wd4244 -wd4624 ) - add_definitions( -wd4355 -wd4715 ) + add_definitions( -wd4355 -wd4715 -wd4180 -wd4345 -wd4224 ) endif( MSVC ) include_directories( ${LLVM_BINARY_DIR}/include ${LLVM_MAIN_INCLUDE_DIR}) Modified: llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h (original) +++ llvm/trunk/include/llvm/CodeGen/ScheduleDAG.h Thu Mar 19 18:26:52 2009 @@ -23,7 +23,7 @@ #include "llvm/ADT/PointerIntPair.h" namespace llvm { - struct SUnit; + class SUnit; class MachineConstantPool; class MachineFunction; class MachineModuleInfo; Modified: llvm/trunk/include/llvm/Support/CommandLine.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CommandLine.h?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/CommandLine.h (original) +++ llvm/trunk/include/llvm/Support/CommandLine.h Thu Mar 19 18:26:52 2009 @@ -833,8 +833,8 @@ typename ParserClass::parser_data_type(); if (Parser.parse(*this, ArgName, Arg, Val)) return true; // Parse error! - setValue(Val); - setPosition(pos); + this->setValue(Val); + this->setPosition(pos); return false; } Modified: llvm/trunk/include/llvm/User.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/User.h?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/include/llvm/User.h (original) +++ llvm/trunk/include/llvm/User.h Thu Mar 19 18:26:52 2009 @@ -84,6 +84,10 @@ void operator delete(void*, unsigned) { assert(0 && "Constructor throws?"); } + /// placement delete - required by std, but never called. + void operator delete(void*, unsigned, bool) { + assert(0 && "Constructor throws?"); + } protected: template static Use &OpFrom(const U *that) { return Idx < 0 Modified: llvm/trunk/lib/Analysis/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CMakeLists.txt?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/CMakeLists.txt (original) +++ llvm/trunk/lib/Analysis/CMakeLists.txt Thu Mar 19 18:26:52 2009 @@ -16,6 +16,7 @@ IntervalPartition.cpp LibCallAliasAnalysis.cpp LibCallSemantics.cpp + LiveValues.cpp LoopInfo.cpp LoopPass.cpp LoopVR.cpp Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original) +++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Thu Mar 19 18:26:52 2009 @@ -2042,7 +2042,7 @@ if (CanFold && !Ops.empty()) { if (tryFoldMemoryOperand(MI, vrm, NULL, index, Ops, true, Slot,VReg)){ Folded = true; - if (FoundUse > 0) { + if (FoundUse) { // Also folded uses, do not issue a load. eraseRestoreInfo(Id, index, VReg, RestoreMBBs, RestoreIdxes); nI.removeRange(getLoadIndex(index), getUseIndex(index)+1); Modified: llvm/trunk/lib/System/Win32/Alarm.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Alarm.inc?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Alarm.inc (original) +++ llvm/trunk/lib/System/Win32/Alarm.inc Thu Mar 19 18:26:52 2009 @@ -39,5 +39,5 @@ extern "C" void __stdcall Sleep(unsigned long); void sys::Sleep(unsigned n) { - Sleep(n*1000); + ::Sleep(n*1000); } Modified: llvm/trunk/lib/System/Win32/Signals.inc URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Signals.inc?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/lib/System/Win32/Signals.inc (original) +++ llvm/trunk/lib/System/Win32/Signals.inc Thu Mar 19 18:26:52 2009 @@ -14,6 +14,7 @@ #include "Win32.h" #include #include +#include #ifdef __MINGW32__ #include @@ -111,6 +112,17 @@ InterruptFunction = IF; LeaveCriticalSection(&CriticalSection); } + + +/// AddSignalHandler - Add a function to be called when a signal is delivered +/// to the process. The handler can have a cookie passed to it to identify +/// what instance of the handler it is. +void sys::AddSignalHandler(void (*FnPtr)(void *), void *Cookie) { + if (CallBacksToRun == 0) + CallBacksToRun = new std::vector >(); + CallBacksToRun->push_back(std::make_pair(FnPtr, Cookie)); + RegisterHandler(); +} } static void Cleanup() { @@ -256,13 +268,3 @@ return FALSE; } -/// AddSignalHandler - Add a function to be called when a signal is delivered -/// to the process. The handler can have a cookie passed to it to identify -/// what instance of the handler it is. -void llvm::sys::AddSignalHandler(void (*FnPtr)(void *), void *Cookie) { - if (CallBacksToRun == 0) - CallBacksToRun = new std::vector >(); - CallBacksToRun->push_back(std::make_pair(FnPtr, Cookie)); - RegisterHandler(); -} - Modified: llvm/trunk/utils/TableGen/TGParser.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TGParser.h?rev=67347&r1=67346&r2=67347&view=diff ============================================================================== --- llvm/trunk/utils/TableGen/TGParser.h (original) +++ llvm/trunk/utils/TableGen/TGParser.h Thu Mar 19 18:26:52 2009 @@ -24,7 +24,7 @@ struct RecTy; struct Init; struct MultiClass; - class SubClassReference; + struct SubClassReference; struct LetRecord { std::string Name; From evan.cheng at apple.com Thu Mar 19 19:14:09 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 20 Mar 2009 00:14:09 -0000 Subject: [llvm-commits] [llvm] r67349 - in /llvm/trunk/test: BugPoint/misopt-basictest.ll lib/llvm.exp Message-ID: <200903200014.n2K0E9sH009046@zion.cs.uiuc.edu> Author: evancheng Date: Thu Mar 19 19:14:09 2009 New Revision: 67349 URL: http://llvm.org/viewvc/llvm-project?rev=67349&view=rev Log: Fix typo's. Modified: llvm/trunk/test/BugPoint/misopt-basictest.ll llvm/trunk/test/lib/llvm.exp Modified: llvm/trunk/test/BugPoint/misopt-basictest.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/misopt-basictest.ll?rev=67349&r1=67348&r2=67349&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/misopt-basictest.ll (original) +++ llvm/trunk/test/BugPoint/misopt-basictest.ll Thu Mar 19 19:14:09 2009 @@ -1,4 +1,4 @@ -; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes %bugpoint_tops +; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes %bugpoint_topts @.LC0 = internal global [13 x i8] c"Hello World\0A\00" ; <[13 x i8]*> [#uses=1] Modified: llvm/trunk/test/lib/llvm.exp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lib/llvm.exp?rev=67349&r1=67348&r2=67349&view=diff ============================================================================== --- llvm/trunk/test/lib/llvm.exp (original) +++ llvm/trunk/test/lib/llvm.exp Thu Mar 19 19:14:09 2009 @@ -77,8 +77,8 @@ regsub -all {%llvmdsymutil} $new_line "$llvmdsymutil" new_line #replace %llvmlibsdir with configure library directory regsub -all {%llvmlibsdir} $new_line "$llvmlibsdir" new_line - #replace %bugpoint_tops with actual bugpoint target options - regsub -all {%bugpoint_tops} $new_line "$bugpoint_topts" new_line + #replace %bugpoint_topts with actual bugpoint target options + regsub -all {%bugpoint_topts} $new_line "$bugpoint_topts" new_line #replace %p with path to source, regsub -all {%p} $new_line [file join $srcdir $subdir] new_line #replace %s with filename From gohman at apple.com Thu Mar 19 19:37:16 2009 From: gohman at apple.com (Dan Gohman) Date: Thu, 19 Mar 2009 17:37:16 -0700 Subject: [llvm-commits] register subclass patch! In-Reply-To: <275e64e40903181850o50261d7sd9885b9b7934bee8@mail.gmail.com> References: <275e64e40903181728t4c19e43by485489101c403d6@mail.gmail.com> <275e64e40903181850o50261d7sd9885b9b7934bee8@mail.gmail.com> Message-ID: <5288BD21-99A1-4E78-86E5-D1CA2782A923@apple.com> On Mar 18, 2009, at 6:50 PM, Bruno Cardoso Lopes wrote: > Hi Dan, > >> Instead of creating a separate register class, could you use just >> FGR32 and then mark the odd registers as non-allocatable >> when the ABI requires it? > > By marking them non-allocatable you mean making changes to > allocation_order_begin/end so the odd registers doesn't get allocated > by getAllocatableSetForRC, right? > It seems a better approach to me indeed :) Yes. That and making getReservedRegs do the right thing. Dan From gohman at apple.com Thu Mar 19 20:28:21 2009 From: gohman at apple.com (Dan Gohman) Date: Fri, 20 Mar 2009 01:28:21 -0000 Subject: [llvm-commits] [llvm] r67357 - /llvm/trunk/lib/Analysis/LiveValues.cpp Message-ID: <200903200128.n2K1SLn2012901@zion.cs.uiuc.edu> Author: djg Date: Thu Mar 19 20:28:21 2009 New Revision: 67357 URL: http://llvm.org/viewvc/llvm-project?rev=67357&view=rev Log: The last use in a block that doesn't have successors (return or unreachable) is a kill. Modified: llvm/trunk/lib/Analysis/LiveValues.cpp Modified: llvm/trunk/lib/Analysis/LiveValues.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LiveValues.cpp?rev=67357&r1=67356&r2=67357&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/LiveValues.cpp (original) +++ llvm/trunk/lib/Analysis/LiveValues.cpp Thu Mar 19 20:28:21 2009 @@ -131,6 +131,11 @@ // Note the block in which this use occurs. M.Used.insert(UseBB); + // If the use block doesn't have successors, the value can be + // considered killed. + if (succ_begin(UseBB) == succ_end(UseBB)) + M.Killed.insert(UseBB); + // Observe whether the value is used outside of the loop in which // it is defined. Switch to an enclosing loop if necessary. for (; L; L = L->getParentLoop()) From isanbard at gmail.com Thu Mar 19 22:10:34 2009 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 20 Mar 2009 03:10:34 -0000 Subject: [llvm-commits] [llvm] r67358 - /llvm/tags/Apple/llvmCore-2104/ Message-ID: <200903200310.n2K3AYKQ018063@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 22:10:31 2009 New Revision: 67358 URL: http://llvm.org/viewvc/llvm-project?rev=67358&view=rev Log: Creating llvmCore-2104 from Dib branch. Added: llvm/tags/Apple/llvmCore-2104/ - copied from r67357, llvm/branches/Apple/Dib/ From isanbard at gmail.com Thu Mar 19 22:11:02 2009 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 20 Mar 2009 03:11:02 -0000 Subject: [llvm-commits] [llvm] r67359 - /llvm/tags/Apple/llvmgcc42-2104/ Message-ID: <200903200311.n2K3B2B2018088@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 22:11:02 2009 New Revision: 67359 URL: http://llvm.org/viewvc/llvm-project?rev=67359&view=rev Log: Creating llvmgcc42-2104 from Dib branch. Added: llvm/tags/Apple/llvmgcc42-2104/ - copied from r67358, llvm-gcc-4.2/branches/Apple/Dib/ From isanbard at gmail.com Thu Mar 19 22:17:14 2009 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 20 Mar 2009 03:17:14 -0000 Subject: [llvm-commits] [llvm] r67360 - /llvm/tags/Apple/llvmgcc42-2104/ Message-ID: <200903200317.n2K3HFZN018381@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 22:17:14 2009 New Revision: 67360 URL: http://llvm.org/viewvc/llvm-project?rev=67360&view=rev Log: Put tag in proper place. Removed: llvm/tags/Apple/llvmgcc42-2104/ From isanbard at gmail.com Thu Mar 19 22:17:15 2009 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 20 Mar 2009 03:17:15 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67360 - /llvm-gcc-4.2/tags/Apple/llvmgcc42-2104/ Message-ID: <200903200317.n2K3HFQM018387@zion.cs.uiuc.edu> Author: void Date: Thu Mar 19 22:17:14 2009 New Revision: 67360 URL: http://llvm.org/viewvc/llvm-project?rev=67360&view=rev Log: Put tag in proper place. Added: llvm-gcc-4.2/tags/Apple/llvmgcc42-2104/ - copied from r67359, llvm/tags/Apple/llvmgcc42-2104/ From wangmp at apple.com Fri Mar 20 00:06:58 2009 From: wangmp at apple.com (Mon P Wang) Date: Fri, 20 Mar 2009 05:06:58 -0000 Subject: [llvm-commits] [llvm] r67363 - in /llvm/trunk: include/llvm/Target/TargetOptions.h lib/Target/TargetMachine.cpp Message-ID: <200903200506.n2K56xYg023894@zion.cs.uiuc.edu> Author: wangmp Date: Fri Mar 20 00:06:58 2009 New Revision: 67363 URL: http://llvm.org/viewvc/llvm-project?rev=67363&view=rev Log: Added option to enable generating less precise mad (multiply addition) for those architectures that support the instruction. Modified: llvm/trunk/include/llvm/Target/TargetOptions.h llvm/trunk/lib/Target/TargetMachine.cpp Modified: llvm/trunk/include/llvm/Target/TargetOptions.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetOptions.h?rev=67363&r1=67362&r2=67363&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetOptions.h (original) +++ llvm/trunk/include/llvm/Target/TargetOptions.h Fri Mar 20 00:06:58 2009 @@ -26,6 +26,14 @@ /// elimination optimization, this option should disable it. extern bool NoFramePointerElim; + /// LessPreciseFPMAD - This flag is enabled when the + /// -enable-fp-mad is specified on the command line. When this flag is off + /// (the default), the code generator is not allowed to generate mad + /// (multiply add) if the result is "less precise" than doing those operations + /// individually. + extern bool LessPreciseFPMADOption; + extern bool LessPreciseFPMAD(); + /// NoExcessFPPrecision - This flag is enabled when the /// -disable-excess-fp-precision flag is specified on the command line. When /// this flag is off (the default), the code generator is allowed to produce @@ -39,7 +47,7 @@ /// this flag is off (the default), the code generator is not allowed to /// produce results that are "less precise" than IEEE allows. This includes /// use of X86 instructions like FSIN and FCOS instead of libcalls. - /// UnsafeFPMath implies FiniteOnlyFPMath. + /// UnsafeFPMath implies FiniteOnlyFPMath and LessPreciseFPMAD. extern bool UnsafeFPMath; /// FiniteOnlyFPMath - This returns true when the -enable-finite-only-fp-math Modified: llvm/trunk/lib/Target/TargetMachine.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachine.cpp?rev=67363&r1=67362&r2=67363&view=diff ============================================================================== --- llvm/trunk/lib/Target/TargetMachine.cpp (original) +++ llvm/trunk/lib/Target/TargetMachine.cpp Fri Mar 20 00:06:58 2009 @@ -22,6 +22,7 @@ // namespace llvm { + bool LessPreciseFPMADOption; bool PrintMachineCode; bool NoFramePointerElim; bool NoExcessFPPrecision; @@ -59,6 +60,11 @@ cl::location(NoExcessFPPrecision), cl::init(false)); static cl::opt +EnableFPMAD("enable-fp-mad", + cl::desc("Enable less precise MAD instructions to be generated"), + cl::location(LessPreciseFPMADOption), + cl::init(false)); +static cl::opt EnableUnsafeFPMath("enable-unsafe-fp-math", cl::desc("Enable optimizations that may decrease FP precision"), cl::location(UnsafeFPMath), @@ -198,6 +204,12 @@ } namespace llvm { + /// LessPreciseFPMAD - This flag return true when -enable-fp-mad option + /// is specified on the command line. When this flag is off(default), the + /// code generator is not allowed to generate mad (multiply add) if the + /// result is "less precise" than doing those operations individually. + bool LessPreciseFPMAD() { return UnsafeFPMath || LessPreciseFPMADOption; } + /// FiniteOnlyFPMath - This returns true when the -enable-finite-only-fp-math /// option is specified on the command line. If this returns false (default), /// the code generator is not allowed to assume that FP arithmetic arguments From sabre at nondot.org Fri Mar 20 00:08:24 2009 From: sabre at nondot.org (Chris Lattner) Date: Fri, 20 Mar 2009 05:08:24 -0000 Subject: [llvm-commits] [llvm] r67364 - /llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Message-ID: <200903200508.n2K58OYT023981@zion.cs.uiuc.edu> Author: lattner Date: Fri Mar 20 00:08:24 2009 New Revision: 67364 URL: http://llvm.org/viewvc/llvm-project?rev=67364&view=rev Log: Apply the patch requested in PR3846. Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp?rev=67364&r1=67363&r2=67364&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp (original) +++ llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Fri Mar 20 00:08:24 2009 @@ -574,7 +574,7 @@ break; } - if (DoIncr) ++I; + if (DoIncr && I != BB->end()) ++I; // Update register states. if (RS && MI) RS->forward(MI); From clattner at apple.com Fri Mar 20 00:36:51 2009 From: clattner at apple.com (Chris Lattner) Date: Thu, 19 Mar 2009 22:36:51 -0700 Subject: [llvm-commits] [llvm] r67363 - in /llvm/trunk: include/llvm/Target/TargetOptions.h lib/Target/TargetMachine.cpp In-Reply-To: <200903200506.n2K56xYg023894@zion.cs.uiuc.edu> References: <200903200506.n2K56xYg023894@zion.cs.uiuc.edu> Message-ID: <5DEAD829-24A5-410C-B835-3C0B9DA3C5AC@apple.com> On Mar 19, 2009, at 10:06 PM, Mon P Wang wrote: > Author: wangmp > Date: Fri Mar 20 00:06:58 2009 > New Revision: 67363 > > URL: http://llvm.org/viewvc/llvm-project?rev=67363&view=rev > Log: > Added option to enable generating less precise mad (multiply addition) > for those architectures that support the instruction. Hi Mon Ping, Is this specifically to support FMA instructions that elide the rounding step, or is this for "even less precise" FMAs? -Chris From clattner at apple.com Fri Mar 20 00:37:37 2009 From: clattner at apple.com (Chris Lattner) Date: Thu, 19 Mar 2009 22:37:37 -0700 Subject: [llvm-commits] [llvm] r67311 - in /llvm/trunk: include/llvm/Transforms/IPO/InlinerPass.h lib/Analysis/IPA/CallGraph.cpp lib/Transforms/IPO/Inliner.cpp lib/Transforms/IPO/PruneEH.cpp In-Reply-To: <4BB2AE32-F7BB-4E80-936E-93B6572D5F65@apple.com> References: <200903191803.n2JI3uXt024444@zion.cs.uiuc.edu> <74B0921B-C927-4FA7-BC04-0B7B265534EE@apple.com> <08C333D8-4942-4A81-AA69-8DF9021FEE71@apple.com> <4BB2AE32-F7BB-4E80-936E-93B6572D5F65@apple.com> Message-ID: <2862CD41-40A5-42AD-8B82-05781A0F9152@apple.com> On Mar 19, 2009, at 1:34 PM, Evan Cheng wrote: >>> Should this use SmallPtrSet instead of std::set? >> >> If I'm reading the doc right, iterating through a SmallPtrSet visits >> elements in nondeterministic order; we don't want that here. > > Right. But I don't see SCCFunctions being iterated. Also, std::set is also nondeterministic as well. -Chris From nicholas at mxc.ca Fri Mar 20 00:41:03 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Fri, 20 Mar 2009 00:41:03 -0500 Subject: [llvm-commits] CVS: llvm-www/OpenProjects.html Message-ID: <200903200541.n2K5f3a1025635@zion.cs.uiuc.edu> Changes in directory llvm-www: OpenProjects.html updated: 1.46 -> 1.47 --- Log message: Add devirtualization. --- Diffs of the changes: (+2 -1) OpenProjects.html | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm-www/OpenProjects.html diff -u llvm-www/OpenProjects.html:1.46 llvm-www/OpenProjects.html:1.47 --- llvm-www/OpenProjects.html:1.46 Mon Mar 16 10:19:44 2009 +++ llvm-www/OpenProjects.html Fri Mar 20 00:38:40 2009 @@ -401,6 +401,7 @@ Predictive Commoning +
  • Type inference (aka. devirtualization)
  • @@ -506,7 +507,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"> LLVM Compiler Infrastructure
    - Last modified: $Date: 2009/03/16 15:19:44 $ + Last modified: $Date: 2009/03/20 05:38:40 $ From nicholas at mxc.ca Fri Mar 20 00:49:57 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Fri, 20 Mar 2009 00:49:57 -0500 Subject: [llvm-commits] CVS: llvm-www/OpenProjects.html Message-ID: <200903200549.n2K5nv0a026455@zion.cs.uiuc.edu> Changes in directory llvm-www: OpenProjects.html updated: 1.47 -> 1.48 --- Log message: Nocapture has been implemented! --- Diffs of the changes: (+1 -7) OpenProjects.html | 8 +------- 1 files changed, 1 insertion(+), 7 deletions(-) Index: llvm-www/OpenProjects.html diff -u llvm-www/OpenProjects.html:1.47 llvm-www/OpenProjects.html:1.48 --- llvm-www/OpenProjects.html:1.47 Fri Mar 20 00:38:40 2009 +++ llvm-www/OpenProjects.html Fri Mar 20 00:49:37 2009 @@ -266,12 +266,6 @@ themselves. It seems natural to want to take advantage of this:

      -
    1. An easy project is to add the -'nocapture' attribute to the LLVM IR and have passes infer and -propagate it around. Its presence can significantly improve local -alias analysis (by making more variables "not escape") at very -low cost.
    2. -
    3. The globals mod/ref pass basically does really simple and cheap bottom-up context sensitive alias analysis. It being simple and cheap are really important, but there are simple things that we could do to @@ -507,7 +501,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"> LLVM Compiler Infrastructure
      - Last modified: $Date: 2009/03/20 05:38:40 $ + Last modified: $Date: 2009/03/20 05:49:37 $ From monping at apple.com Fri Mar 20 01:04:39 2009 From: monping at apple.com (Mon Ping Wang) Date: Thu, 19 Mar 2009 23:04:39 -0700 Subject: [llvm-commits] [llvm] r67363 - in /llvm/trunk: include/llvm/Target/TargetOptions.h lib/Target/TargetMachine.cpp In-Reply-To: <5DEAD829-24A5-410C-B835-3C0B9DA3C5AC@apple.com> References: <200903200506.n2K56xYg023894@zion.cs.uiuc.edu> <5DEAD829-24A5-410C-B835-3C0B9DA3C5AC@apple.com> Message-ID: <6746915A-B6FA-4A23-B8AB-0BB9D7E7C811@apple.com> Hi Chris, This is to support FMAs that can generate less precise results primarily due to how it handles rounding, e.g., some architecture will truncate the result of a*b before adding it to c. -- Mon Ping On Mar 19, 2009, at 10:36 PM, Chris Lattner wrote: > > On Mar 19, 2009, at 10:06 PM, Mon P Wang wrote: > >> Author: wangmp >> Date: Fri Mar 20 00:06:58 2009 >> New Revision: 67363 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=67363&view=rev >> Log: >> Added option to enable generating less precise mad (multiply >> addition) >> for those architectures that support the instruction. > > Hi Mon Ping, > > Is this specifically to support FMA instructions that elide the > rounding step, or is this for "even less precise" FMAs? > > -Chris > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From isanbard at gmail.com Fri Mar 20 02:46:15 2009 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 20 Mar 2009 07:46:15 -0000 Subject: [llvm-commits] [llvm] r67367 - in /llvm/branches/Apple/Dib: include/llvm/Target/TargetOptions.h lib/Target/TargetMachine.cpp Message-ID: <200903200746.n2K7kFeN001399@zion.cs.uiuc.edu> Author: void Date: Fri Mar 20 02:46:14 2009 New Revision: 67367 URL: http://llvm.org/viewvc/llvm-project?rev=67367&view=rev Log: --- Merging (from foreign repository) r67363 into '.': U include/llvm/Target/TargetOptions.h U lib/Target/TargetMachine.cpp Added option to enable generating less precise mad (multiply addition) for those architectures that support the instruction. Modified: llvm/branches/Apple/Dib/include/llvm/Target/TargetOptions.h llvm/branches/Apple/Dib/lib/Target/TargetMachine.cpp Modified: llvm/branches/Apple/Dib/include/llvm/Target/TargetOptions.h URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/include/llvm/Target/TargetOptions.h?rev=67367&r1=67366&r2=67367&view=diff ============================================================================== --- llvm/branches/Apple/Dib/include/llvm/Target/TargetOptions.h (original) +++ llvm/branches/Apple/Dib/include/llvm/Target/TargetOptions.h Fri Mar 20 02:46:14 2009 @@ -26,6 +26,14 @@ /// elimination optimization, this option should disable it. extern bool NoFramePointerElim; + /// LessPreciseFPMAD - This flag is enabled when the + /// -enable-fp-mad is specified on the command line. When this flag is off + /// (the default), the code generator is not allowed to generate mad + /// (multiply add) if the result is "less precise" than doing those operations + /// individually. + extern bool LessPreciseFPMADOption; + extern bool LessPreciseFPMAD(); + /// NoExcessFPPrecision - This flag is enabled when the /// -disable-excess-fp-precision flag is specified on the command line. When /// this flag is off (the default), the code generator is allowed to produce @@ -39,7 +47,7 @@ /// this flag is off (the default), the code generator is not allowed to /// produce results that are "less precise" than IEEE allows. This includes /// use of X86 instructions like FSIN and FCOS instead of libcalls. - /// UnsafeFPMath implies FiniteOnlyFPMath. + /// UnsafeFPMath implies FiniteOnlyFPMath and LessPreciseFPMAD. extern bool UnsafeFPMath; /// FiniteOnlyFPMath - This returns true when the -enable-finite-only-fp-math Modified: llvm/branches/Apple/Dib/lib/Target/TargetMachine.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Target/TargetMachine.cpp?rev=67367&r1=67366&r2=67367&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Target/TargetMachine.cpp (original) +++ llvm/branches/Apple/Dib/lib/Target/TargetMachine.cpp Fri Mar 20 02:46:14 2009 @@ -22,6 +22,7 @@ // namespace llvm { + bool LessPreciseFPMADOption; bool PrintMachineCode; bool NoFramePointerElim; bool NoExcessFPPrecision; @@ -59,6 +60,11 @@ cl::location(NoExcessFPPrecision), cl::init(false)); static cl::opt +EnableFPMAD("enable-fp-mad", + cl::desc("Enable less precise MAD instructions to be generated"), + cl::location(LessPreciseFPMADOption), + cl::init(false)); +static cl::opt EnableUnsafeFPMath("enable-unsafe-fp-math", cl::desc("Enable optimizations that may decrease FP precision"), cl::location(UnsafeFPMath), @@ -198,6 +204,12 @@ } namespace llvm { + /// LessPreciseFPMAD - This flag return true when -enable-fp-mad option + /// is specified on the command line. When this flag is off(default), the + /// code generator is not allowed to generate mad (multiply add) if the + /// result is "less precise" than doing those operations individually. + bool LessPreciseFPMAD() { return UnsafeFPMath || LessPreciseFPMADOption; } + /// FiniteOnlyFPMath - This returns true when the -enable-finite-only-fp-math /// option is specified on the command line. If this returns false (default), /// the code generator is not allowed to assume that FP arithmetic arguments From nicholas at mxc.ca Fri Mar 20 02:53:50 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Fri, 20 Mar 2009 00:53:50 -0700 Subject: [llvm-commits] [llvm] r67349 - in /llvm/trunk/test: BugPoint/misopt-basictest.ll lib/llvm.exp In-Reply-To: <200903200014.n2K0E9sH009046@zion.cs.uiuc.edu> References: <200903200014.n2K0E9sH009046@zion.cs.uiuc.edu> Message-ID: <49C34B8E.4090209@mxc.ca> Evan Cheng wrote: > Author: evancheng > Date: Thu Mar 19 19:14:09 2009 > New Revision: 67349 > > URL: http://llvm.org/viewvc/llvm-project?rev=67349&view=rev > Log: > Fix typo's. Hi Evan. Even after this patch, I'm still seeing this error: $ make check llvm[0]: Running test suite make[1]: Entering directory `/home/nicholas/llvm-commit/test' Making a new site.exp file... ( ulimit -t 600 ; ulimit -d 512000 ; \ PATH="/home/nicholas/llvm-commit/Debug/bin:/home/nicholas/llvm-commit/test/Scripts:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.:/usr/games/bin:/usr/local/jdk1.1/bin" \ /usr/bin/runtest --ignore "llvm2cpp.exp" ) ERROR: tcl error sourcing /home/nicholas/llvm-commit/test/site.exp. can't read "bugpoint_topts": no such variable while executing "set bugpoint_topts " (file "/home/nicholas/llvm-commit/test/site.exp" line 23) invoked from within "source /home/nicholas/llvm-commit/test/site.exp" ("uplevel" body line 1) invoked from within "uplevel #0 source /home/nicholas/llvm-commit/test/site.exp" invoked from within "catch "uplevel #0 source $file"" make[1]: *** [check-local] Error 1 make[1]: Leaving directory `/home/nicholas/llvm-commit/test' make: *** [check] Error 2 I'm going to revert this and r67334 now. Nick > > Modified: > llvm/trunk/test/BugPoint/misopt-basictest.ll > llvm/trunk/test/lib/llvm.exp > > Modified: llvm/trunk/test/BugPoint/misopt-basictest.ll > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/misopt-basictest.ll?rev=67349&r1=67348&r2=67349&view=diff > > ============================================================================== > --- llvm/trunk/test/BugPoint/misopt-basictest.ll (original) > +++ llvm/trunk/test/BugPoint/misopt-basictest.ll Thu Mar 19 19:14:09 2009 > @@ -1,4 +1,4 @@ > -; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes %bugpoint_tops > +; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes %bugpoint_topts > > @.LC0 = internal global [13 x i8] c"Hello World\0A\00" ; <[13 x i8]*> [#uses=1] > > > Modified: llvm/trunk/test/lib/llvm.exp > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lib/llvm.exp?rev=67349&r1=67348&r2=67349&view=diff > > ============================================================================== > --- llvm/trunk/test/lib/llvm.exp (original) > +++ llvm/trunk/test/lib/llvm.exp Thu Mar 19 19:14:09 2009 > @@ -77,8 +77,8 @@ > regsub -all {%llvmdsymutil} $new_line "$llvmdsymutil" new_line > #replace %llvmlibsdir with configure library directory > regsub -all {%llvmlibsdir} $new_line "$llvmlibsdir" new_line > - #replace %bugpoint_tops with actual bugpoint target options > - regsub -all {%bugpoint_tops} $new_line "$bugpoint_topts" new_line > + #replace %bugpoint_topts with actual bugpoint target options > + regsub -all {%bugpoint_topts} $new_line "$bugpoint_topts" new_line > #replace %p with path to source, > regsub -all {%p} $new_line [file join $srcdir $subdir] new_line > #replace %s with filename > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > From nicholas at mxc.ca Fri Mar 20 02:56:31 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Fri, 20 Mar 2009 07:56:31 -0000 Subject: [llvm-commits] [llvm] r67368 - in /llvm/trunk: Makefile.rules test/BugPoint/misopt-basictest.ll test/BugPoint/remove_arguments_test.ll test/Makefile test/lib/llvm.exp Message-ID: <200903200756.n2K7uVkm005149@zion.cs.uiuc.edu> Author: nicholas Date: Fri Mar 20 02:56:31 2009 New Revision: 67368 URL: http://llvm.org/viewvc/llvm-project?rev=67368&view=rev Log: Revert r67334 and r37349 which break "make check" on Linux. Modified: llvm/trunk/Makefile.rules llvm/trunk/test/BugPoint/misopt-basictest.ll llvm/trunk/test/BugPoint/remove_arguments_test.ll llvm/trunk/test/Makefile llvm/trunk/test/lib/llvm.exp Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=67368&r1=67367&r2=67368&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Fri Mar 20 02:56:31 2009 @@ -437,7 +437,7 @@ SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -bundle \ -mmacosx-version-min=$(DARWIN_VERSION) - TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) + CompileCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) else ifeq ($(OS),Cygwin) SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \ @@ -536,10 +536,10 @@ else ifeq ($(OS),Darwin) ifeq ($(ARCH),x86_64) - TargetCommonOpts = -m64 + CompileCommonOpts += -m64 else ifeq ($(ARCH),x86) - TargetCommonOpts = -m32 + CompileCommonOpts += -m32 endif endif endif @@ -560,35 +560,33 @@ ifeq ($(BUILD_COMPONENT), 1) Compile.C = $(BUILD_CC) $(CPP.Flags) $(C.Flags) $(C.Flags.NoRelink) \ - $(TargetCommonOpts) $(CompileCommonOpts) -c + $(CompileCommonOpts) -c Compile.CXX = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ - $(TargetCommonOpts) $(CompileCommonOpts) -c - Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(TargetCommonOpts) \ - $(CompileCommonOpts) $(CXX.Flags) $(CXX.Flags.NoRelink) -E + $(CompileCommonOpts) -c + Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) \ + $(CXX.Flags.NoRelink) -E Link = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ - $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) $(Strip) - Relink = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) \ - $(CompileCommonOpts) $(Relink.Flags) + $(CompileCommonOpts) $(LD.Flags) $(Strip) + Relink = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ + $(Relink.Flags) else Compile.C = $(CC) $(CPP.Flags) $(C.Flags) $(C.Flags.NoRelink) \ - $(TargetCommonOpts) $(CompileCommonOpts) -c + $(CompileCommonOpts) -c Compile.CXX = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ - $(TargetCommonOpts) $(CompileCommonOpts) -c - Preprocess.CXX= $(CXX) $(CPP.Flags) $(TargetCommonOpts) \ - $(CompileCommonOpts) $(CXX.Flags) $(CXX.Flags.NoRelink) -E + $(CompileCommonOpts) -c + Preprocess.CXX= $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) \ + $(CXX.Flags.NoRelink) -E Link = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \ - $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) $(Strip) - Relink = $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) \ - $(CompileCommonOpts) $(Relink.Flags) + $(CompileCommonOpts) $(LD.Flags) $(Strip) + Relink = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \ + $(Relink.Flags) endif -BCCompile.C = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) \ - $(TargetCommonOpts) $(CompileCommonOpts) -Preprocess.C = $(CC) $(CPP.Flags) $(C.Flags) \ - $(TargetCommonOpts) $(CompileCommonOpts) -E +BCCompile.C = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) +Preprocess.C = $(CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -E BCCompile.CXX = $(LLVMGXXWITHPATH) $(CPP.Flags) $(CXX.Flags) \ - $(TargetCommonOpts) $(CompileCommonOpts) + $(CompileCommonOpts) ProgInstall = $(INSTALL) $(Install.StripFlag) -m 0755 ScriptInstall = $(INSTALL) -m 0755 Modified: llvm/trunk/test/BugPoint/misopt-basictest.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/misopt-basictest.ll?rev=67368&r1=67367&r2=67368&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/misopt-basictest.ll (original) +++ llvm/trunk/test/BugPoint/misopt-basictest.ll Fri Mar 20 02:56:31 2009 @@ -1,4 +1,4 @@ -; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes %bugpoint_topts +; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes @.LC0 = internal global [13 x i8] c"Hello World\0A\00" ; <[13 x i8]*> [#uses=1] Modified: llvm/trunk/test/BugPoint/remove_arguments_test.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/remove_arguments_test.ll?rev=67368&r1=67367&r2=67368&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/remove_arguments_test.ll (original) +++ llvm/trunk/test/BugPoint/remove_arguments_test.ll Fri Mar 20 02:56:31 2009 @@ -1,4 +1,4 @@ -; RUN: bugpoint %s -bugpoint-crashcalls -silence-passes +; RUN: bugpoint %s -bugpoint-crashcalls -silence-passes ; Test to make sure that arguments are removed from the function if they are ; unnecessary. Modified: llvm/trunk/test/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Makefile?rev=67368&r1=67367&r2=67368&view=diff ============================================================================== --- llvm/trunk/test/Makefile (original) +++ llvm/trunk/test/Makefile Fri Mar 20 02:56:31 2009 @@ -87,9 +87,6 @@ else DSYMUTIL=true endif -ifeq ($(OS),Darwin) -BUGPOINT_TOPTS="-gcc-tool-args $(TargetCommonOpts)" -endif FORCE: @@ -111,13 +108,12 @@ @echo 'set objdir "$(LLVM_OBJ_ROOT)/test"' >>site.tmp @echo 'set gccpath "$(CC)"' >>site.tmp @echo 'set gxxpath "$(CXX)"' >>site.tmp - @echo 'set compile_c "' $(CC) $(CPP.Flags) $(TargetCommonOpts) $(CompileCommonOpts) -c '"' >>site.tmp - @echo 'set compile_cxx "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) $(CompileCommonOpts) -c '"' >> site.tmp - @echo 'set link "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) '"' >>site.tmp - @echo 'set llvmgcc "$(LLVMGCC) $(TargetCommonOpts) $(EXTRA_OPTIONS)"' >> site.tmp - @echo 'set llvmgxx "$(LLVMGCC) $(TargetCommonOpts) $(EXTRA_OPTIONS)"' >> site.tmp + @echo 'set compile_c "' $(CC) $(CPP.Flags) $(CompileCommonOpts) -c '"' >>site.tmp + @echo 'set compile_cxx "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) -c '"' >> site.tmp + @echo 'set link "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) $(LD.Flags) '"' >>site.tmp + @echo 'set llvmgcc "$(LLVMGCC) $(EXTRA_OPTIONS)"' >> site.tmp + @echo 'set llvmgxx "$(LLVMGCC) $(EXTRA_OPTIONS)"' >> site.tmp @echo 'set llvmgccmajvers "$(LLVMGCC_MAJVERS)"' >> site.tmp - @echo 'set bugpoint_topts $(BUGPOINT_TOPTS)' >> site.tmp @echo 'set shlibext "$(SHLIBEXT)"' >> site.tmp @echo 'set ocamlc "$(OCAMLC) -cc $(CXX) -I $(LibDir)/ocaml"' >> site.tmp @echo 'set valgrind "$(VALGRIND)"' >> site.tmp Modified: llvm/trunk/test/lib/llvm.exp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lib/llvm.exp?rev=67368&r1=67367&r2=67368&view=diff ============================================================================== --- llvm/trunk/test/lib/llvm.exp (original) +++ llvm/trunk/test/lib/llvm.exp Fri Mar 20 02:56:31 2009 @@ -48,8 +48,8 @@ proc substitute { line test tmpFile } { global srcroot objroot srcdir objdir subdir target_triplet prcontext global llvmgcc llvmgxx llvmgcc_version llvmgccmajvers ocamlc - global gccpath gxxpath compile_c compile_cxx link shlibext llvmlibsdir - global llvmdsymutil valgrind grep gas bugpoint_topts + global gccpath gxxpath compile_c compile_cxx link shlibext llvmlibsdir llvmdsymutil + global valgrind grep gas set path [file join $srcdir $subdir] # Substitute all Tcl variables. @@ -77,8 +77,6 @@ regsub -all {%llvmdsymutil} $new_line "$llvmdsymutil" new_line #replace %llvmlibsdir with configure library directory regsub -all {%llvmlibsdir} $new_line "$llvmlibsdir" new_line - #replace %bugpoint_topts with actual bugpoint target options - regsub -all {%bugpoint_topts} $new_line "$bugpoint_topts" new_line #replace %p with path to source, regsub -all {%p} $new_line [file join $srcdir $subdir] new_line #replace %s with filename From nicholas at mxc.ca Fri Mar 20 03:00:57 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Fri, 20 Mar 2009 08:00:57 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67369 - in /llvm-gcc-4.2/trunk/gcc/config: i386/linux.h i386/linux64.h rs6000/sysv4.h Message-ID: <200903200800.n2K80vWH006166@zion.cs.uiuc.edu> Author: nicholas Date: Fri Mar 20 03:00:57 2009 New Revision: 67369 URL: http://llvm.org/viewvc/llvm-project?rev=67369&view=rev Log: Pass --hash-style=both to the linker on Linux. This reduces dynamic link time for programs produced by llvm-gcc. Modified: llvm-gcc-4.2/trunk/gcc/config/i386/linux.h llvm-gcc-4.2/trunk/gcc/config/i386/linux64.h llvm-gcc-4.2/trunk/gcc/config/rs6000/sysv4.h Modified: llvm-gcc-4.2/trunk/gcc/config/i386/linux.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/linux.h?rev=67369&r1=67368&r2=67369&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/i386/linux.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/i386/linux.h Fri Mar 20 03:00:57 2009 @@ -109,7 +109,8 @@ { "dynamic_linker", LINUX_DYNAMIC_LINKER } #undef LINK_SPEC -#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ +/* LLVM LOCAL set linker hash_style */ +#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \ %{!shared: \ %{!ibcs: \ %{!static: \ Modified: llvm-gcc-4.2/trunk/gcc/config/i386/linux64.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/linux64.h?rev=67369&r1=67368&r2=67369&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/i386/linux64.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/i386/linux64.h Fri Mar 20 03:00:57 2009 @@ -53,7 +53,8 @@ #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2" #undef LINK_SPEC -#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \ +/* LLVM LOCAL set linker hash_style */ +#define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} --hash-style=both \ %{shared:-shared} \ %{!shared: \ %{!static: \ Modified: llvm-gcc-4.2/trunk/gcc/config/rs6000/sysv4.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/rs6000/sysv4.h?rev=67369&r1=67368&r2=67369&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/config/rs6000/sysv4.h (original) +++ llvm-gcc-4.2/trunk/gcc/config/rs6000/sysv4.h Fri Mar 20 03:00:57 2009 @@ -910,8 +910,9 @@ #define LINUX_DYNAMIC_LINKER \ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER) -#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ - %{rdynamic:-export-dynamic} \ +/* LLVM LOCAL set linker hash_style */ +#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: \ + %{!static: %{rdynamic:-export-dynamic} \ %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}" #if defined(HAVE_LD_EH_FRAME_HDR) From sanjiv.gupta at microchip.com Fri Mar 20 04:39:02 2009 From: sanjiv.gupta at microchip.com (Sanjiv Gupta) Date: Fri, 20 Mar 2009 09:39:02 -0000 Subject: [llvm-commits] [llvm] r67370 - /llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp Message-ID: <200903200939.n2K9d66X020688@zion.cs.uiuc.edu> Author: sgupta Date: Fri Mar 20 04:38:50 2009 New Revision: 67370 URL: http://llvm.org/viewvc/llvm-project?rev=67370&view=rev Log: Fixed the comment. No functionality change. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp?rev=67370&r1=67369&r2=67370&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp Fri Mar 20 04:38:50 2009 @@ -873,11 +873,11 @@ /// CustomLowerResults - Replace the node's results with custom code provided /// by the target and return "true", or do nothing and return "false". /// The last parameter is FALSE if we are dealing with a node with legal -/// result types and illegal operand. The second parameter denotes the illegal -/// OperandNo in that case. +/// result types and illegal operand. The second parameter denotes the type of +/// illegal OperandNo in that case. /// The last parameter being TRUE means we are dealing with a -/// node with illegal result types. The second parameter denotes the illegal -/// ResNo in that case. +/// node with illegal result types. The second parameter denotes the type of +/// illegal ResNo in that case. bool DAGTypeLegalizer::CustomLowerResults(SDNode *N, MVT VT, bool LegalizeResult) { // See if the target wants to custom lower this node. From sanjiv.gupta at microchip.com Fri Mar 20 08:42:22 2009 From: sanjiv.gupta at microchip.com (Sanjiv Gupta) Date: Fri, 20 Mar 2009 13:42:22 -0000 Subject: [llvm-commits] [llvm] r67371 - in /llvm/trunk/lib/Target/PIC16: PIC16ISelLowering.cpp PIC16ISelLowering.h Message-ID: <200903201342.n2KDgNPE002004@zion.cs.uiuc.edu> Author: sgupta Date: Fri Mar 20 08:42:20 2009 New Revision: 67371 URL: http://llvm.org/viewvc/llvm-project?rev=67371&view=rev Log: Reformatting. Inserted code comments. Cleaned interfaces. Removed unncessary code. No functionality change. Modified: llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.h Modified: llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp?rev=67371&r1=67370&r2=67371&view=diff ============================================================================== --- llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp (original) +++ llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp Fri Mar 20 08:42:20 2009 @@ -142,6 +142,41 @@ computeRegisterProperties(); } +// getOutFlag - Extract the flag result if the Op has it. +static SDValue getOutFlag(SDValue &Op) { + // Flag is the last value of the node. + SDValue Flag = Op.getValue(Op.getNode()->getNumValues() - 1); + + assert (Flag.getValueType() == MVT::Flag + && "Node does not have an out Flag"); + + return Flag; +} + +// To extract chain value from the SDValue Nodes +// This function will help to maintain the chain extracting +// code at one place. In case of any change in future it will +// help maintain the code. +static SDValue getChain(SDValue &Op) { + SDValue Chain = Op.getValue(Op.getNode()->getNumValues() - 1); + + // If the last value returned in Flag then the chain is + // second last value returned. + if (Chain.getValueType() == MVT::Flag) + Chain = Op.getValue(Op.getNode()->getNumValues() - 2); + + // All nodes may not produce a chain. Therefore following assert + // verifies that the node is returning a chain only. + assert (Chain.getValueType() == MVT::Other + && "Node does not have a chain"); + + return Chain; +} + +/// PopulateResults - Helper function to LowerOperation. +/// If a node wants to return multiple results after lowering, +/// it stuffs them into an array of SDValue called Results. + static void PopulateResults(SDValue N, SmallVectorImpl&Results) { if (N.getOpcode() == ISD::MERGE_VALUES) { int NumResults = N.getNumOperands(); @@ -156,6 +191,8 @@ return MVT::i8; } +/// FIXME: These three functions below should not be here if we change +/// the generic code to allow generting libcalls for I8 types as well. void PIC16TargetLowering::setPIC16LibcallName(PIC16ISD::PIC16Libcall Call, @@ -195,47 +232,6 @@ return CallInfo.first; } -SDValue -PIC16TargetLowering::getCurrentFrame(SelectionDAG &DAG) { - MachineFunction &MF = DAG.getMachineFunction(); - const Function *Func = MF.getFunction(); - const std::string FuncName = Func->getName(); - - // this is causing memory waste - // because for every call new memory will be allocated - char *tmpName = new char [strlen(FuncName.c_str()) + 6]; - sprintf(tmpName, "%s.tmp", FuncName.c_str()); - - // if the external symbol of the same name already exists then - // it will not create the new one. - return DAG.getTargetExternalSymbol(tmpName, MVT::i8); -} - -void -PIC16TargetLowering::getCurrentFrameIndex(SelectionDAG &DAG, SDValue &ES, - unsigned SlotSize, int &FromFI) { - MachineFunction &MF = DAG.getMachineFunction(); - const Function *Func = MF.getFunction(); - const std::string FuncName = Func->getName(); - - // this is causing memory waste - // because for every call new memory will be allocated - char *tmpName = new char [strlen(FuncName.c_str()) + 6]; - sprintf(tmpName, "%s.tmp", FuncName.c_str()); - - // if the external symbol of the same name already exists then - // it will not create the new one. - ES = DAG.getTargetExternalSymbol(tmpName, MVT::i8); - - // Alignment is always 1 - //FromFI = MF.getFrameInfo()->CreateStackObject(SlotSize, 1); - FromFI = MF.getFrameInfo()->CreateStackObject(1, 1); - int FI; - for(unsigned i=1;iCreateStackObject(1, 1); - } -} - const char *PIC16TargetLowering::getTargetNodeName(unsigned Opcode) const { switch (Opcode) { default: return NULL; @@ -477,51 +473,24 @@ return false; } -// Extract the out flag -SDValue PIC16TargetLowering::getOutFlag(SDValue &Op) { - SDValue Flag = Op.getValue(Op.getNode()->getNumValues() - 1); - - assert (Flag.getValueType() == MVT::Flag && "Node does not have an out Flag"); - - return Flag; -} - -// To extract chain value from the SDValue Nodes -// This function will help to maintain the chain extracting -// code at one place. In case of any change in future it will -// help maintain the code. -SDValue PIC16TargetLowering::getChain(SDValue &Op) { - SDValue Chain = Op.getValue(Op.getNode()->getNumValues() - 1); - - // If the last value returned in Flag then the chain is - // second last value returned. - if (Chain.getValueType() == MVT::Flag) - Chain = Op.getValue(Op.getNode()->getNumValues() - 2); - - // All nodes may not produce a chain. Therefore following assert - // verifies that the node is returning a chain only. - assert (Chain.getValueType() == MVT::Other && "Node does not have a chain"); - return Chain; -} +// GetExpandedParts - This function is on the similiar lines as +// the GetExpandedInteger in type legalizer is. This returns expanded +// parts of Op in Lo and Hi. void PIC16TargetLowering::GetExpandedParts(SDValue Op, SelectionDAG &DAG, SDValue &Lo, SDValue &Hi) { SDNode *N = Op.getNode(); DebugLoc dl = N->getDebugLoc(); - MVT NewVT; - std::vector Opers; - NewVT = getTypeToTransformTo(N->getValueType(0)); - - // extract the lo component - Opers.push_back(Op); - Opers.push_back(DAG.getConstant(0,MVT::i8)); - Lo = DAG.getNode(ISD::EXTRACT_ELEMENT,dl,NewVT,&Opers[0],Opers.size()); + MVT NewVT = getTypeToTransformTo(N->getValueType(0)); + + // Extract the lo component. + Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NewVT, Op, + DAG.getConstant(0, MVT::i8)); + // extract the hi component - Opers.clear(); - Opers.push_back(Op); - Opers.push_back(DAG.getConstant(1,MVT::i8)); - Hi = DAG.getNode(ISD::EXTRACT_ELEMENT,dl,NewVT,&Opers[0],Opers.size()); + Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, NewVT, Op, + DAG.getConstant(1, MVT::i8)); } // Legalize FrameIndex into ExternalSymbol and offset. @@ -621,19 +590,6 @@ return; } -//SDValue PIC16TargetLowering::ExpandAdd(SDNode *N, SelectionDAG &DAG) { - //SDValue OperLeft = N->getOperand(0); - //SDValue OperRight = N->getOperand(1); - - //if((OperLeft.getOpcode() == ISD::Constant) || - //(OperRight.getOpcode() == ISD::Constant)) { - //return SDValue(); - //} - - // These case are yet to be handled - //return SDValue(); -//} - SDValue PIC16TargetLowering::ExpandLoad(SDNode *N, SelectionDAG &DAG) { LoadSDNode *LD = dyn_cast(SDValue(N, 0)); SDValue Chain = LD->getChain(); @@ -1099,12 +1055,19 @@ return false; } +// NeedToConvertToMemOp - Returns true if one of the operands of the +// operation 'Op' needs to be put into memory. Also returns the +// operand no. of the operand to be converted in 'MemOp'. Remember, PIC16 has +// no instruction that can operation on two registers. Most insns take +// one register and one memory operand (addwf) / Constant (addlw). bool PIC16TargetLowering::NeedToConvertToMemOp(SDValue Op, unsigned &MemOp) { - // Return false if one of the operands is already a direct - // load and that operand has only one use. + // If one of the operand is a constant, return false. if (Op.getOperand(0).getOpcode() == ISD::Constant || Op.getOperand(1).getOpcode() == ISD::Constant) return false; + + // Return false if one of the operands is already a direct + // load and that operand has only one use. if (isDirectLoad(Op.getOperand(0))) { if (Op.getOperand(0).hasOneUse()) return false; @@ -1120,10 +1083,14 @@ return true; } -SDValue PIC16TargetLowering:: LowerBinOp(SDValue Op, SelectionDAG &DAG) { +// LowerBinOp - Lower a commutative binary operation that does not +// affect status flag carry. +SDValue PIC16TargetLowering::LowerBinOp(SDValue Op, SelectionDAG &DAG) { DebugLoc dl = Op.getDebugLoc(); + // We should have handled larger operands in type legalizer itself. assert (Op.getValueType() == MVT::i8 && "illegal Op to lower"); + unsigned MemOp = 1; if (NeedToConvertToMemOp(Op, MemOp)) { // Put one value on stack. @@ -1137,7 +1104,9 @@ } } -SDValue PIC16TargetLowering:: LowerADD(SDValue Op, SelectionDAG &DAG) { +// LowerADD - Lower all types of ADD operations including the ones +// that affects carry. +SDValue PIC16TargetLowering::LowerADD(SDValue Op, SelectionDAG &DAG) { // We should have handled larger operands in type legalizer itself. assert (Op.getValueType() == MVT::i8 && "illegal add to lower"); DebugLoc dl = Op.getDebugLoc(); @@ -1189,7 +1158,7 @@ // equal. Therefore to construct MERGE_VALUE node, UNDEF nodes equal to the // number of arguments of function have been created. -SDValue PIC16TargetLowering:: LowerFORMAL_ARGUMENTS(SDValue Op, +SDValue PIC16TargetLowering::LowerFORMAL_ARGUMENTS(SDValue Op, SelectionDAG &DAG) { SmallVector ArgValues; unsigned NumArgs = Op.getNumOperands() - 3; @@ -1207,7 +1176,8 @@ ArgValues.size()).getValue(Op.getResNo()); } -// Perform DAGCombine of PIC16Load +// Perform DAGCombine of PIC16Load. +// FIXME - Need a more elaborate comment here. SDValue PIC16TargetLowering:: PerformPIC16LoadCombine(SDNode *N, DAGCombinerInfo &DCI) const { SelectionDAG &DAG = DCI.DAG; Modified: llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.h?rev=67371&r1=67370&r2=67371&view=diff ============================================================================== --- llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.h (original) +++ llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.h Fri Mar 20 08:42:20 2009 @@ -120,15 +120,6 @@ // function will return true bool isRomAddress(const SDValue &Op); - // To extract chain value from the SDValue Nodes - // This function will help to maintain the chain extracting - // code at one place. In case of any change in future it will - // help maintain the code - SDValue getChain(SDValue &Op); - - SDValue getOutFlag(SDValue &Op); - - // Extract the Lo and Hi component of Op. void GetExpandedParts(SDValue Op, SelectionDAG &DAG, SDValue &Lo, SDValue &Hi); @@ -173,11 +164,6 @@ // Check if operation has a direct load operand. inline bool isDirectLoad(const SDValue Op); - // Create the symbol and index for function frame - void getCurrentFrameIndex(SelectionDAG &DAG, SDValue &ES, - unsigned SlotSize, int &FI); - - SDValue getCurrentFrame(SelectionDAG &DAG); }; } // namespace llvm From sanjiv.gupta at microchip.com Fri Mar 20 08:49:26 2009 From: sanjiv.gupta at microchip.com (Sanjiv Gupta) Date: Fri, 20 Mar 2009 13:49:26 -0000 Subject: [llvm-commits] [llvm] r67372 - /llvm/trunk/lib/CodeGen/Spiller.cpp Message-ID: <200903201349.n2KDnQcb002429@zion.cs.uiuc.edu> Author: sgupta Date: Fri Mar 20 08:49:20 2009 New Revision: 67372 URL: http://llvm.org/viewvc/llvm-project?rev=67372&view=rev Log: Fixed build warnings for unused variables. Modified: llvm/trunk/lib/CodeGen/Spiller.cpp Modified: llvm/trunk/lib/CodeGen/Spiller.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/Spiller.cpp?rev=67372&r1=67371&r2=67372&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/Spiller.cpp (original) +++ llvm/trunk/lib/CodeGen/Spiller.cpp Fri Mar 20 08:49:20 2009 @@ -218,7 +218,6 @@ static void UpdateKills(MachineInstr &MI, BitVector &RegKills, std::vector &KillOps, const TargetRegisterInfo* TRI) { - const TargetInstrDesc &TID = MI.getDesc(); for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) { MachineOperand &MO = MI.getOperand(i); if (!MO.isReg() || !MO.isUse()) @@ -881,7 +880,6 @@ } if (LastUDMI) { - const TargetInstrDesc &TID = LastUDMI->getDesc(); MachineOperand *LastUD = NULL; for (unsigned i = 0, e = LastUDMI->getNumOperands(); i != e; ++i) { MachineOperand &MO = LastUDMI->getOperand(i); @@ -944,7 +942,6 @@ NextMII = next(MII); MachineInstr &MI = *MII; - const TargetInstrDesc &TID = MI.getDesc(); if (VRM.hasEmergencySpills(&MI)) { // Spill physical register(s) in the rare case the allocator has run out From sanjiv.gupta at microchip.com Fri Mar 20 09:10:21 2009 From: sanjiv.gupta at microchip.com (Sanjiv Gupta) Date: Fri, 20 Mar 2009 14:10:21 -0000 Subject: [llvm-commits] [llvm] r67373 - /llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp Message-ID: <200903201410.n2KEALCu003697@zion.cs.uiuc.edu> Author: sgupta Date: Fri Mar 20 09:10:20 2009 New Revision: 67373 URL: http://llvm.org/viewvc/llvm-project?rev=67373&view=rev Log: Fixed comment for libcalls. Modified: llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp Modified: llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp?rev=67373&r1=67372&r2=67373&view=diff ============================================================================== --- llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp (original) +++ llvm/trunk/lib/Target/PIC16/PIC16ISelLowering.cpp Fri Mar 20 09:10:20 2009 @@ -191,18 +191,21 @@ return MVT::i8; } -/// FIXME: These three functions below should not be here if we change -/// the generic code to allow generting libcalls for I8 types as well. +/// The type legalizer framework of generating legalizer can generate libcalls +/// only when the operand/result types are illegal. +/// PIC16 needs to generate libcalls even for the legal types (i8) for some ops. +/// For example an arithmetic right shift. These functions are used to lower +/// such operations that generate libcall for legal types. void PIC16TargetLowering::setPIC16LibcallName(PIC16ISD::PIC16Libcall Call, const char *Name) { - PIC16LibcallNames[Call] = Name; + PIC16LibcallNames[Call] = Name; } const char * PIC16TargetLowering::getPIC16LibcallName(PIC16ISD::PIC16Libcall Call) { - return PIC16LibcallNames[Call]; + return PIC16LibcallNames[Call]; } SDValue @@ -211,23 +214,23 @@ unsigned NumOps, bool isSigned, SelectionDAG &DAG, DebugLoc dl) { - TargetLowering::ArgListTy Args; - Args.reserve(NumOps); + TargetLowering::ArgListTy Args; + Args.reserve(NumOps); - TargetLowering::ArgListEntry Entry; - for (unsigned i = 0; i != NumOps; ++i) { - Entry.Node = Ops[i]; - Entry.Ty = Entry.Node.getValueType().getTypeForMVT(); - Entry.isSExt = isSigned; - Entry.isZExt = !isSigned; - Args.push_back(Entry); - } - SDValue Callee = DAG.getExternalSymbol(getPIC16LibcallName(Call), MVT::i8); + TargetLowering::ArgListEntry Entry; + for (unsigned i = 0; i != NumOps; ++i) { + Entry.Node = Ops[i]; + Entry.Ty = Entry.Node.getValueType().getTypeForMVT(); + Entry.isSExt = isSigned; + Entry.isZExt = !isSigned; + Args.push_back(Entry); + } + SDValue Callee = DAG.getExternalSymbol(getPIC16LibcallName(Call), MVT::i8); - const Type *RetTy = RetVT.getTypeForMVT(); - std::pair CallInfo = + const Type *RetTy = RetVT.getTypeForMVT(); + std::pair CallInfo = LowerCallTo(DAG.getEntryNode(), RetTy, isSigned, !isSigned, false, - false, CallingConv::C, false, Callee, Args, DAG, dl); + false, CallingConv::C, false, Callee, Args, DAG, dl); return CallInfo.first; } From clattner at apple.com Fri Mar 20 11:29:25 2009 From: clattner at apple.com (Chris Lattner) Date: Fri, 20 Mar 2009 09:29:25 -0700 Subject: [llvm-commits] [llvm] r67363 - in /llvm/trunk: include/llvm/Target/TargetOptions.h lib/Target/TargetMachine.cpp In-Reply-To: <6746915A-B6FA-4A23-B8AB-0BB9D7E7C811@apple.com> References: <200903200506.n2K56xYg023894@zion.cs.uiuc.edu> <5DEAD829-24A5-410C-B835-3C0B9DA3C5AC@apple.com> <6746915A-B6FA-4A23-B8AB-0BB9D7E7C811@apple.com> Message-ID: On Mar 19, 2009, at 11:04 PM, Mon Ping Wang wrote: > Hi Chris, > > This is to support FMAs that can generate less precise results > primarily due to how it handles rounding, e.g., some architecture will > truncate the result of a*b before adding it to c. Do we need a new flag just for this, or is unsafe math enough? Is there an application that wants this flag but not unsafe math? -Chris > > > -- Mon Ping > > > On Mar 19, 2009, at 10:36 PM, Chris Lattner wrote: > >> >> On Mar 19, 2009, at 10:06 PM, Mon P Wang wrote: >> >>> Author: wangmp >>> Date: Fri Mar 20 00:06:58 2009 >>> New Revision: 67363 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=67363&view=rev >>> Log: >>> Added option to enable generating less precise mad (multiply >>> addition) >>> for those architectures that support the instruction. >> >> Hi Mon Ping, >> >> Is this specifically to support FMA instructions that elide the >> rounding step, or is this for "even less precise" FMAs? >> >> -Chris >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Fri Mar 20 13:03:35 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Fri, 20 Mar 2009 18:03:35 -0000 Subject: [llvm-commits] [llvm] r67387 - in /llvm/trunk: include/llvm/InlineAsm.h lib/CodeGen/AsmPrinter/AsmPrinter.cpp lib/CodeGen/SelectionDAG/LegalizeDAG.cpp lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Message-ID: <200903201803.n2KI3Zxs018275@zion.cs.uiuc.edu> Author: evancheng Date: Fri Mar 20 13:03:34 2009 New Revision: 67387 URL: http://llvm.org/viewvc/llvm-project?rev=67387&view=rev Log: For inline asm output operand that matches an input. Encode the input operand index in the high bits. Modified: llvm/trunk/include/llvm/InlineAsm.h llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Modified: llvm/trunk/include/llvm/InlineAsm.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InlineAsm.h?rev=67387&r1=67386&r2=67387&view=diff ============================================================================== --- llvm/trunk/include/llvm/InlineAsm.h (original) +++ llvm/trunk/include/llvm/InlineAsm.h Fri Mar 20 13:03:34 2009 @@ -128,6 +128,24 @@ static inline bool classof(const Value *V) { return V->getValueID() == Value::InlineAsmVal; } + + /// getNumOperandRegisters - Extract the number of registers field from the + /// inline asm operand flag. + static unsigned getNumOperandRegisters(unsigned Flag) { + return (Flag & 0xffff) >> 3; + } + + /// isOutputOperandTiedToUse - Return true if the flag of the inline asm + /// operand indicates it is an output that's matched to an input operand. + static bool isOutputOperandTiedToUse(unsigned Flag, unsigned &UseIdx) { + if (Flag & 0x80000000) { + UseIdx = Flag >> 16; + return true; + } + return false; + } + + }; } // End llvm namespace Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=67387&r1=67386&r2=67387&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original) +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Fri Mar 20 13:03:34 2009 @@ -1401,7 +1401,7 @@ for (; Val; --Val) { if (OpNo >= MI->getNumOperands()) break; unsigned OpFlags = MI->getOperand(OpNo).getImm(); - OpNo += (OpFlags >> 3) + 1; + OpNo += InlineAsm::getNumOperandRegisters(OpFlags) + 1; } if (OpNo >= MI->getNumOperands()) { Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=67387&r1=67386&r2=67387&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri Mar 20 13:03:34 2009 @@ -1974,7 +1974,8 @@ bool HasInFlag = Ops.back().getValueType() == MVT::Flag; for (unsigned i = 2, e = Ops.size()-HasInFlag; i < e; ) { - unsigned NumVals = cast(Ops[i])->getZExtValue() >> 3; + unsigned NumVals = InlineAsm:: + getNumOperandRegisters(cast(Ops[i])->getZExtValue()); for (++i; NumVals; ++i, --NumVals) { SDValue Op = LegalizeOp(Ops[i]); if (Op != Ops[i]) { Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=67387&r1=67386&r2=67387&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Fri Mar 20 13:03:34 2009 @@ -632,7 +632,7 @@ for (unsigned i = 2; i != NumOps;) { unsigned Flags = cast(Node->getOperand(i))->getZExtValue(); - unsigned NumVals = Flags >> 3; + unsigned NumVals = (Flags & 0xffff) >> 3; ++i; // Skip the ID value. if ((Flags & 7) == 2 || (Flags & 7) == 6) { Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp?rev=67387&r1=67386&r2=67387&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp Fri Mar 20 13:03:34 2009 @@ -561,7 +561,7 @@ for (unsigned i = 2; i != NumOps;) { unsigned Flags = cast(Node->getOperand(i))->getZExtValue(); - unsigned NumVals = Flags >> 3; + unsigned NumVals = InlineAsm::getNumOperandRegisters(Flags); MI->addOperand(MachineOperand::CreateImm(Flags)); ++i; // Skip the ID value. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=67387&r1=67386&r2=67387&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Fri Mar 20 13:03:34 2009 @@ -228,10 +228,11 @@ SDValue &Chain, SDValue *Flag) const; /// AddInlineAsmOperands - Add this value to the specified inlineasm node - /// operand list. This adds the code marker and includes the number of - /// values added into it. - void AddInlineAsmOperands(unsigned Code, SelectionDAG &DAG, - std::vector &Ops) const; + /// operand list. This adds the code marker, matching input operand index + /// (if applicable), and includes the number of values added into it. + void AddInlineAsmOperands(unsigned Code, + bool HasMatching, unsigned MatchingIdx, + SelectionDAG &DAG, std::vector &Ops) const; }; } @@ -4659,10 +4660,16 @@ /// AddInlineAsmOperands - Add this value to the specified inlineasm node /// operand list. This adds the code marker and includes the number of /// values added into it. -void RegsForValue::AddInlineAsmOperands(unsigned Code, SelectionDAG &DAG, +void RegsForValue::AddInlineAsmOperands(unsigned Code, + bool HasMatching,unsigned MatchingIdx, + SelectionDAG &DAG, std::vector &Ops) const { MVT IntPtrTy = DAG.getTargetLoweringInfo().getPointerTy(); - Ops.push_back(DAG.getTargetConstant(Code | (Regs.size() << 3), IntPtrTy)); + assert(Regs.size() < (1 << 13) && "Too many inline asm outputs!"); + unsigned Flag = Code | (Regs.size() << 3); + if (HasMatching) + Flag |= 0x80000000 | (MatchingIdx << 16); + Ops.push_back(DAG.getTargetConstant(Flag, IntPtrTy)); for (unsigned Value = 0, Reg = 0, e = ValueVTs.size(); Value != e; ++Value) { unsigned NumRegs = TLI->getNumRegisters(ValueVTs[Value]); MVT RegisterVT = RegVTs[Value]; @@ -5230,6 +5237,8 @@ OpInfo.AssignedRegs.AddInlineAsmOperands(OpInfo.isEarlyClobber ? 6 /* EARLYCLOBBER REGDEF */ : 2 /* REGDEF */ , + OpInfo.hasMatchingInput(), + OpInfo.MatchingInput, DAG, AsmNodeOperands); break; } @@ -5246,25 +5255,26 @@ unsigned CurOp = 2; // The first operand. for (; OperandNo; --OperandNo) { // Advance to the next operand. - unsigned NumOps = + unsigned OpFlag = cast(AsmNodeOperands[CurOp])->getZExtValue(); - assert(((NumOps & 7) == 2 /*REGDEF*/ || - (NumOps & 7) == 6 /*EARLYCLOBBER REGDEF*/ || - (NumOps & 7) == 4 /*MEM*/) && + assert(((OpFlag & 7) == 2 /*REGDEF*/ || + (OpFlag & 7) == 6 /*EARLYCLOBBER REGDEF*/ || + (OpFlag & 7) == 4 /*MEM*/) && "Skipped past definitions?"); - CurOp += (NumOps>>3)+1; + CurOp += InlineAsm::getNumOperandRegisters(OpFlag)+1; } - unsigned NumOps = + unsigned OpFlag = cast(AsmNodeOperands[CurOp])->getZExtValue(); - if ((NumOps & 7) == 2 /*REGDEF*/ - || (NumOps & 7) == 6 /* EARLYCLOBBER REGDEF */) { - // Add NumOps>>3 registers to MatchedRegs. + if ((OpFlag & 7) == 2 /*REGDEF*/ + || (OpFlag & 7) == 6 /* EARLYCLOBBER REGDEF */) { + // Add (OpFlag&0xffff)>>3 registers to MatchedRegs. RegsForValue MatchedRegs; MatchedRegs.TLI = &TLI; MatchedRegs.ValueVTs.push_back(InOperandVal.getValueType()); MatchedRegs.RegVTs.push_back(AsmNodeOperands[CurOp+1].getValueType()); - for (unsigned i = 0, e = NumOps>>3; i != e; ++i) { + for (unsigned i = 0, e = InlineAsm::getNumOperandRegisters(OpFlag); + i != e; ++i) { unsigned Reg = cast(AsmNodeOperands[++CurOp])->getReg(); MatchedRegs.Regs.push_back(Reg); @@ -5273,13 +5283,15 @@ // Use the produced MatchedRegs object to MatchedRegs.getCopyToRegs(InOperandVal, DAG, getCurDebugLoc(), Chain, &Flag); - MatchedRegs.AddInlineAsmOperands(1 /*REGUSE*/, DAG, AsmNodeOperands); + MatchedRegs.AddInlineAsmOperands(1 /*REGUSE*/, false, 0, + DAG, AsmNodeOperands); break; } else { - assert(((NumOps & 7) == 4) && "Unknown matching constraint!"); - assert((NumOps >> 3) == 1 && "Unexpected number of operands"); + assert(((OpFlag & 7) == 4) && "Unknown matching constraint!"); + assert((InlineAsm::getNumOperandRegisters(OpFlag)) == 1 && + "Unexpected number of operands"); // Add information to the INLINEASM node to know about this input. - AsmNodeOperands.push_back(DAG.getTargetConstant(NumOps, + AsmNodeOperands.push_back(DAG.getTargetConstant(OpFlag, TLI.getPointerTy())); AsmNodeOperands.push_back(AsmNodeOperands[CurOp+1]); break; @@ -5334,7 +5346,7 @@ OpInfo.AssignedRegs.getCopyToRegs(InOperandVal, DAG, getCurDebugLoc(), Chain, &Flag); - OpInfo.AssignedRegs.AddInlineAsmOperands(1/*REGUSE*/, + OpInfo.AssignedRegs.AddInlineAsmOperands(1/*REGUSE*/, false, 0, DAG, AsmNodeOperands); break; } @@ -5343,7 +5355,7 @@ // allocator is aware that the physreg got clobbered. if (!OpInfo.AssignedRegs.Regs.empty()) OpInfo.AssignedRegs.AddInlineAsmOperands(6 /* EARLYCLOBBER REGDEF */, - DAG, AsmNodeOperands); + false, 0, DAG,AsmNodeOperands); break; } } Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=67387&r1=67386&r2=67387&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Fri Mar 20 13:03:34 2009 @@ -1168,10 +1168,12 @@ unsigned Flags = cast(InOps[i])->getZExtValue(); if ((Flags & 7) != 4 /*MEM*/) { // Just skip over this operand, copying the operands verbatim. - Ops.insert(Ops.end(), InOps.begin()+i, InOps.begin()+i+(Flags >> 3) + 1); - i += (Flags >> 3) + 1; + Ops.insert(Ops.end(), InOps.begin()+i, + InOps.begin()+i+InlineAsm::getNumOperandRegisters(Flags) + 1); + i += InlineAsm::getNumOperandRegisters(Flags) + 1; } else { - assert((Flags >> 3) == 1 && "Memory operand with multiple values?"); + assert(InlineAsm::getNumOperandRegisters(Flags) == 1 && + "Memory operand with multiple values?"); // Otherwise, this is a memory operand. Ask the target to select it. std::vector SelOps; if (SelectInlineAsmMemoryOperand(InOps[i+1], 'm', SelOps)) { From monping at apple.com Fri Mar 20 13:55:23 2009 From: monping at apple.com (Mon Ping Wang) Date: Fri, 20 Mar 2009 11:55:23 -0700 Subject: [llvm-commits] [llvm] r67363 - in /llvm/trunk: include/llvm/Target/TargetOptions.h lib/Target/TargetMachine.cpp In-Reply-To: References: <200903200506.n2K56xYg023894@zion.cs.uiuc.edu> <5DEAD829-24A5-410C-B835-3C0B9DA3C5AC@apple.com> <6746915A-B6FA-4A23-B8AB-0BB9D7E7C811@apple.com> Message-ID: <3BE025C4-B18E-4219-A784-F6D76535BCCC@apple.com> Hi Chris, We have some applications that wants less precise fma being generated but don't want unsafe math on. -- Mon Ping On Mar 20, 2009, at 9:29 AM, Chris Lattner wrote: > > On Mar 19, 2009, at 11:04 PM, Mon Ping Wang wrote: > >> Hi Chris, >> >> This is to support FMAs that can generate less precise results >> primarily due to how it handles rounding, e.g., some architecture >> will >> truncate the result of a*b before adding it to c. > > Do we need a new flag just for this, or is unsafe math enough? Is > there an application that wants this flag but not unsafe math? > > -Chris > >> >> >> -- Mon Ping >> >> >> On Mar 19, 2009, at 10:36 PM, Chris Lattner wrote: >> >>> >>> On Mar 19, 2009, at 10:06 PM, Mon P Wang wrote: >>> >>>> Author: wangmp >>>> Date: Fri Mar 20 00:06:58 2009 >>>> New Revision: 67363 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=67363&view=rev >>>> Log: >>>> Added option to enable generating less precise mad (multiply >>>> addition) >>>> for those architectures that support the instruction. >>> >>> Hi Mon Ping, >>> >>> Is this specifically to support FMA instructions that elide the >>> rounding step, or is this for "even less precise" FMAs? >>> >>> -Chris >>> _______________________________________________ >>> llvm-commits mailing list >>> llvm-commits at cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits at cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From clattner at apple.com Fri Mar 20 14:55:22 2009 From: clattner at apple.com (Chris Lattner) Date: Fri, 20 Mar 2009 12:55:22 -0700 Subject: [llvm-commits] [llvm] r67363 - in /llvm/trunk: include/llvm/Target/TargetOptions.h lib/Target/TargetMachine.cpp In-Reply-To: <3BE025C4-B18E-4219-A784-F6D76535BCCC@apple.com> References: <200903200506.n2K56xYg023894@zion.cs.uiuc.edu> <5DEAD829-24A5-410C-B835-3C0B9DA3C5AC@apple.com> <6746915A-B6FA-4A23-B8AB-0BB9D7E7C811@apple.com> <3BE025C4-B18E-4219-A784-F6D76535BCCC@apple.com> Message-ID: On Mar 20, 2009, at 11:55 AM, Mon Ping Wang wrote: > Hi Chris, > > We have some applications that wants less precise fma being generated > but don't want unsafe math on. Ok! Thanks Mon Ping, -Chris From gohman at apple.com Fri Mar 20 15:42:23 2009 From: gohman at apple.com (Dan Gohman) Date: Fri, 20 Mar 2009 20:42:23 -0000 Subject: [llvm-commits] [llvm] r67400 - /llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp Message-ID: <200903202042.n2KKgN4s029004@zion.cs.uiuc.edu> Author: djg Date: Fri Mar 20 15:42:23 2009 New Revision: 67400 URL: http://llvm.org/viewvc/llvm-project?rev=67400&view=rev Log: Simplify this code; use a while instead of an if and a do-while. Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp?rev=67400&r1=67399&r2=67400&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp Fri Mar 20 15:42:23 2009 @@ -105,18 +105,15 @@ // See if anything is flagged to this node, if so, add them to flagged // nodes. Nodes can have at most one flag input and one flag output. Flags - // are required the be the last operand and result of a node. + // are required to be the last operand and result of a node. // Scan up to find flagged preds. SDNode *N = NI; - if (N->getNumOperands() && - N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag) { - do { - N = N->getOperand(N->getNumOperands()-1).getNode(); - assert(N->getNodeId() == -1 && "Node already inserted!"); - N->setNodeId(NodeSUnit->NodeNum); - } while (N->getNumOperands() && - N->getOperand(N->getNumOperands()-1).getValueType()== MVT::Flag); + while (N->getNumOperands() && + N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag) { + N = N->getOperand(N->getNumOperands()-1).getNode(); + assert(N->getNodeId() == -1 && "Node already inserted!"); + N->setNodeId(NodeSUnit->NodeNum); } // Scan down to find any flagged succs. From baldrick at free.fr Fri Mar 20 16:48:45 2009 From: baldrick at free.fr (Duncan Sands) Date: Fri, 20 Mar 2009 21:48:45 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67405 - /llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Message-ID: <200903202148.n2KLmjI8000394@zion.cs.uiuc.edu> Author: baldrick Date: Fri Mar 20 16:48:44 2009 New Revision: 67405 URL: http://llvm.org/viewvc/llvm-project?rev=67405&view=rev Log: Allow loads from constants to be folded even if the constant has weak linkage. Do this by giving the constant weak_odr linkage rather than weak linkage. It is not clear whether this optimization is valid (see gcc bug 36685), but mainline gcc chooses to do it, and fold may already have done it, so we might as well join in with gusto. 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=67405&r1=67404&r2=67405&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-backend.cpp Fri Mar 20 16:48:44 2009 @@ -1281,26 +1281,40 @@ GV->setThreadLocal(true); // Set the linkage. + GlobalValue::LinkageTypes Linkage = GV->getLinkage(); if (CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_WITH_VIS) && DECL_LLVM_PRIVATE(decl)) { - GV->setLinkage(GlobalValue::PrivateLinkage); + Linkage = GlobalValue::PrivateLinkage; } else if (!TREE_PUBLIC(decl)) { - GV->setLinkage(GlobalValue::InternalLinkage); + Linkage = GlobalValue::InternalLinkage; } else if (DECL_WEAK(decl)) { // The user may have explicitly asked for weak linkage - ignore flag_odr. - GV->setLinkage(GlobalValue::WeakAnyLinkage); + Linkage = GlobalValue::WeakAnyLinkage; } else if (DECL_ONE_ONLY(decl)) { - GV->setLinkage(GlobalValue::getWeakLinkage(flag_odr)); + Linkage = GlobalValue::getWeakLinkage(flag_odr); } else if (DECL_COMMON(decl) && // DECL_COMMON is only meaningful if no init (!DECL_INITIAL(decl) || DECL_INITIAL(decl) == error_mark_node)) { // llvm-gcc also includes DECL_VIRTUAL_P here. - GV->setLinkage(GlobalValue::CommonLinkage); + Linkage = GlobalValue::CommonLinkage; } else if (DECL_COMDAT(decl)) { - GV->setLinkage(GlobalValue::getLinkOnceLinkage(flag_odr)); + Linkage = GlobalValue::getLinkOnceLinkage(flag_odr); } + // Allow loads from constants to be folded even if the constant has weak + // linkage. Do this by giving the constant weak_odr linkage rather than + // weak linkage. It is not clear whether this optimization is valid (see + // gcc bug 36685), but mainline gcc chooses to do it, and fold may already + // have done it, so we might as well join in with gusto. + if (GV->isConstant()) { + if (Linkage == GlobalValue::WeakAnyLinkage) + Linkage = GlobalValue::WeakODRLinkage; + else if (Linkage == GlobalValue::LinkOnceAnyLinkage) + Linkage = GlobalValue::LinkOnceODRLinkage; + } + GV->setLinkage(Linkage); + #ifdef TARGET_ADJUST_LLVM_LINKAGE - TARGET_ADJUST_LLVM_LINKAGE(GV,decl); + TARGET_ADJUST_LLVM_LINKAGE(GV, decl); #endif /* TARGET_ADJUST_LLVM_LINKAGE */ handleVisibility(decl, GV); @@ -1586,8 +1600,8 @@ GV = GVE; // Global already created, reuse it. } } - - if ((TREE_READONLY(decl) && !TREE_SIDE_EFFECTS(decl)) || + + if ((TREE_READONLY(decl) && !TREE_SIDE_EFFECTS(decl)) || TREE_CODE(decl) == CONST_DECL) { if (DECL_EXTERNAL(decl)) { // Mark external globals constant even though they could be marked @@ -1638,10 +1652,21 @@ // Do not mark something that is already known to be linkonce or internal. // The user may have explicitly asked for weak linkage - ignore flag_odr. if (GV->hasExternalLinkage()) { - if (GV->isDeclaration()) - GV->setLinkage(GlobalValue::ExternalWeakLinkage); - else - GV->setLinkage(GlobalValue::WeakAnyLinkage); + GlobalValue::LinkageTypes Linkage; + if (GV->isDeclaration()) { + Linkage = GlobalValue::ExternalWeakLinkage; + } else { + Linkage = GlobalValue::WeakAnyLinkage; + // Allow loads from constants to be folded even if the constant has weak + // linkage. Do this by giving the constant weak_odr linkage rather than + // weak linkage. It is not clear whether this optimization is valid (see + // gcc bug 36685), but mainline gcc chooses to do it, and fold may already + // have done it, so we might as well join in with gusto. + if (GlobalVariable *GVar = dyn_cast(GV)) + if (GVar->isConstant()) + Linkage = GlobalValue::WeakODRLinkage; + } + GV->setLinkage(Linkage); } } From baldrick at free.fr Fri Mar 20 16:53:30 2009 From: baldrick at free.fr (Duncan Sands) Date: Fri, 20 Mar 2009 21:53:30 -0000 Subject: [llvm-commits] [llvm] r67407 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp lib/Transforms/Scalar/SCCP.cpp lib/Transforms/Utils/CloneFunction.cpp test/Feature/weak_constant.ll test/FrontendC/weak_constant.c Message-ID: <200903202153.n2KLrUQW000756@zion.cs.uiuc.edu> Author: baldrick Date: Fri Mar 20 16:53:29 2009 New Revision: 67407 URL: http://llvm.org/viewvc/llvm-project?rev=67407&view=rev Log: Don't load values out of global constants with weak linkage: the value may be replaced with something different at link time. (Frontends that want to allow values to be loaded out of weak constants can give their constants weak_odr linkage). Added: llvm/trunk/test/Feature/weak_constant.ll llvm/trunk/test/FrontendC/weak_constant.c Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp llvm/trunk/lib/Transforms/Scalar/SCCP.cpp llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=67407&r1=67406&r2=67407&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Fri Mar 20 16:53:29 2009 @@ -11215,14 +11215,15 @@ // Instcombine load (constant global) into the value loaded. if (GlobalVariable *GV = dyn_cast(Op)) - if (GV->isConstant() && !GV->isDeclaration()) + if (GV->isConstant() && !GV->isDeclaration() && !GV->mayBeOverridden()) return ReplaceInstUsesWith(LI, GV->getInitializer()); // Instcombine load (constantexpr_GEP global, 0, ...) into the value loaded. if (ConstantExpr *CE = dyn_cast(Op)) { if (CE->getOpcode() == Instruction::GetElementPtr) { if (GlobalVariable *GV = dyn_cast(CE->getOperand(0))) - if (GV->isConstant() && !GV->isDeclaration()) + if (GV->isConstant() && !GV->isDeclaration() && + !GV->mayBeOverridden()) if (Constant *V = ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE)) return ReplaceInstUsesWith(LI, V); @@ -11246,7 +11247,7 @@ // If this load comes from anywhere in a constant global, and if the global // is all undef or zero, we know what it loads. if (GlobalVariable *GV = dyn_cast(Op->getUnderlyingObject())){ - if (GV->isConstant() && GV->hasInitializer()) { + if (GV->isConstant() && GV->hasInitializer() && !GV->mayBeOverridden()) { if (GV->getInitializer()->isNullValue()) return ReplaceInstUsesWith(LI, Constant::getNullValue(LI.getType())); else if (isa(GV->getInitializer())) Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=67407&r1=67406&r2=67407&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Fri Mar 20 16:53:29 2009 @@ -1131,7 +1131,7 @@ // Transform load (constant global) into the value loaded. if (GlobalVariable *GV = dyn_cast(Ptr)) { if (GV->isConstant()) { - if (!GV->isDeclaration()) { + if (!GV->isDeclaration() && !GV->mayBeOverridden()) { markConstant(IV, &I, GV->getInitializer()); return; } @@ -1150,7 +1150,7 @@ if (ConstantExpr *CE = dyn_cast(Ptr)) if (CE->getOpcode() == Instruction::GetElementPtr) if (GlobalVariable *GV = dyn_cast(CE->getOperand(0))) - if (GV->isConstant() && !GV->isDeclaration()) + if (GV->isConstant() && !GV->isDeclaration() && !GV->mayBeOverridden()) if (Constant *V = ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE)) { markConstant(IV, &I, V); Modified: llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp?rev=67407&r1=67406&r2=67407&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp Fri Mar 20 16:53:29 2009 @@ -335,7 +335,8 @@ if (ConstantExpr *CE = dyn_cast(Ops[0])) if (!LI->isVolatile() && CE->getOpcode() == Instruction::GetElementPtr) if (GlobalVariable *GV = dyn_cast(CE->getOperand(0))) - if (GV->isConstant() && !GV->isDeclaration()) + if (GV->isConstant() && !GV->isDeclaration() && + !GV->mayBeOverridden()) return ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE); Added: llvm/trunk/test/Feature/weak_constant.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Feature/weak_constant.ll?rev=67407&view=auto ============================================================================== --- llvm/trunk/test/Feature/weak_constant.ll (added) +++ llvm/trunk/test/Feature/weak_constant.ll Fri Mar 20 16:53:29 2009 @@ -0,0 +1,38 @@ +; RUN: llvm-as < %s | opt -std-compile-opts | llvm-dis > %t +; RUN: grep undef %t | count 1 +; RUN: grep 5 %t | count 1 +; RUN: grep 7 %t | count 1 +; RUN: grep 9 %t | count 1 + + type { i32, i32 } ; type %0 + at a = weak constant i32 undef ; [#uses=1] + at b = weak constant i32 5 ; [#uses=1] + at c = weak constant %0 { i32 7, i32 9 } ; <%0*> [#uses=1] + +define i32 @la() { + %v = load i32* @a ; [#uses=1] + ret i32 %v +} + +define i32 @lb() { + %v = load i32* @b ; [#uses=1] + ret i32 %v +} + +define i32 @lc() { + %g = getelementptr %0* @c, i32 0, i32 0 ; [#uses=1] + %u = load i32* %g ; [#uses=1] + %h = getelementptr %0* @c, i32 0, i32 1 ; [#uses=1] + %v = load i32* %h ; [#uses=1] + %r = add i32 %u, %v + ret i32 %r +} + +define i32 @f() { + %u = call i32 @la() ; [#uses=1] + %v = call i32 @lb() ; [#uses=1] + %w = call i32 @lc() ; [#uses=1] + %r = add i32 %u, %v ; [#uses=1] + %s = add i32 %r, %w ; [#uses=1] + ret i32 %s +} Added: llvm/trunk/test/FrontendC/weak_constant.c URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FrontendC/weak_constant.c?rev=67407&view=auto ============================================================================== --- llvm/trunk/test/FrontendC/weak_constant.c (added) +++ llvm/trunk/test/FrontendC/weak_constant.c Fri Mar 20 16:53:29 2009 @@ -0,0 +1,12 @@ +// RUN: %llvmgcc -S %s -O1 -o - | grep {ret.*123} +// Check for bug compatibility with gcc. + +const int x __attribute((weak)) = 123; + +int* f(void) { + return &x; +} + +int g(void) { + return *f(); +} From isanbard at gmail.com Fri Mar 20 16:57:42 2009 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 20 Mar 2009 21:57:42 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67408 - in /llvm-gcc-4.2/trunk/gcc: c-typeck.c cp/typeck.c testsuite/g++.apple/block-seq-1.C testsuite/gcc.apple/block-seq-1.c version.c Message-ID: <200903202157.n2KLvgui001005@zion.cs.uiuc.edu> Author: void Date: Fri Mar 20 16:57:41 2009 New Revision: 67408 URL: http://llvm.org/viewvc/llvm-project?rev=67408&view=rev Log: Fix regression. Syncing with Apple GCC 5643. Added: llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-seq-1.C llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-seq-1.c Modified: llvm-gcc-4.2/trunk/gcc/c-typeck.c llvm-gcc-4.2/trunk/gcc/cp/typeck.c llvm-gcc-4.2/trunk/gcc/version.c Modified: llvm-gcc-4.2/trunk/gcc/c-typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/c-typeck.c?rev=67408&r1=67407&r2=67408&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/c-typeck.c (original) +++ llvm-gcc-4.2/trunk/gcc/c-typeck.c Fri Mar 20 16:57:41 2009 @@ -4203,10 +4203,12 @@ if (TREE_CODE (inner) == VAR_DECL && COPYABLE_BYREF_LOCAL_VAR (inner)) { + tree old_rhs = rhs; /* then we save the rhs. */ rhs = save_expr (rhs); - /* And arrage for the sequence point to be inserted. */ - insert_sequence_point = true; + if (rhs != old_rhs) + /* And arrage for the sequence point to be inserted. */ + insert_sequence_point = true; } } } Modified: llvm-gcc-4.2/trunk/gcc/cp/typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/cp/typeck.c?rev=67408&r1=67407&r2=67408&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/cp/typeck.c (original) +++ llvm-gcc-4.2/trunk/gcc/cp/typeck.c Fri Mar 20 16:57:41 2009 @@ -6259,10 +6259,12 @@ if (TREE_CODE (inner) == VAR_DECL && COPYABLE_BYREF_LOCAL_VAR (inner)) { + tree old_rhs = rhs; /* then we save the rhs. */ rhs = save_expr (rhs); - /* And arrage for the sequence point to be inserted. */ - insert_sequence_point = true; + if (rhs != old_rhs) + /* And arrage for the sequence point to be inserted. */ + insert_sequence_point = true; } } } Added: llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-seq-1.C URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/g%2B%2B.apple/block-seq-1.C?rev=67408&view=auto ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-seq-1.C (added) +++ llvm-gcc-4.2/trunk/gcc/testsuite/g++.apple/block-seq-1.C Fri Mar 20 16:57:41 2009 @@ -0,0 +1,9 @@ +/* APPLE LOCAL file __block assign sequence point 6639533 */ +/* { dg-options "-Wall" } */ +/* { dg-do compile } */ + +int foo() { + __block int retval; + retval = 0; + return retval; +} Added: llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-seq-1.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-seq-1.c?rev=67408&view=auto ============================================================================== --- llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-seq-1.c (added) +++ llvm-gcc-4.2/trunk/gcc/testsuite/gcc.apple/block-seq-1.c Fri Mar 20 16:57:41 2009 @@ -0,0 +1,9 @@ +/* APPLE LOCAL file __block assign sequence point 6639533 */ +/* { dg-options "-Wall" } */ +/* { dg-do compile } */ + +int foo() { + __block int retval; + retval = 0; + return retval; +} Modified: llvm-gcc-4.2/trunk/gcc/version.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/version.c?rev=67408&r1=67407&r2=67408&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/version.c (original) +++ llvm-gcc-4.2/trunk/gcc/version.c Fri Mar 20 16:57:41 2009 @@ -11,12 +11,12 @@ /* APPLE LOCAL begin Apple version */ #ifdef ENABLE_LLVM #ifdef LLVM_VERSION_INFO -#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1) (LLVM build " LLVM_VERSION_INFO ")" +#define VERSUFFIX " (Based on Apple Inc. build 5643) (LLVM build " LLVM_VERSION_INFO ")" #else -#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1) (LLVM build)" +#define VERSUFFIX " (Based on Apple Inc. build 5643) (LLVM build)" #endif #else -#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1)" +#define VERSUFFIX " (Based on Apple Inc. build 5643)" #endif /* APPLE LOCAL end Apple version */ From isanbard at gmail.com Fri Mar 20 17:00:02 2009 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 20 Mar 2009 22:00:02 -0000 Subject: [llvm-commits] [llvm-gcc-4.2] r67409 - in /llvm-gcc-4.2/branches/Apple/Dib/gcc: c-typeck.c cp/typeck.c testsuite/g++.apple/block-seq-1.C testsuite/gcc.apple/block-seq-1.c version.c Message-ID: <200903202200.n2KM02lD001159@zion.cs.uiuc.edu> Author: void Date: Fri Mar 20 17:00:02 2009 New Revision: 67409 URL: http://llvm.org/viewvc/llvm-project?rev=67409&view=rev Log: --- Merging (from foreign repository) r67408 into '.': A gcc/testsuite/gcc.apple/block-seq-1.c A gcc/testsuite/g++.apple/block-seq-1.C U gcc/cp/typeck.c U gcc/c-typeck.c U gcc/version.c Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g++.apple/block-seq-1.C llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/gcc.apple/block-seq-1.c Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c?rev=67409&r1=67408&r2=67409&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/c-typeck.c Fri Mar 20 17:00:02 2009 @@ -4203,10 +4203,12 @@ if (TREE_CODE (inner) == VAR_DECL && COPYABLE_BYREF_LOCAL_VAR (inner)) { + tree old_rhs = rhs; /* then we save the rhs. */ rhs = save_expr (rhs); - /* And arrage for the sequence point to be inserted. */ - insert_sequence_point = true; + if (rhs != old_rhs) + /* And arrage for the sequence point to be inserted. */ + insert_sequence_point = true; } } } Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c?rev=67409&r1=67408&r2=67409&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/cp/typeck.c Fri Mar 20 17:00:02 2009 @@ -6259,10 +6259,12 @@ if (TREE_CODE (inner) == VAR_DECL && COPYABLE_BYREF_LOCAL_VAR (inner)) { + tree old_rhs = rhs; /* then we save the rhs. */ rhs = save_expr (rhs); - /* And arrage for the sequence point to be inserted. */ - insert_sequence_point = true; + if (rhs != old_rhs) + /* And arrage for the sequence point to be inserted. */ + insert_sequence_point = true; } } } Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g++.apple/block-seq-1.C URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g%2B%2B.apple/block-seq-1.C?rev=67409&view=auto ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g++.apple/block-seq-1.C (added) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/g++.apple/block-seq-1.C Fri Mar 20 17:00:02 2009 @@ -0,0 +1,9 @@ +/* APPLE LOCAL file __block assign sequence point 6639533 */ +/* { dg-options "-Wall" } */ +/* { dg-do compile } */ + +int foo() { + __block int retval; + retval = 0; + return retval; +} Added: llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/gcc.apple/block-seq-1.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/gcc.apple/block-seq-1.c?rev=67409&view=auto ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/gcc.apple/block-seq-1.c (added) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/testsuite/gcc.apple/block-seq-1.c Fri Mar 20 17:00:02 2009 @@ -0,0 +1,9 @@ +/* APPLE LOCAL file __block assign sequence point 6639533 */ +/* { dg-options "-Wall" } */ +/* { dg-do compile } */ + +int foo() { + __block int retval; + retval = 0; + return retval; +} Modified: llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c?rev=67409&r1=67408&r2=67409&view=diff ============================================================================== --- llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c (original) +++ llvm-gcc-4.2/branches/Apple/Dib/gcc/version.c Fri Mar 20 17:00:02 2009 @@ -11,12 +11,12 @@ /* APPLE LOCAL begin Apple version */ #ifdef ENABLE_LLVM #ifdef LLVM_VERSION_INFO -#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1) (LLVM build " LLVM_VERSION_INFO ")" +#define VERSUFFIX " (Based on Apple Inc. build 5643) (LLVM build " LLVM_VERSION_INFO ")" #else -#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1) (LLVM build)" +#define VERSUFFIX " (Based on Apple Inc. build 5643) (LLVM build)" #endif #else -#define VERSUFFIX " (Based on Apple Inc. build 5641) (dot 1)" +#define VERSUFFIX " (Based on Apple Inc. build 5643)" #endif /* APPLE LOCAL end Apple version */ From sabre at nondot.org Fri Mar 20 17:41:15 2009 From: sabre at nondot.org (Chris Lattner) Date: Fri, 20 Mar 2009 22:41:15 -0000 Subject: [llvm-commits] [llvm] r67411 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll Message-ID: <200903202241.n2KMfFon003810@zion.cs.uiuc.edu> Author: lattner Date: Fri Mar 20 17:41:15 2009 New Revision: 67411 URL: http://llvm.org/viewvc/llvm-project?rev=67411&view=rev Log: Fix instcombine to not introduce undefined shifts when merging two shifts together. This fixes PR3851. Added: llvm/trunk/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=67411&r1=67410&r2=67411&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Fri Mar 20 17:41:15 2009 @@ -7307,22 +7307,34 @@ Value *X = ShiftOp->getOperand(0); uint32_t AmtSum = ShiftAmt1+ShiftAmt2; // Fold into one big shift. - if (AmtSum > TypeBits) - AmtSum = TypeBits; const IntegerType *Ty = cast(I.getType()); // Check for (X << c1) << c2 and (X >> c1) >> c2 if (I.getOpcode() == ShiftOp->getOpcode()) { + // If this is oversized composite shift, then unsigned shifts get 0, ashr + // saturates. + if (AmtSum >= TypeBits) { + if (I.getOpcode() != Instruction::AShr) + return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType())); + AmtSum = TypeBits-1; // Saturate to 31 for i32 ashr. + } + return BinaryOperator::Create(I.getOpcode(), X, ConstantInt::get(Ty, AmtSum)); } else if (ShiftOp->getOpcode() == Instruction::LShr && I.getOpcode() == Instruction::AShr) { + if (AmtSum >= TypeBits) + return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType())); + // ((X >>u C1) >>s C2) -> (X >>u (C1+C2)) since C1 != 0. return BinaryOperator::CreateLShr(X, ConstantInt::get(Ty, AmtSum)); } else if (ShiftOp->getOpcode() == Instruction::AShr && I.getOpcode() == Instruction::LShr) { // ((X >>s C1) >>u C2) -> ((X >>s (C1+C2)) & mask) since C1 != 0. + if (AmtSum >= TypeBits) + AmtSum = TypeBits-1; + Instruction *Shift = BinaryOperator::CreateAShr(X, ConstantInt::get(Ty, AmtSum)); InsertNewInstBefore(Shift, I); Added: llvm/trunk/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll?rev=67411&view=auto ============================================================================== --- llvm/trunk/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll (added) +++ llvm/trunk/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll Fri Mar 20 17:41:15 2009 @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {ashr i32 %val, 31} +; PR3851 + +define i32 @foo2(i32 %val) nounwind { +entry: + %shr = ashr i32 %val, 15 ; [#uses=3] + %shr4 = ashr i32 %shr, 17 ; [#uses=1] + ret i32 %shr4 + } From bob.wilson at apple.com Fri Mar 20 17:42:55 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Fri, 20 Mar 2009 22:42:55 -0000 Subject: [llvm-commits] [llvm] r67412 - /llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Message-ID: <200903202242.n2KMguKf003925@zion.cs.uiuc.edu> Author: bwilson Date: Fri Mar 20 17:42:55 2009 New Revision: 67412 URL: http://llvm.org/viewvc/llvm-project?rev=67412&view=rev Log: No functional changes. Fix indentation and whitespace only. Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=67412&r1=67411&r2=67412&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Fri Mar 20 17:42:55 2009 @@ -121,7 +121,7 @@ if (!UseSoftFloat && Subtarget->hasVFP2() && !Subtarget->isThumb()) { addRegisterClass(MVT::f32, ARM::SPRRegisterClass); addRegisterClass(MVT::f64, ARM::DPRRegisterClass); - + setTruncStoreAction(MVT::f64, MVT::f32, Expand); } computeRegisterProperties(); @@ -166,7 +166,7 @@ // ARM does not have ROTL. setOperationAction(ISD::ROTL, MVT::i32, Expand); - setOperationAction(ISD::CTTZ , MVT::i32, Expand); + setOperationAction(ISD::CTTZ, MVT::i32, Expand); setOperationAction(ISD::CTPOP, MVT::i32, Expand); if (!Subtarget->hasV5TOps() || Subtarget->isThumb()) setOperationAction(ISD::CTLZ, MVT::i32, Expand); @@ -182,7 +182,7 @@ setOperationAction(ISD::UREM, MVT::i32, Expand); setOperationAction(ISD::SDIVREM, MVT::i32, Expand); setOperationAction(ISD::UDIVREM, MVT::i32, Expand); - + // Support label based line numbers. setOperationAction(ISD::DBG_STOPPOINT, MVT::Other, Expand); setOperationAction(ISD::DEBUG_LOC, MVT::Other, Expand); @@ -194,14 +194,14 @@ setOperationAction(ISD::GlobalTLSAddress, MVT::i32, Custom); // Use the default implementation. - setOperationAction(ISD::VASTART , MVT::Other, Custom); - setOperationAction(ISD::VAARG , MVT::Other, Expand); - setOperationAction(ISD::VACOPY , MVT::Other, Expand); - setOperationAction(ISD::VAEND , MVT::Other, Expand); - setOperationAction(ISD::STACKSAVE, MVT::Other, Expand); + setOperationAction(ISD::VASTART, MVT::Other, Custom); + setOperationAction(ISD::VAARG, MVT::Other, Expand); + setOperationAction(ISD::VACOPY, MVT::Other, Expand); + setOperationAction(ISD::VAEND, MVT::Other, Expand); + setOperationAction(ISD::STACKSAVE, MVT::Other, Expand); setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand); - setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i32 , Expand); - setOperationAction(ISD::MEMBARRIER , MVT::Other, Expand); + setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i32, Expand); + setOperationAction(ISD::MEMBARRIER, MVT::Other, Expand); if (!Subtarget->hasV6Ops()) { setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i16, Expand); @@ -216,36 +216,36 @@ // We want to custom lower some of our intrinsics. setOperationAction(ISD::INTRINSIC_WO_CHAIN, MVT::Other, Custom); - setOperationAction(ISD::SETCC , MVT::i32, Expand); - setOperationAction(ISD::SETCC , MVT::f32, Expand); - setOperationAction(ISD::SETCC , MVT::f64, Expand); - setOperationAction(ISD::SELECT , MVT::i32, Expand); - setOperationAction(ISD::SELECT , MVT::f32, Expand); - setOperationAction(ISD::SELECT , MVT::f64, Expand); + setOperationAction(ISD::SETCC, MVT::i32, Expand); + setOperationAction(ISD::SETCC, MVT::f32, Expand); + setOperationAction(ISD::SETCC, MVT::f64, Expand); + setOperationAction(ISD::SELECT, MVT::i32, Expand); + setOperationAction(ISD::SELECT, MVT::f32, Expand); + setOperationAction(ISD::SELECT, MVT::f64, Expand); setOperationAction(ISD::SELECT_CC, MVT::i32, Custom); setOperationAction(ISD::SELECT_CC, MVT::f32, Custom); setOperationAction(ISD::SELECT_CC, MVT::f64, Custom); - setOperationAction(ISD::BRCOND , MVT::Other, Expand); - setOperationAction(ISD::BR_CC , MVT::i32, Custom); - setOperationAction(ISD::BR_CC , MVT::f32, Custom); - setOperationAction(ISD::BR_CC , MVT::f64, Custom); - setOperationAction(ISD::BR_JT , MVT::Other, Custom); + setOperationAction(ISD::BRCOND, MVT::Other, Expand); + setOperationAction(ISD::BR_CC, MVT::i32, Custom); + setOperationAction(ISD::BR_CC, MVT::f32, Custom); + setOperationAction(ISD::BR_CC, MVT::f64, Custom); + setOperationAction(ISD::BR_JT, MVT::Other, Custom); // We don't support sin/cos/fmod/copysign/pow - setOperationAction(ISD::FSIN , MVT::f64, Expand); - setOperationAction(ISD::FSIN , MVT::f32, Expand); - setOperationAction(ISD::FCOS , MVT::f32, Expand); - setOperationAction(ISD::FCOS , MVT::f64, Expand); - setOperationAction(ISD::FREM , MVT::f64, Expand); - setOperationAction(ISD::FREM , MVT::f32, Expand); + setOperationAction(ISD::FSIN, MVT::f64, Expand); + setOperationAction(ISD::FSIN, MVT::f32, Expand); + setOperationAction(ISD::FCOS, MVT::f32, Expand); + setOperationAction(ISD::FCOS, MVT::f64, Expand); + setOperationAction(ISD::FREM, MVT::f64, Expand); + setOperationAction(ISD::FREM, MVT::f32, Expand); if (!UseSoftFloat && Subtarget->hasVFP2() && !Subtarget->isThumb()) { setOperationAction(ISD::FCOPYSIGN, MVT::f64, Custom); setOperationAction(ISD::FCOPYSIGN, MVT::f32, Custom); } - setOperationAction(ISD::FPOW , MVT::f64, Expand); - setOperationAction(ISD::FPOW , MVT::f32, Expand); - + setOperationAction(ISD::FPOW, MVT::f64, Expand); + setOperationAction(ISD::FPOW, MVT::f32, Expand); + // int <-> fp are custom expanded into bit_convert + ARMISD ops. if (!UseSoftFloat && Subtarget->hasVFP2() && !Subtarget->isThumb()) { setOperationAction(ISD::SINT_TO_FP, MVT::i32, Custom); @@ -258,8 +258,7 @@ // ARMISD::FMRRD - No need to call setTargetDAGCombine setTargetDAGCombine(ISD::ADD); setTargetDAGCombine(ISD::SUB); - - + setStackPointerRegisterToSaveRestore(ARM::SP); setSchedulingPreference(SchedulingForRegPressure); setIfCvtBlockSizeLimit(Subtarget->isThumb() ? 0 : 10); @@ -268,7 +267,6 @@ maxStoresPerMemcpy = 1; //// temporary - rewrite interface to use type } - const char *ARMTargetLowering::getTargetNodeName(unsigned Opcode) const { switch (Opcode) { default: return 0; @@ -289,7 +287,7 @@ case ARMISD::FMSTAT: return "ARMISD::FMSTAT"; case ARMISD::CMOV: return "ARMISD::CMOV"; case ARMISD::CNEG: return "ARMISD::CNEG"; - + case ARMISD::FTOSI: return "ARMISD::FTOSI"; case ARMISD::FTOUI: return "ARMISD::FTOUI"; case ARMISD::SITOF: return "ARMISD::SITOF"; @@ -298,7 +296,7 @@ case ARMISD::SRL_FLAG: return "ARMISD::SRL_FLAG"; case ARMISD::SRA_FLAG: return "ARMISD::SRA_FLAG"; case ARMISD::RRX: return "ARMISD::RRX"; - + case ARMISD::FMRRD: return "ARMISD::FMRRD"; case ARMISD::FMDRR: return "ARMISD::FMDRR"; @@ -310,7 +308,6 @@ // Lowering Code //===----------------------------------------------------------------------===// - /// IntCCToARMCC - Convert a DAG integer condition code to an ARM CC static ARMCC::CondCodes IntCCToARMCC(ISD::CondCode CC) { switch (CC) { @@ -515,7 +512,7 @@ // and flag operands which copy the outgoing args into the appropriate regs. SDValue InFlag; for (unsigned i = 0, e = RegsToPass.size(); i != e; ++i) { - Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first, + Chain = DAG.getCopyToReg(Chain, dl, RegsToPass[i].first, RegsToPass[i].second, InFlag); InFlag = Chain.getValue(1); } @@ -542,10 +539,10 @@ ARMCP::CPStub, 4); SDValue CPAddr = DAG.getTargetConstantPool(CPV, getPointerTy(), 4); CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr); - Callee = DAG.getLoad(getPointerTy(), dl, - DAG.getEntryNode(), CPAddr, NULL, 0); + Callee = DAG.getLoad(getPointerTy(), dl, + DAG.getEntryNode(), CPAddr, NULL, 0); SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex++, MVT::i32); - Callee = DAG.getNode(ARMISD::PIC_ADD, dl, + Callee = DAG.getNode(ARMISD::PIC_ADD, dl, getPointerTy(), Callee, PICLabel); } else Callee = DAG.getTargetGlobalAddress(GV, getPointerTy()); @@ -562,9 +559,9 @@ SDValue CPAddr = DAG.getTargetConstantPool(CPV, getPointerTy(), 4); CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr); Callee = DAG.getLoad(getPointerTy(), dl, - DAG.getEntryNode(), CPAddr, NULL, 0); + DAG.getEntryNode(), CPAddr, NULL, 0); SDValue PICLabel = DAG.getConstant(ARMPCLabelIndex++, MVT::i32); - Callee = DAG.getNode(ARMISD::PIC_ADD, dl, + Callee = DAG.getNode(ARMISD::PIC_ADD, dl, getPointerTy(), Callee, PICLabel); } else Callee = DAG.getTargetExternalSymbol(Sym, getPointerTy()); @@ -618,7 +615,7 @@ case MVT::Other: break; case MVT::i32: - Chain = DAG.getCopyFromReg(Chain, dl, ARM::R0, + Chain = DAG.getCopyFromReg(Chain, dl, ARM::R0, MVT::i32, InFlag).getValue(1); ResultVals.push_back(Chain.getValue(0)); if (TheCall->getNumRetVals() > 1 && @@ -630,7 +627,7 @@ } break; case MVT::f32: - Chain = DAG.getCopyFromReg(Chain, dl, ARM::R0, + Chain = DAG.getCopyFromReg(Chain, dl, ARM::R0, MVT::i32, InFlag).getValue(1); ResultVals.push_back(DAG.getNode(ISD::BIT_CONVERT, dl, MVT::f32, Chain.getValue(0))); @@ -670,10 +667,10 @@ } else if (Op.getValueType() == MVT::f64) { // Legalize ret f64 -> ret 2 x i32. We always have fmrrd if f64 is // available. - Op = DAG.getNode(ARMISD::FMRRD, dl, + Op = DAG.getNode(ARMISD::FMRRD, dl, DAG.getVTList(MVT::i32, MVT::i32), &Op,1); SDValue Sign = DAG.getConstant(0, MVT::i32); - return DAG.getNode(ISD::RET, dl, MVT::Other, Chain, Op, Sign, + return DAG.getNode(ISD::RET, dl, MVT::Other, Chain, Op, Sign, Op.getValue(1), Sign); } Copy = DAG.getCopyToReg(Chain, dl, ARM::R0, Op, SDValue()); @@ -682,7 +679,7 @@ break; case 5: Copy = DAG.getCopyToReg(Chain, dl, ARM::R1, Op.getOperand(3), SDValue()); - Copy = DAG.getCopyToReg(Copy, dl, ARM::R0, Op.getOperand(1), + Copy = DAG.getCopyToReg(Copy, dl, ARM::R0, Op.getOperand(1), Copy.getValue(1)); // If we haven't noted the R0+R1 are live out, do so now. if (DAG.getMachineFunction().getRegInfo().liveout_empty()) { @@ -692,11 +689,11 @@ break; case 9: // i128 -> 4 regs Copy = DAG.getCopyToReg(Chain, dl, ARM::R3, Op.getOperand(7), SDValue()); - Copy = DAG.getCopyToReg(Copy , dl, ARM::R2, Op.getOperand(5), + Copy = DAG.getCopyToReg(Copy, dl, ARM::R2, Op.getOperand(5), Copy.getValue(1)); - Copy = DAG.getCopyToReg(Copy , dl, ARM::R1, Op.getOperand(3), + Copy = DAG.getCopyToReg(Copy, dl, ARM::R1, Op.getOperand(3), Copy.getValue(1)); - Copy = DAG.getCopyToReg(Copy , dl, ARM::R0, Op.getOperand(1), + Copy = DAG.getCopyToReg(Copy, dl, ARM::R0, Op.getOperand(1), Copy.getValue(1)); // If we haven't noted the R0+R1 are live out, do so now. if (DAG.getMachineFunction().getRegInfo().liveout_empty()) { @@ -706,14 +703,14 @@ DAG.getMachineFunction().getRegInfo().addLiveOut(ARM::R3); } break; - + } //We must use RET_FLAG instead of BRIND because BRIND doesn't have a flag return DAG.getNode(ARMISD::RET_FLAG, dl, MVT::Other, Copy, Copy.getValue(1)); } -// ConstantPool, JumpTable, GlobalAddress, and ExternalSymbol are lowered as +// ConstantPool, JumpTable, GlobalAddress, and ExternalSymbol are lowered as // their target countpart wrapped in the ARMISD::Wrapper node. Suppose N is // one of the above mentioned nodes. It has to be wrapped because otherwise // Select(N) returns N. So the raw TargetGlobalAddress nodes, etc. can only @@ -770,7 +767,7 @@ // "local exec" model. SDValue ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA, - SelectionDAG &DAG) { + SelectionDAG &DAG) { GlobalValue *GV = GA->getGlobal(); DebugLoc dl = GA->getDebugLoc(); SDValue Offset; @@ -823,7 +820,7 @@ } SDValue ARMTargetLowering::LowerGlobalAddressELF(SDValue Op, - SelectionDAG &DAG) { + SelectionDAG &DAG) { MVT PtrVT = getPointerTy(); DebugLoc dl = Op.getDebugLoc(); GlobalValue *GV = cast(Op)->getGlobal(); @@ -834,7 +831,7 @@ new ARMConstantPoolValue(GV, ARMCP::CPValue, UseGOTOFF ? "GOTOFF":"GOT"); SDValue CPAddr = DAG.getTargetConstantPool(CPV, PtrVT, 4); CPAddr = DAG.getNode(ARMISD::Wrapper, dl, MVT::i32, CPAddr); - SDValue Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), + SDValue Result = DAG.getLoad(PtrVT, dl, DAG.getEntryNode(), CPAddr, NULL, 0); SDValue Chain = Result.getValue(1); SDValue GOT = DAG.getGLOBAL_OFFSET_TABLE(PtrVT); @@ -861,7 +858,7 @@ } SDValue ARMTargetLowering::LowerGlobalAddressDarwin(SDValue Op, - SelectionDAG &DAG) { + SelectionDAG &DAG) { MVT PtrVT = getPointerTy(); DebugLoc dl = Op.getDebugLoc(); GlobalValue *GV = cast(Op)->getGlobal(); @@ -895,7 +892,7 @@ } SDValue ARMTargetLowering::LowerGLOBAL_OFFSET_TABLE(SDValue Op, - SelectionDAG &DAG){ + SelectionDAG &DAG){ assert(Subtarget->isTargetELF() && "GLOBAL OFFSET TABLE not implemented for non-ELF targets"); MVT PtrVT = getPointerTy(); @@ -923,7 +920,7 @@ } static SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG, - unsigned VarArgsFrameIndex) { + unsigned VarArgsFrameIndex) { // vastart just stores the address of the VarArgsFrameIndex slot into the // memory location argument. DebugLoc dl = Op.getDebugLoc(); @@ -934,8 +931,8 @@ } static SDValue LowerFORMAL_ARGUMENT(SDValue Op, SelectionDAG &DAG, - unsigned ArgNo, unsigned &NumGPRs, - unsigned &ArgOffset, DebugLoc dl) { + unsigned ArgNo, unsigned &NumGPRs, + unsigned &ArgOffset, DebugLoc dl) { MachineFunction &MF = DAG.getMachineFunction(); MVT ObjectVT = Op.getValue(ArgNo).getValueType(); SDValue Root = Op.getOperand(0); @@ -1138,7 +1135,7 @@ } /// Returns a appropriate VFP CMP (fcmp{s|d}+fmstat) for the given operands. -static SDValue getVFPCmp(SDValue LHS, SDValue RHS, SelectionDAG &DAG, +static SDValue getVFPCmp(SDValue LHS, SDValue RHS, SelectionDAG &DAG, DebugLoc dl) { SDValue Cmp; if (!isFloatingPointZero(RHS)) @@ -1149,7 +1146,7 @@ } static SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG, - const ARMSubtarget *ST) { + const ARMSubtarget *ST) { MVT VT = Op.getValueType(); SDValue LHS = Op.getOperand(0); SDValue RHS = Op.getOperand(1); @@ -1178,14 +1175,14 @@ SDValue ARMCC2 = DAG.getConstant(CondCode2, MVT::i32); // FIXME: Needs another CMP because flag can have but one use. SDValue Cmp2 = getVFPCmp(LHS, RHS, DAG, dl); - Result = DAG.getNode(ARMISD::CMOV, dl, VT, + Result = DAG.getNode(ARMISD::CMOV, dl, VT, Result, TrueVal, ARMCC2, CCR, Cmp2); } return Result; } static SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG, - const ARMSubtarget *ST) { + const ARMSubtarget *ST) { SDValue Chain = Op.getOperand(0); ISD::CondCode CC = cast(Op.getOperand(1))->get(); SDValue LHS = Op.getOperand(2); @@ -1197,7 +1194,7 @@ SDValue ARMCC; SDValue CCR = DAG.getRegister(ARM::CPSR, MVT::i32); SDValue Cmp = getARMCmp(LHS, RHS, CC, ARMCC, DAG, ST->isThumb(), dl); - return DAG.getNode(ARMISD::BRCOND, dl, MVT::Other, + return DAG.getNode(ARMISD::BRCOND, dl, MVT::Other, Chain, Dest, ARMCC, CCR,Cmp); } @@ -1206,7 +1203,7 @@ if (FPCCToARMCC(CC, CondCode, CondCode2)) // Swap the LHS/RHS of the comparison if needed. std::swap(LHS, RHS); - + SDValue Cmp = getVFPCmp(LHS, RHS, DAG, dl); SDValue ARMCC = DAG.getConstant(CondCode, MVT::i32); SDValue CCR = DAG.getRegister(ARM::CPSR, MVT::i32); @@ -1326,7 +1323,7 @@ for (i = 0; i < MAX_LOADS_IN_LDM && EmittedNumMemOps + i < NumMemOps; ++i) { TFOps[i] = DAG.getStore(Chain, dl, Loads[i], - DAG.getNode(ISD::ADD, dl, MVT::i32, Dst, + DAG.getNode(ISD::ADD, dl, MVT::i32, Dst, DAG.getConstant(DstOff, MVT::i32)), DstSV, DstSVOff + DstOff); DstOff += VTSize; @@ -1336,7 +1333,7 @@ EmittedNumMemOps += i; } - if (BytesLeft == 0) + if (BytesLeft == 0) return Chain; // Issue loads / stores for the trailing (1 - 3) bytes. @@ -1374,7 +1371,7 @@ } TFOps[i] = DAG.getStore(Chain, dl, Loads[i], - DAG.getNode(ISD::ADD, dl, MVT::i32, Dst, + DAG.getNode(ISD::ADD, dl, MVT::i32, Dst, DAG.getConstant(DstOff, MVT::i32)), DstSV, DstSVOff + DstOff); ++i; @@ -1395,11 +1392,11 @@ DAG.getConstant(1, MVT::i32)); return DAG.getNode(ARMISD::FMDRR, dl, MVT::f64, Lo, Hi); } - + // Turn f64->i64 into FMRRD. - SDValue Cvt = DAG.getNode(ARMISD::FMRRD, dl, + SDValue Cvt = DAG.getNode(ARMISD::FMRRD, dl, DAG.getVTList(MVT::i32, MVT::i32), &Op, 1); - + // Merge the pieces into a single i64 value. return DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, Cvt, Cvt.getValue(1)); } @@ -1413,30 +1410,29 @@ if (!isa(N->getOperand(1)) || cast(N->getOperand(1))->getZExtValue() != 1) return SDValue(); - + // If we are in thumb mode, we don't have RRX. if (ST->isThumb()) return SDValue(); - + // Okay, we have a 64-bit SRA or SRL of 1. Lower this to an RRX expr. DebugLoc dl = N->getDebugLoc(); SDValue Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32, N->getOperand(0), DAG.getConstant(0, MVT::i32)); SDValue Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32, N->getOperand(0), DAG.getConstant(1, MVT::i32)); - + // First, build a SRA_FLAG/SRL_FLAG op, which shifts the top part by one and // captures the result into a carry flag. unsigned Opc = N->getOpcode() == ISD::SRL ? ARMISD::SRL_FLAG:ARMISD::SRA_FLAG; Hi = DAG.getNode(Opc, dl, DAG.getVTList(MVT::i32, MVT::Flag), &Hi, 1); - + // The low part is an ARMISD::RRX operand, which shifts the carry in. Lo = DAG.getNode(ARMISD::RRX, dl, MVT::i32, Lo, Hi.getValue(1)); - + // Merge the pieces into a single i64 value. return DAG.getNode(ISD::BUILD_PAIR, dl, MVT::i64, Lo, Hi); } - SDValue ARMTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) { switch (Op.getOpcode()) { default: assert(0 && "Don't know how to custom lower this!"); abort(); @@ -1468,10 +1464,8 @@ return SDValue(); } - /// ReplaceNodeResults - Replace the results of node with an illegal result /// type with new values built out of custom code. -/// void ARMTargetLowering::ReplaceNodeResults(SDNode *N, SmallVectorImpl&Results, SelectionDAG &DAG) { @@ -1491,7 +1485,6 @@ } } } - //===----------------------------------------------------------------------===// // ARM Scheduler Hooks @@ -1568,7 +1561,6 @@ static SDValue combineSelectAndUse(SDNode *N, SDValue Slct, SDValue OtherOp, TargetLowering::DAGCombinerInfo &DCI) { - SelectionDAG &DAG = DCI.DAG; const TargetLowering &TLI = DAG.getTargetLoweringInfo(); MVT VT = N->getValueType(0); @@ -1631,7 +1623,7 @@ TargetLowering::DAGCombinerInfo &DCI) { // added by evan in r37685 with no testcase. SDValue N0 = N->getOperand(0), N1 = N->getOperand(1); - + // fold (add (select cc, 0, c), x) -> (select cc, x, (add, x, c)) if (N0.getOpcode() == ISD::SELECT && N0.getNode()->hasOneUse()) { SDValue Result = combineSelectAndUse(N, N0, N1, DCI); @@ -1641,7 +1633,7 @@ SDValue Result = combineSelectAndUse(N, N1, N0, DCI); if (Result.getNode()) return Result; } - + return SDValue(); } @@ -1650,20 +1642,20 @@ TargetLowering::DAGCombinerInfo &DCI) { // added by evan in r37685 with no testcase. SDValue N0 = N->getOperand(0), N1 = N->getOperand(1); - + // fold (sub x, (select cc, 0, c)) -> (select cc, x, (sub, x, c)) if (N1.getOpcode() == ISD::SELECT && N1.getNode()->hasOneUse()) { SDValue Result = combineSelectAndUse(N, N1, N0, DCI); if (Result.getNode()) return Result; } - + return SDValue(); } /// PerformFMRRDCombine - Target-specific dag combine xforms for ARMISD::FMRRD. -static SDValue PerformFMRRDCombine(SDNode *N, - TargetLowering::DAGCombinerInfo &DCI) { +static SDValue PerformFMRRDCombine(SDNode *N, + TargetLowering::DAGCombinerInfo &DCI) { // fmrrd(fmdrr x, y) -> x,y SDValue InDouble = N->getOperand(0); if (InDouble.getOpcode() == ARMISD::FMDRR) @@ -1672,18 +1664,17 @@ } SDValue ARMTargetLowering::PerformDAGCombine(SDNode *N, - DAGCombinerInfo &DCI) const { + DAGCombinerInfo &DCI) const { switch (N->getOpcode()) { default: break; case ISD::ADD: return PerformADDCombine(N, DCI); case ISD::SUB: return PerformSUBCombine(N, DCI); case ARMISD::FMRRD: return PerformFMRRDCombine(N, DCI); } - + return SDValue(); } - /// isLegalAddressImmediate - Return true if the integer value can be used /// as the offset of the target addressing mode for load / store of the /// given type. @@ -1747,15 +1738,15 @@ /// isLegalAddressingMode - Return true if the addressing mode represented /// by AM is legal for this target, for a load/store of the specified type. -bool ARMTargetLowering::isLegalAddressingMode(const AddrMode &AM, +bool ARMTargetLowering::isLegalAddressingMode(const AddrMode &AM, const Type *Ty) const { if (!isLegalAddressImmediate(AM.BaseOffs, getValueType(Ty, true), Subtarget)) return false; - + // Can never fold addr of global into load/store. - if (AM.BaseGV) + if (AM.BaseGV) return false; - + switch (AM.Scale) { case 0: // no scale reg, must be "r+i" or "r", or "i". break; @@ -1767,7 +1758,7 @@ // ARM doesn't support any R+R*scale+imm addr modes. if (AM.BaseOffs) return false; - + int Scale = AM.Scale; switch (getValueType(Ty).getSimpleVT()) { default: return false; @@ -1788,12 +1779,12 @@ if (((unsigned)AM.HasBaseReg + Scale) <= 2) return true; return false; - + case MVT::isVoid: // Note, we allow "void" uses (basically, uses that aren't loads or // stores), because arm allows folding a scale into many arithmetic // operations. This should be made more precise and revisited later. - + // Allow r << imm, but the imm has to be a multiple of two. if (AM.Scale & 1) return false; return isPowerOf2_32(AM.Scale); @@ -1803,7 +1794,6 @@ return true; } - static bool getIndexedAddressParts(SDNode *Ptr, MVT VT, bool isSEXTLoad, SDValue &Base, SDValue &Offset, bool &isInc, @@ -1928,7 +1918,7 @@ void ARMTargetLowering::computeMaskedBitsForTargetNode(const SDValue Op, const APInt &Mask, - APInt &KnownZero, + APInt &KnownZero, APInt &KnownOne, const SelectionDAG &DAG, unsigned Depth) const { @@ -1968,7 +1958,7 @@ return TargetLowering::getConstraintType(Constraint); } -std::pair +std::pair ARMTargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint, MVT VT) const { if (Constraint.size() == 1) { From isanbard at gmail.com Fri Mar 20 17:54:06 2009 From: isanbard at gmail.com (Bill Wendling) Date: Fri, 20 Mar 2009 22:54:06 -0000 Subject: [llvm-commits] [llvm] r67414 - in /llvm/branches/Apple/Dib: lib/Transforms/Scalar/InstructionCombining.cpp test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll Message-ID: <200903202254.n2KMs7vP004613@zion.cs.uiuc.edu> Author: void Date: Fri Mar 20 17:54:05 2009 New Revision: 67414 URL: http://llvm.org/viewvc/llvm-project?rev=67414&view=rev Log: --- Merging (from foreign repository) r67411 into '.': A test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll U lib/Transforms/Scalar/InstructionCombining.cpp Fix instcombine to not introduce undefined shifts when merging two shifts together. This fixes PR3851. Added: llvm/branches/Apple/Dib/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/InstructionCombining.cpp Modified: llvm/branches/Apple/Dib/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/lib/Transforms/Scalar/InstructionCombining.cpp?rev=67414&r1=67413&r2=67414&view=diff ============================================================================== --- llvm/branches/Apple/Dib/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/branches/Apple/Dib/lib/Transforms/Scalar/InstructionCombining.cpp Fri Mar 20 17:54:05 2009 @@ -7307,22 +7307,34 @@ Value *X = ShiftOp->getOperand(0); uint32_t AmtSum = ShiftAmt1+ShiftAmt2; // Fold into one big shift. - if (AmtSum > TypeBits) - AmtSum = TypeBits; const IntegerType *Ty = cast(I.getType()); // Check for (X << c1) << c2 and (X >> c1) >> c2 if (I.getOpcode() == ShiftOp->getOpcode()) { + // If this is oversized composite shift, then unsigned shifts get 0, ashr + // saturates. + if (AmtSum >= TypeBits) { + if (I.getOpcode() != Instruction::AShr) + return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType())); + AmtSum = TypeBits-1; // Saturate to 31 for i32 ashr. + } + return BinaryOperator::Create(I.getOpcode(), X, ConstantInt::get(Ty, AmtSum)); } else if (ShiftOp->getOpcode() == Instruction::LShr && I.getOpcode() == Instruction::AShr) { + if (AmtSum >= TypeBits) + return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType())); + // ((X >>u C1) >>s C2) -> (X >>u (C1+C2)) since C1 != 0. return BinaryOperator::CreateLShr(X, ConstantInt::get(Ty, AmtSum)); } else if (ShiftOp->getOpcode() == Instruction::AShr && I.getOpcode() == Instruction::LShr) { // ((X >>s C1) >>u C2) -> ((X >>s (C1+C2)) & mask) since C1 != 0. + if (AmtSum >= TypeBits) + AmtSum = TypeBits-1; + Instruction *Shift = BinaryOperator::CreateAShr(X, ConstantInt::get(Ty, AmtSum)); InsertNewInstBefore(Shift, I); Added: llvm/branches/Apple/Dib/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll?rev=67414&view=auto ============================================================================== --- llvm/branches/Apple/Dib/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll (added) +++ llvm/branches/Apple/Dib/test/Transforms/InstCombine/2009-03-20-AShrOverShift.ll Fri Mar 20 17:54:05 2009 @@ -0,0 +1,9 @@ +; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep {ashr i32 %val, 31} +; PR3851 + +define i32 @foo2(i32 %val) nounwind { +entry: + %shr = ashr i32 %val, 15 ; [#uses=3] + %shr4 = ashr i32 %shr, 17 ; [#uses=1] + ret i32 %shr4 + } From eli.friedman at gmail.com Fri Mar 20 18:00:03 2009 From: eli.friedman at gmail.com (Eli Friedman) Date: Fri, 20 Mar 2009 16:00:03 -0700 Subject: [llvm-commits] [llvm] r67407 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp lib/Transforms/Scalar/SCCP.cpp lib/Transforms/Utils/CloneFunction.cpp test/Feature/weak_constant.ll test/FrontendC/weak_constant.c In-Reply-To: <200903202153.n2KLrUQW000756@zion.cs.uiuc.edu> References: <200903202153.n2KLrUQW000756@zion.cs.uiuc.edu> Message-ID: On Fri, Mar 20, 2009 at 2:53 PM, Duncan Sands wrote: > - ? ? ?if (GV->isConstant() && !GV->isDeclaration()) > + ? ? ?if (GV->isConstant() && !GV->isDeclaration() && !GV->mayBeOverridden()) Perhaps a helper in GlobalVariable would be appropriate for this predicate? -Eli From bob.wilson at apple.com Fri Mar 20 18:16:44 2009 From: bob.wilson at apple.com (Bob Wilson) Date: Fri, 20 Mar 2009 23:16:44 -0000 Subject: [llvm-commits] [llvm] r67416 - /llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Message-ID: <200903202316.n2KNGilu006186@zion.cs.uiuc.edu> Author: bwilson Date: Fri Mar 20 18:16:43 2009 New Revision: 67416 URL: http://llvm.org/viewvc/llvm-project?rev=67416&view=rev Log: Fix a few more indentation problems and an 80-column violation. Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=67416&r1=67415&r2=67416&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original) +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Fri Mar 20 18:16:43 2009 @@ -108,8 +108,8 @@ // Integer to floating-point conversions. // i64 conversions are done via library routines even when generating VFP // instructions, so use the same ones. - // FIXME: There appears to be some naming inconsistency in ARM libgcc: e.g. - // __floatunsidf vs. __floatunssidfvfp. + // FIXME: There appears to be some naming inconsistency in ARM libgcc: + // e.g., __floatunsidf vs. __floatunssidfvfp. setLibcallName(RTLIB::SINTTOFP_I32_F64, "__floatsidfvfp"); setLibcallName(RTLIB::UINTTOFP_I32_F64, "__floatunssidfvfp"); setLibcallName(RTLIB::SINTTOFP_I32_F32, "__floatsisfvfp"); @@ -403,8 +403,8 @@ TheCall->getCallingConv() == CallingConv::Fast) && "unknown calling convention"); SDValue Callee = TheCall->getCallee(); - unsigned NumOps = TheCall->getNumArgs(); - DebugLoc dl = TheCall->getDebugLoc(); + unsigned NumOps = TheCall->getNumArgs(); + DebugLoc dl = TheCall->getDebugLoc(); unsigned ArgOffset = 0; // Frame mechanisms handle retaddr slot unsigned NumGPRs = 0; // GPRs used for parameter passing. @@ -463,9 +463,9 @@ break; case MVT::i64: { SDValue Lo = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32, Arg, - DAG.getConstant(0, getPointerTy())); + DAG.getConstant(0, getPointerTy())); SDValue Hi = DAG.getNode(ISD::EXTRACT_ELEMENT, dl, MVT::i32, Arg, - DAG.getConstant(1, getPointerTy())); + DAG.getConstant(1, getPointerTy())); RegsToPass.push_back(std::make_pair(GPRArgRegs[NumGPRs], Lo)); if (ObjGPRs == 2) RegsToPass.push_back(std::make_pair(GPRArgRegs[NumGPRs+1], Hi)); @@ -478,8 +478,8 @@ } case MVT::f64: { SDValue Cvt = DAG.getNode(ARMISD::FMRRD, dl, - DAG.getVTList(MVT::i32, MVT::i32), - &Arg, 1); + DAG.getVTList(MVT::i32, MVT::i32), + &Arg, 1); RegsToPass.push_back(std::make_pair(GPRArgRegs[NumGPRs], Cvt)); if (ObjGPRs == 2) RegsToPass.push_back(std::make_pair(GPRArgRegs[NumGPRs+1], From bruno.cardoso at gmail.com Fri Mar 20 19:05:13 2009 From: bruno.cardoso at gmail.com (Bruno Cardoso Lopes) Date: Sat, 21 Mar 2009 00:05:13 -0000 Subject: [llvm-commits] [llvm] r67422 - in /llvm/trunk/lib/Target/Mips: MipsISelLowering.cpp MipsInstrFPU.td MipsInstrInfo.cpp MipsRegisterInfo.cpp MipsRegisterInfo.td Message-ID: <200903210005.n2L05EwK009153@zion.cs.uiuc.edu> Author: bruno Date: Fri Mar 20 19:05:07 2009 New Revision: 67422 URL: http://llvm.org/viewvc/llvm-project?rev=67422&view=rev Log: Removed AFGR32 register class Handle odd registers allocation in FGR32. Modified: llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp llvm/trunk/lib/Target/Mips/MipsInstrFPU.td llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp llvm/trunk/lib/Target/Mips/MipsRegisterInfo.td Modified: llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp?rev=67422&r1=67421&r2=67422&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp (original) +++ llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp Fri Mar 20 19:05:07 2009 @@ -66,14 +66,12 @@ // Set up the register classes addRegisterClass(MVT::i32, Mips::CPURegsRegisterClass); + addRegisterClass(MVT::f32, Mips::FGR32RegisterClass); // When dealing with single precision only, use libcalls - if (!Subtarget->isSingleFloat()) { - addRegisterClass(MVT::f32, Mips::AFGR32RegisterClass); + if (!Subtarget->isSingleFloat()) if (!Subtarget->isFP64bit()) addRegisterClass(MVT::f64, Mips::AFGR64RegisterClass); - } else - addRegisterClass(MVT::f32, Mips::FGR32RegisterClass); // Legal fp constants addLegalFPImmediate(APFloat(+0.0f)); @@ -284,13 +282,11 @@ switch (MI->getOpcode()) { default: assert(false && "Unexpected instr type to insert"); case Mips::Select_FCC: - case Mips::Select_FCC_SO32: - case Mips::Select_FCC_AS32: + case Mips::Select_FCC_S32: case Mips::Select_FCC_D32: isFPCmp = true; // FALL THROUGH case Mips::Select_CC: - case Mips::Select_CC_SO32: - case Mips::Select_CC_AS32: + case Mips::Select_CC_S32: case Mips::Select_CC_D32: { // To "insert" a SELECT_CC instruction, we actually have to insert the // diamond control-flow pattern. The incoming instruction knows the @@ -935,12 +931,9 @@ if (RegVT == MVT::i32) RC = Mips::CPURegsRegisterClass; - else if (RegVT == MVT::f32) { - if (Subtarget->isSingleFloat()) - RC = Mips::FGR32RegisterClass; - else - RC = Mips::AFGR32RegisterClass; - } else if (RegVT == MVT::f64) { + else if (RegVT == MVT::f32) + RC = Mips::FGR32RegisterClass; + else if (RegVT == MVT::f64) { if (!Subtarget->isSingleFloat()) RC = Mips::AFGR64RegisterClass; } else @@ -1162,12 +1155,8 @@ case 'r': return std::make_pair(0U, Mips::CPURegsRegisterClass); case 'f': - if (VT == MVT::f32) { - if (Subtarget->isSingleFloat()) - return std::make_pair(0U, Mips::FGR32RegisterClass); - else - return std::make_pair(0U, Mips::AFGR32RegisterClass); - } + if (VT == MVT::f32) + return std::make_pair(0U, Mips::FGR32RegisterClass); if (VT == MVT::f64) if ((!Subtarget->isSingleFloat()) && (!Subtarget->isFP64bit())) return std::make_pair(0U, Mips::AFGR64RegisterClass); Modified: llvm/trunk/lib/Target/Mips/MipsInstrFPU.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsInstrFPU.td?rev=67422&r1=67421&r2=67422&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsInstrFPU.td (original) +++ llvm/trunk/lib/Target/Mips/MipsInstrFPU.td Fri Mar 20 19:05:07 2009 @@ -44,36 +44,27 @@ //===----------------------------------------------------------------------===// def In32BitMode : Predicate<"!Subtarget.isFP64bit()">; -def In64BitMode : Predicate<"Subtarget.isFP64bit()">; def IsSingleFloat : Predicate<"Subtarget.isSingleFloat()">; def IsNotSingleFloat : Predicate<"!Subtarget.isSingleFloat()">; //===----------------------------------------------------------------------===// // Instruction Class Templates // -// A set of multiclasses is used to address this in one shot. -// SO32 - single precision only, uses all 32 32-bit fp registers -// require FGR32 Register Class and IsSingleFloat -// AS32 - 16 even fp registers are used for single precision -// require AFGR32 Register Class and In32BitMode -// S64 - 32 64 bit registers are used to hold 32-bit single precision values. -// require FGR64 Register Class and In64BitMode -// D32 - 16 even fp registers are used for double precision -// require AFGR64 Register Class and In32BitMode -// D64 - 32 64 bit registers are used to hold 64-bit double precision values. -// require FGR64 Register Class and In64BitMode +// A set of multiclasses is used to address the register usage. // -// Only SO32, AS32 and D32 are supported right now. +// S32 - single precision in 16 32bit even fp registers +// single precision in 32 32bit fp registers in SingleOnly mode +// S64 - single precision in 32 64bit fp registers (In64BitMode) +// D32 - double precision in 16 32bit even fp registers +// D64 - double precision in 32 64bit fp registers (In64BitMode) // +// Only S32 and D32 are supported right now. //===----------------------------------------------------------------------===// multiclass FFR1_1 funct, string asmstr> { - def _SO32 : FFR<0x11, funct, 0x0, (outs FGR32:$fd), (ins FGR32:$fs), - !strconcat(asmstr, ".s $fd, $fs"), []>, Requires<[IsSingleFloat]>; - - def _AS32 : FFR<0x11, funct, 0x0, (outs AFGR32:$fd), (ins AFGR32:$fs), - !strconcat(asmstr, ".s $fd, $fs"), []>, Requires<[In32BitMode]>; + def _S32 : FFR<0x11, funct, 0x0, (outs FGR32:$fd), (ins FGR32:$fs), + !strconcat(asmstr, ".s $fd, $fs"), []>; def _D32 : FFR<0x11, funct, 0x1, (outs AFGR64:$fd), (ins AFGR64:$fs), !strconcat(asmstr, ".d $fd, $fs"), []>, Requires<[In32BitMode]>; @@ -81,13 +72,9 @@ multiclass FFR1_2 funct, string asmstr, SDNode FOp> { - def _SO32 : FFR<0x11, funct, 0x0, (outs FGR32:$fd), (ins FGR32:$fs), - !strconcat(asmstr, ".s $fd, $fs"), - [(set FGR32:$fd, (FOp FGR32:$fs))]>, Requires<[IsSingleFloat]>; - - def _AS32 : FFR<0x11, funct, 0x0, (outs AFGR32:$fd), (ins AFGR32:$fs), + def _S32 : FFR<0x11, funct, 0x0, (outs FGR32:$fd), (ins FGR32:$fs), !strconcat(asmstr, ".s $fd, $fs"), - [(set AFGR32:$fd, (FOp AFGR32:$fs))]>, Requires<[In32BitMode]>; + [(set FGR32:$fd, (FOp FGR32:$fs))]>; def _D32 : FFR<0x11, funct, 0x1, (outs AFGR64:$fd), (ins AFGR64:$fs), !strconcat(asmstr, ".d $fd, $fs"), @@ -101,19 +88,12 @@ multiclass FFR1_4 funct, string asmstr, SDNode FOp> { - def _SO32 : FFR<0x11, funct, 0x0, (outs FGR32:$fd), + def _S32 : FFR<0x11, funct, 0x0, (outs FGR32:$fd), (ins FGR32:$fs, FGR32:$ft), !strconcat(asmstr, ".s $fd, $fs, $ft"), - [(set FGR32:$fd, (FOp FGR32:$fs, FGR32:$ft))]>, - Requires<[IsSingleFloat]>; - - def _AS32 : FFR<0x11, funct, 0x0, (outs AFGR32:$fd), - (ins AFGR32:$fs, AFGR32:$ft), - !strconcat(asmstr, ".s $fd, $fs, $ft"), - [(set AFGR32:$fd, (FOp AFGR32:$fs, AFGR32:$ft))]>, - Requires<[In32BitMode]>; + [(set FGR32:$fd, (FOp FGR32:$fs, FGR32:$ft))]>; - def _D32 : FFR<0x11, funct, 0x1, (outs AFGR64:$fd), + def _D32 : FFR<0x11, funct, 0x1, (outs AFGR64:$fd), (ins AFGR64:$fs, AFGR64:$ft), !strconcat(asmstr, ".d $fd, $fs, $ft"), [(set AFGR64:$fd, (FOp AFGR64:$fs, AFGR64:$ft))]>, @@ -136,25 +116,28 @@ defm FNEG : FFR1_2<0b000111, "neg", fneg>; defm FSQRT : FFR1_2<0b000100, "sqrt", fsqrt>; + /// Convert to Single Precison + def CVTS_W32 : FFR1_3<0b100000, 0x2, FGR32, FGR32, "cvt.s.w">; + let Predicates = [IsNotSingleFloat] in { /// Ceil to long signed integer - def CEIL_LS : FFR1_3<0b001010, 0x0, AFGR32, AFGR32, "ceil.l">; + def CEIL_LS : FFR1_3<0b001010, 0x0, FGR32, FGR32, "ceil.l">; def CEIL_LD : FFR1_3<0b001010, 0x1, AFGR64, AFGR64, "ceil.l">; /// Round to long signed integer - def ROUND_LS : FFR1_3<0b001000, 0x0, AFGR32, AFGR32, "round.l">; + def ROUND_LS : FFR1_3<0b001000, 0x0, FGR32, FGR32, "round.l">; def ROUND_LD : FFR1_3<0b001000, 0x1, AFGR64, AFGR64, "round.l">; /// Floor to long signed integer - def FLOOR_LS : FFR1_3<0b001011, 0x0, AFGR32, AFGR32, "floor.l">; + def FLOOR_LS : FFR1_3<0b001011, 0x0, FGR32, FGR32, "floor.l">; def FLOOR_LD : FFR1_3<0b001011, 0x1, AFGR64, AFGR64, "floor.l">; /// Trunc to long signed integer - def TRUNC_LS : FFR1_3<0b001001, 0x0, AFGR32, AFGR32, "trunc.l">; + def TRUNC_LS : FFR1_3<0b001001, 0x0, FGR32, FGR32, "trunc.l">; def TRUNC_LD : FFR1_3<0b001001, 0x1, AFGR64, AFGR64, "trunc.l">; /// Convert to long signed integer - def CVTL_S : FFR1_3<0b100101, 0x0, AFGR32, AFGR32, "cvt.l">; + def CVTL_S : FFR1_3<0b100101, 0x0, FGR32, FGR32, "cvt.l">; def CVTL_D : FFR1_3<0b100101, 0x1, AFGR64, AFGR64, "cvt.l">; /// Convert to Double Precison @@ -166,10 +149,6 @@ def CVTS_D32 : FFR1_3<0b100000, 0x1, FGR32, AFGR64, "cvt.s.d">; def CVTS_L32 : FFR1_3<0b100000, 0x3, FGR32, AFGR64, "cvt.s.l">; } - - /// Convert to Single Precison - def CVTS_W32 : FFR1_3<0b100000, 0x2, FGR32, FGR32, "cvt.s.w">, - Requires<[IsSingleFloat]>; } // The odd-numbered registers are only referenced when doing loads, @@ -184,23 +163,11 @@ ///def CTC1 : FFR<0x11, 0x0, 0x6, (outs CPURegs:$rt), (ins FGR32:$fs), /// "ctc1 $rt, $fs", []>; /// - ///def CFC1A : FFR<0x11, 0x0, 0x2, (outs CPURegs:$rt), (ins AFGR32:$fs), - /// "cfc1 $rt, $fs", []>; - - ///def CTC1A : FFR<0x11, 0x0, 0x6, (outs CPURegs:$rt), (ins AFGR32:$fs), - /// "ctc1 $rt, $fs", []>; - def MFC1 : FFR<0x11, 0x00, 0x00, (outs CPURegs:$rt), (ins FGR32:$fs), "mfc1 $rt, $fs", []>; def MTC1 : FFR<0x11, 0x00, 0x04, (outs FGR32:$fs), (ins CPURegs:$rt), "mtc1 $rt, $fs", []>; - - def MFC1A : FFR<0x11, 0x00, 0x00, (outs CPURegs:$rt), (ins AFGR32:$fs), - "mfc1 $rt, $fs", []>; - - def MTC1A : FFR<0x11, 0x00, 0x04, (outs AFGR32:$fs), (ins CPURegs:$rt), - "mtc1 $rt, $fs", []>; } /// Floating Point Memory Instructions @@ -218,11 +185,6 @@ def SWC1 : FFI<0b111001, (outs), (ins FGR32:$ft, mem:$addr), "swc1 $ft, $addr", [(store FGR32:$ft, addr:$addr)]>; -def LWC1A : FFI<0b110001, (outs AFGR32:$ft), (ins mem:$addr), "lwc1 $ft, $addr", - [(set AFGR32:$ft, (load addr:$addr))]>; -def SWC1A : FFI<0b111001, (outs), (ins AFGR32:$ft, mem:$addr), - "swc1 $ft, $addr", [(store AFGR32:$ft, addr:$addr)]>; - /// Floating-point Aritmetic defm FADD : FFR1_4<0x10, "add", fadd>; defm FDIV : FFR1_4<0x03, "div", fdiv>; @@ -274,14 +236,10 @@ /// Floating Point Compare let hasDelaySlot = 1, Defs=[FCR31] in { - def FCMP_SO32 : FCC<0x0, (outs), (ins FGR32:$fs, FGR32:$ft, condcode:$cc), + def FCMP_S32 : FCC<0x0, (outs), (ins FGR32:$fs, FGR32:$ft, condcode:$cc), "c.$cc.s $fs, $ft", [(MipsFPCmp FGR32:$fs, FGR32:$ft, imm:$cc), - (implicit FCR31)]>, Requires<[IsSingleFloat]>; + (implicit FCR31)]>; - def FCMP_AS32 : FCC<0x0, (outs), (ins AFGR32:$fs, AFGR32:$ft, condcode:$cc), - "c.$cc.s $fs, $ft", [(MipsFPCmp AFGR32:$fs, AFGR32:$ft, imm:$cc), - (implicit FCR31)]>, Requires<[In32BitMode]>; - def FCMP_D32 : FCC<0x1, (outs), (ins AFGR64:$fs, AFGR64:$ft, condcode:$cc), "c.$cc.d $fs, $ft", [(MipsFPCmp AFGR64:$fs, AFGR64:$ft, imm:$cc), (implicit FCR31)]>, Requires<[In32BitMode]>; @@ -302,24 +260,17 @@ } // The values to be selected are fp but the condition test is with integers. -def Select_CC_SO32 : PseudoSelCC, - Requires<[IsSingleFloat]>; -def Select_CC_AS32 : PseudoSelCC, - Requires<[In32BitMode]>; -def Select_CC_D32 : PseudoSelCC, - Requires<[In32BitMode]>; +def Select_CC_S32 : PseudoSelCC; +def Select_CC_D32 : PseudoSelCC, + Requires<[In32BitMode]>; // The values to be selected are int but the condition test is done with fp. -def Select_FCC : PseudoFPSelCC; +def Select_FCC : PseudoFPSelCC; // The values to be selected and the condition test is done with fp. -def Select_FCC_SO32 : PseudoFPSelCC, - Requires<[IsSingleFloat]>; -def Select_FCC_AS32 : PseudoFPSelCC, - Requires<[In32BitMode]>; -def Select_FCC_D32 : PseudoFPSelCC, - Requires<[In32BitMode]>; - +def Select_FCC_S32 : PseudoFPSelCC; +def Select_FCC_D32 : PseudoFPSelCC, + Requires<[In32BitMode]>; //===----------------------------------------------------------------------===// // Floating Point Patterns @@ -328,19 +279,12 @@ return N->isExactlyValue(+0.0); }]>; -def : Pat<(f32 fpimm0), (MTC1 ZERO)>, Requires<[IsSingleFloat]>; -def : Pat<(f32 fpimm0), (MTC1A ZERO)>, Requires<[In32BitMode]>; +def : Pat<(f32 fpimm0), (MTC1 ZERO)>; def : Pat<(f32 (sint_to_fp CPURegs:$src)), (CVTS_W32 (MTC1 CPURegs:$src))>; def : Pat<(f64 (sint_to_fp CPURegs:$src)), (CVTD_W32 (MTC1 CPURegs:$src))>; -def : Pat<(i32 (fp_to_sint FGR32:$src)), (MFC1 (TRUNC_W_SO32 FGR32:$src))>; -def : Pat<(i32 (fp_to_sint AFGR32:$src)), (MFC1A (TRUNC_W_AS32 AFGR32:$src))>; +def : Pat<(i32 (fp_to_sint FGR32:$src)), (MFC1 (TRUNC_W_S32 FGR32:$src))>; def : Pat<(i32 (bitconvert FGR32:$src)), (MFC1 FGR32:$src)>; -def : Pat<(i32 (bitconvert AFGR32:$src)), (MFC1A AFGR32:$src)>; - -def : Pat<(f32 (bitconvert CPURegs:$src)), (MTC1 CPURegs:$src)>, - Requires<[IsSingleFloat]>; -def : Pat<(f32 (bitconvert CPURegs:$src)), (MTC1A CPURegs:$src)>, - Requires<[In32BitMode]>; +def : Pat<(f32 (bitconvert CPURegs:$src)), (MTC1 CPURegs:$src)>; Modified: llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp?rev=67422&r1=67421&r2=67422&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp (original) +++ llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp Fri Mar 20 19:05:07 2009 @@ -35,8 +35,8 @@ { SrcSubIdx = DstSubIdx = 0; // No sub-registers. - // addu $dst, $src, $zero || addu $dst, $zero, $src - // or $dst, $src, $zero || or $dst, $zero, $src + // addu $dst, $src, $zero || addu $dst, $zero, $src + // or $dst, $src, $zero || or $dst, $zero, $src if ((MI.getOpcode() == Mips::ADDu) || (MI.getOpcode() == Mips::OR)) { if (MI.getOperand(1).getReg() == Mips::ZERO) { DstReg = MI.getOperand(0).getReg(); @@ -52,16 +52,16 @@ // mov $fpDst, $fpSrc // mfc $gpDst, $fpSrc // mtc $fpDst, $gpSrc - if (MI.getOpcode() == Mips::FMOV_SO32 || MI.getOpcode() == Mips::FMOV_AS32 || - MI.getOpcode() == Mips::FMOV_D32 || MI.getOpcode() == Mips::MFC1A || - MI.getOpcode() == Mips::MFC1 || MI.getOpcode() == Mips::MTC1A || + if (MI.getOpcode() == Mips::FMOV_S32 || + MI.getOpcode() == Mips::FMOV_D32 || + MI.getOpcode() == Mips::MFC1 || MI.getOpcode() == Mips::MTC1 ) { DstReg = MI.getOperand(0).getReg(); SrcReg = MI.getOperand(1).getReg(); return true; } - // addiu $dst, $src, 0 + // addiu $dst, $src, 0 if (MI.getOpcode() == Mips::ADDiu) { if ((MI.getOperand(1).isReg()) && (isZeroImm(MI.getOperand(2)))) { DstReg = MI.getOperand(0).getReg(); @@ -81,7 +81,7 @@ isLoadFromStackSlot(const MachineInstr *MI, int &FrameIndex) const { if ((MI->getOpcode() == Mips::LW) || (MI->getOpcode() == Mips::LWC1) || - (MI->getOpcode() == Mips::LWC1A) || (MI->getOpcode() == Mips::LDC1)) { + (MI->getOpcode() == Mips::LDC1)) { if ((MI->getOperand(2).isFI()) && // is a stack slot (MI->getOperand(1).isImm()) && // the imm is zero (isZeroImm(MI->getOperand(1)))) { @@ -102,7 +102,7 @@ isStoreToStackSlot(const MachineInstr *MI, int &FrameIndex) const { if ((MI->getOpcode() == Mips::SW) || (MI->getOpcode() == Mips::SWC1) || - (MI->getOpcode() == Mips::SWC1A) || (MI->getOpcode() == Mips::SDC1)) { + (MI->getOpcode() == Mips::SDC1)) { if ((MI->getOperand(2).isFI()) && // is a stack slot (MI->getOperand(1).isImm()) && // the imm is zero (isZeroImm(MI->getOperand(1)))) { @@ -132,27 +132,23 @@ if (I != MBB.end()) DL = I->getDebugLoc(); if (DestRC != SrcRC) { + // Moves between coprocessors and cpu if ((DestRC == Mips::CPURegsRegisterClass) && (SrcRC == Mips::FGR32RegisterClass)) BuildMI(MBB, I, DL, get(Mips::MFC1), DestReg).addReg(SrcReg); - else if ((DestRC == Mips::CPURegsRegisterClass) && - (SrcRC == Mips::AFGR32RegisterClass)) - BuildMI(MBB, I, DL, get(Mips::MFC1A), DestReg).addReg(SrcReg); else if ((DestRC == Mips::FGR32RegisterClass) && (SrcRC == Mips::CPURegsRegisterClass)) BuildMI(MBB, I, DL, get(Mips::MTC1), DestReg).addReg(SrcReg); - else if ((DestRC == Mips::AFGR32RegisterClass) && - (SrcRC == Mips::CPURegsRegisterClass)) - BuildMI(MBB, I, DL, get(Mips::MTC1A), DestReg).addReg(SrcReg); - else if ((DestRC == Mips::AFGR32RegisterClass) && - (SrcRC == Mips::CPURegsRegisterClass)) - BuildMI(MBB, I, DL, get(Mips::MTC1A), DestReg).addReg(SrcReg); + + // Condition registers else if ((SrcRC == Mips::CCRRegisterClass) && (SrcReg == Mips::FCR31)) return true; // This register is used implicitly, no copy needed. else if ((DestRC == Mips::CCRRegisterClass) && (DestReg == Mips::FCR31)) return true; // This register is used implicitly, no copy needed. + + // Move from/to Hi/Lo registers else if ((DestRC == Mips::HILORegisterClass) && (SrcRC == Mips::CPURegsRegisterClass)) { unsigned Opc = (DestReg == Mips::HI) ? Mips::MTHI : Mips::MTLO; @@ -161,9 +157,10 @@ (DestRC == Mips::CPURegsRegisterClass)) { unsigned Opc = (SrcReg == Mips::HI) ? Mips::MFHI : Mips::MFLO; BuildMI(MBB, I, DL, get(Opc), DestReg); + + // Can't copy this register } else - // DestRC != SrcRC, Can't copy this register - return false; + return false; return true; } @@ -172,9 +169,7 @@ BuildMI(MBB, I, DL, get(Mips::ADDu), DestReg).addReg(Mips::ZERO) .addReg(SrcReg); else if (DestRC == Mips::FGR32RegisterClass) - BuildMI(MBB, I, DL, get(Mips::FMOV_SO32), DestReg).addReg(SrcReg); - else if (DestRC == Mips::AFGR32RegisterClass) - BuildMI(MBB, I, DL, get(Mips::FMOV_AS32), DestReg).addReg(SrcReg); + BuildMI(MBB, I, DL, get(Mips::FMOV_S32), DestReg).addReg(SrcReg); else if (DestRC == Mips::AFGR64RegisterClass) BuildMI(MBB, I, DL, get(Mips::FMOV_D32), DestReg).addReg(SrcReg); else @@ -198,8 +193,6 @@ Opc = Mips::SW; else if (RC == Mips::FGR32RegisterClass) Opc = Mips::SWC1; - else if (RC == Mips::AFGR32RegisterClass) - Opc = Mips::SWC1A; else if (RC == Mips::AFGR64RegisterClass) Opc = Mips::SDC1; else @@ -218,8 +211,6 @@ Opc = Mips::SW; else if (RC == Mips::FGR32RegisterClass) Opc = Mips::SWC1; - else if (RC == Mips::AFGR32RegisterClass) - Opc = Mips::SWC1A; else if (RC == Mips::AFGR64RegisterClass) Opc = Mips::SDC1; else @@ -244,8 +235,6 @@ Opc = Mips::LW; else if (RC == Mips::FGR32RegisterClass) Opc = Mips::LWC1; - else if (RC == Mips::AFGR32RegisterClass) - Opc = Mips::LWC1A; else if (RC == Mips::AFGR64RegisterClass) Opc = Mips::LDC1; else @@ -265,8 +254,6 @@ Opc = Mips::LW; else if (RC == Mips::FGR32RegisterClass) Opc = Mips::LWC1; - else if (RC == Mips::AFGR32RegisterClass) - Opc = Mips::LWC1A; else if (RC == Mips::AFGR64RegisterClass) Opc = Mips::LDC1; else @@ -310,8 +297,7 @@ } } break; - case Mips::FMOV_SO32: - case Mips::FMOV_AS32: + case Mips::FMOV_S32: case Mips::FMOV_D32: if ((MI->getOperand(0).isReg()) && (MI->getOperand(1).isReg())) { @@ -321,8 +307,6 @@ if (RC == Mips::FGR32RegisterClass) { LoadOpc = Mips::LWC1; StoreOpc = Mips::SWC1; - } else if (RC == Mips::AFGR32RegisterClass) { - LoadOpc = Mips::LWC1A; StoreOpc = Mips::SWC1A; } else if (RC == Mips::AFGR64RegisterClass) { LoadOpc = Mips::LDC1; StoreOpc = Mips::SDC1; } else Modified: llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp?rev=67422&r1=67421&r2=67422&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp Fri Mar 20 19:05:07 2009 @@ -133,8 +133,8 @@ &Mips::CPURegsRegClass, &Mips::CPURegsRegClass, &Mips::CPURegsRegClass, &Mips::CPURegsRegClass, &Mips::CPURegsRegClass, &Mips::CPURegsRegClass, &Mips::CPURegsRegClass, &Mips::CPURegsRegClass, - &Mips::AFGR32RegClass, &Mips::AFGR32RegClass, &Mips::AFGR32RegClass, - &Mips::AFGR32RegClass, &Mips::AFGR32RegClass, &Mips::AFGR32RegClass, + &Mips::FGR32RegClass, &Mips::FGR32RegClass, &Mips::FGR32RegClass, + &Mips::FGR32RegClass, &Mips::FGR32RegClass, &Mips::FGR32RegClass, &Mips::AFGR64RegClass, &Mips::AFGR64RegClass, &Mips::AFGR64RegClass, &Mips::AFGR64RegClass, &Mips::AFGR64RegClass, &Mips::AFGR64RegClass, 0 }; @@ -157,6 +157,12 @@ Reserved.set(Mips::SP); Reserved.set(Mips::FP); Reserved.set(Mips::RA); + + // SRV4 requires that odd register can't be used. + if (!Subtarget.isSingleFloat()) + for (unsigned FReg=(Mips::F0)+1; FReg < Mips::F30; FReg+=2) + Reserved.set(FReg); + return Reserved; } Modified: llvm/trunk/lib/Target/Mips/MipsRegisterInfo.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsRegisterInfo.td?rev=67422&r1=67421&r2=67422&view=diff ============================================================================== --- llvm/trunk/lib/Target/Mips/MipsRegisterInfo.td (original) +++ llvm/trunk/lib/Target/Mips/MipsRegisterInfo.td Fri Mar 20 19:05:07 2009 @@ -160,13 +160,13 @@ }]; } -// * 64bit fp: -// - FGR64 = 32 64-bit registers (default mode) -// - AFGR32/AFGR64 = 16 even 32-bit registers (32-bit compatible mode) for -// single and double access. -// * 32bit fp: -// - AFGR32/AFGR64 = 16 even 32-bit registers - single and double -// - FGR32 = 32 32-bit registers (within single-only mode) +// 64bit fp: +// * FGR64 - 32 64-bit registers +// * AFGR64 - 16 32-bit even registers (32-bit FP Mode) +// +// 32bit fp: +// * FGR32 - 16 32-bit even registers +// * FGR32 - 32 32-bit registers (single float only mode) def FGR32 : RegisterClass<"Mips", [f32], 32, // Return Values and Arguments [F0, F1, F2, F3, F12, F13, F14, F15, @@ -178,35 +178,46 @@ F31]> { let MethodProtos = [{ + iterator allocation_order_begin(const MachineFunction &MF) const; iterator allocation_order_end(const MachineFunction &MF) const; }]; let MethodBodies = [{ + + static const unsigned MIPS_FGR32[] = { + Mips::F0, Mips::F1, Mips::F2, Mips::F3, Mips::F12, Mips::F13, + Mips::F14, Mips::F15, Mips::F4, Mips::F5, Mips::F6, Mips::F7, + Mips::F8, Mips::F9, Mips::F10, Mips::F11, Mips::F16, Mips::F17, + Mips::F18, Mips::F19, Mips::F20, Mips::F21, Mips::F22, Mips::F23, + Mips::F24, Mips::F25, Mips::F26, Mips::F27, Mips::F28, Mips::F29, + Mips::F30 + }; + + static const unsigned MIPS_SVR4_FGR32[] = { + Mips::F0, Mips::F2, Mips::F12, Mips::F14, Mips::F4, + Mips::F6, Mips::F8, Mips::F10, Mips::F16, Mips::F18, + Mips::F20, Mips::F22, Mips::F24, Mips::F26, Mips::F28, Mips::F30, + }; + FGR32Class::iterator - FGR32Class::allocation_order_end(const MachineFunction &MF) const { - // The last register on the list above is reserved - return end()-1; + FGR32Class::allocation_order_begin(const MachineFunction &MF) const { + const TargetMachine &TM = MF.getTarget(); + const MipsSubtarget &Subtarget = TM.getSubtarget(); + + if (Subtarget.isSingleFloat()) + return MIPS_FGR32; + else + return MIPS_SVR4_FGR32; } - }]; -} -def AFGR32 : RegisterClass<"Mips", [f32], 32, - // Return Values and Arguments - [F0, F2, F12, F14, - // Not preserved across procedure calls - F4, F6, F8, F10, F16, F18, - // Callee save - F20, F22, F24, F26, F28, F30, - // Reserved - F31]> -{ - let MethodProtos = [{ - iterator allocation_order_end(const MachineFunction &MF) const; - }]; - let MethodBodies = [{ - AFGR32Class::iterator - AFGR32Class::allocation_order_end(const MachineFunction &MF) const { - // The last register on the list above is reserved - return end()-1; + FGR32Class::iterator + FGR32Class::allocation_order_end(const MachineFunction &MF) const { + const TargetMachine &TM = MF.getTarget(); + const MipsSubtarget &Subtarget = TM.getSubtarget(); + + if (Subtarget.isSingleFloat()) + return MIPS_FGR32 + (sizeof(MIPS_FGR32) / sizeof(unsigned)); + else + return MIPS_SVR4_FGR32 + (sizeof(MIPS_SVR4_FGR32) / sizeof(unsigned)); } }]; } From kremenek at apple.com Fri Mar 20 22:13:21 2009 From: kremenek at apple.com (Ted Kremenek) Date: Sat, 21 Mar 2009 03:13:21 -0000 Subject: [llvm-commits] [llvm] r67426 - /llvm/tags/checker/checker-0.178/ Message-ID: <200903210313.n2L3DMDj020090@zion.cs.uiuc.edu> Author: kremenek Date: Fri Mar 20 22:13:15 2009 New Revision: 67426 URL: http://llvm.org/viewvc/llvm-project?rev=67426&view=rev Log: Tagging checker-0.178. Added: llvm/tags/checker/checker-0.178/ - copied from r67425, llvm/trunk/ From sabre at nondot.org Sat Mar 21 00:40:09 2009 From: sabre at nondot.org (Chris Lattner) Date: Sat, 21 Mar 2009 05:40:09 -0000 Subject: [llvm-commits] [llvm] r67428 - in /llvm/trunk/include/llvm/ADT: DepthFirstIterator.h SparseBitVector.h Message-ID: <200903210540.n2L5eAfD028355@zion.cs.uiuc.edu> Author: lattner Date: Sat Mar 21 00:40:09 2009 New Revision: 67428 URL: http://llvm.org/viewvc/llvm-project?rev=67428&view=rev Log: add some inline methods for infix operators on sparse vectors, tidy some df iteration stuff, patch by John Mosby! Modified: llvm/trunk/include/llvm/ADT/DepthFirstIterator.h llvm/trunk/include/llvm/ADT/SparseBitVector.h Modified: llvm/trunk/include/llvm/ADT/DepthFirstIterator.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/DepthFirstIterator.h?rev=67428&r1=67427&r2=67428&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/DepthFirstIterator.h (original) +++ llvm/trunk/include/llvm/ADT/DepthFirstIterator.h Sat Mar 21 00:40:09 2009 @@ -200,14 +200,12 @@ template idf_iterator idf_begin(const T& G) { - Inverse DummyG; - return idf_iterator::begin(DummyG); + return idf_iterator::begin(Inverse(G)); } template idf_iterator idf_end(const T& G){ - Inverse DummyG; - return idf_iterator::end(DummyG); + return idf_iterator::end(Inverse(G)); } // Provide global definitions of external inverse depth first iterators... @@ -221,14 +219,12 @@ template idf_ext_iterator idf_ext_begin(const T& G, SetTy &S) { - Inverse DummyG(G); - return idf_ext_iterator::begin(DummyG, S); + return idf_ext_iterator::begin(Inverse(G), S); } template idf_ext_iterator idf_ext_end(const T& G, SetTy &S) { - Inverse DummyG(G); - return idf_ext_iterator::end(DummyG, S); + return idf_ext_iterator::end(Inverse(G), S); } } // End llvm namespace Modified: llvm/trunk/include/llvm/ADT/SparseBitVector.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SparseBitVector.h?rev=67428&r1=67427&r2=67428&view=diff ============================================================================== --- llvm/trunk/include/llvm/ADT/SparseBitVector.h (original) +++ llvm/trunk/include/llvm/ADT/SparseBitVector.h Sat Mar 21 00:40:09 2009 @@ -460,6 +460,11 @@ CurrElementIter = Elements.begin (); } + // Clear. + void clear() { + Elements.clear(); + } + // Assignment SparseBitVector& operator=(const SparseBitVector& RHS) { Elements.clear(); @@ -836,7 +841,36 @@ template inline bool operator &=(SparseBitVector &LHS, const SparseBitVector *RHS) { - return LHS &= (*RHS); + return LHS &= *RHS; +} + +// Convenience functions for infix union, intersection, difference operators. + +template +inline SparseBitVector +operator|(const SparseBitVector &LHS, + const SparseBitVector &RHS) { + SparseBitVector Result(LHS); + Result |= RHS; + return Result; +} + +template +inline SparseBitVector +operator&(const SparseBitVector &LHS, + const SparseBitVector &RHS) { + SparseBitVector Result(LHS); + Result &= RHS; + return Result; +} + +template +inline SparseBitVector +operator-(const SparseBitVector &LHS, + const SparseBitVector &RHS) { + SparseBitVector Result; + Result.intersectWithComplement(LHS, RHS); + return Result; } @@ -849,10 +883,8 @@ for (bi = LHS.begin(); bi != LHS.end(); ++bi) { out << *bi << " "; } - out << " ]\n"; -} + out << " ]\n"; } - - +} // end namespace llvm #endif From sabre at nondot.org Sat Mar 21 01:55:54 2009 From: sabre at nondot.org (Chris Lattner) Date: Sat, 21 Mar 2009 06:55:54 -0000 Subject: [llvm-commits] [llvm] r67435 - /llvm/trunk/lib/VMCore/Constants.cpp Message-ID: <200903210655.n2L6tsBI032664@zion.cs.uiuc.edu> Author: lattner Date: Sat Mar 21 01:55:54 2009 New Revision: 67435 URL: http://llvm.org/viewvc/llvm-project?rev=67435&view=rev Log: add a fastpath to ConstantExpr::getBitCast to handle the case when an obviously unneeded bitcast is requested. This is common for frontends who just unconditionally cast even if the target is often the right type already. THis prevents going into getFoldedCast which switches on the opcode and does a bunch of other stuff before doing the same opzn. Modified: llvm/trunk/lib/VMCore/Constants.cpp Modified: llvm/trunk/lib/VMCore/Constants.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Constants.cpp?rev=67435&r1=67434&r2=67435&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Constants.cpp (original) +++ llvm/trunk/lib/VMCore/Constants.cpp Sat Mar 21 01:55:54 2009 @@ -1996,6 +1996,11 @@ unsigned DstBitSize = DstTy->getPrimitiveSizeInBits(); #endif assert(SrcBitSize == DstBitSize && "BitCast requires types of same width"); + + // It is common to ask for a bitcast of a value to its own type, handle this + // speedily. + if (C->getType() == DstTy) return C; + return getFoldedCast(Instruction::BitCast, C, DstTy); } From asl at math.spbu.ru Sat Mar 21 04:10:02 2009 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Sat, 21 Mar 2009 04:10:02 -0500 Subject: [llvm-commits] CVS: llvm-www/OpenProjects.html Message-ID: <200903210910.n2L9A2Ip019341@zion.cs.uiuc.edu> Changes in directory llvm-www: OpenProjects.html updated: 1.48 -> 1.49 --- Log message: Add more crazy ideas about runtime checks... --- Diffs of the changes: (+6 -1) OpenProjects.html | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletion(-) Index: llvm-www/OpenProjects.html diff -u llvm-www/OpenProjects.html:1.48 llvm-www/OpenProjects.html:1.49 --- llvm-www/OpenProjects.html:1.48 Fri Mar 20 00:49:37 2009 +++ llvm-www/OpenProjects.html Sat Mar 21 04:05:46 2009 @@ -487,6 +487,11 @@
    4. Port Valgrind to use LLVM codegeneration and optimization passes instead of its own.
    5. +
    6. Create an LLVM pass that adds memory safety checks to code, like + Valgrind does for binaries, or like + mudflap does + for gcc compiled code. +
    @@ -501,7 +506,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"> LLVM Compiler Infrastructure
    - Last modified: $Date: 2009/03/20 05:49:37 $ + Last modified: $Date: 2009/03/21 09:05:46 $ From evan.cheng at apple.com Sat Mar 21 13:12:25 2009 From: evan.cheng at apple.com (Evan Cheng) Date: Sat, 21 Mar 2009 18:12:25 -0000 Subject: [llvm-commits] [llvm] r67451 - in /llvm/trunk/test: BugPoint/misopt-basictest.ll BugPoint/remove_arguments_test.ll Makefile lib/llvm.exp Message-ID: <200903211812.n2LICPbp018523@zion.cs.uiuc.edu> Author: evancheng Date: Sat Mar 21 13:12:24 2009 New Revision: 67451 URL: http://llvm.org/viewvc/llvm-project?rev=67451&view=rev Log: Re-commit r67334 and r67349 with fix. Modified: llvm/trunk/test/BugPoint/misopt-basictest.ll llvm/trunk/test/BugPoint/remove_arguments_test.ll llvm/trunk/test/Makefile llvm/trunk/test/lib/llvm.exp Modified: llvm/trunk/test/BugPoint/misopt-basictest.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/misopt-basictest.ll?rev=67451&r1=67450&r2=67451&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/misopt-basictest.ll (original) +++ llvm/trunk/test/BugPoint/misopt-basictest.ll Sat Mar 21 13:12:24 2009 @@ -1,4 +1,4 @@ -; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes +; RUN: bugpoint %s -dce -bugpoint-deletecalls -simplifycfg -silence-passes %bugpoint_topts @.LC0 = internal global [13 x i8] c"Hello World\0A\00" ; <[13 x i8]*> [#uses=1] Modified: llvm/trunk/test/BugPoint/remove_arguments_test.ll URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/BugPoint/remove_arguments_test.ll?rev=67451&r1=67450&r2=67451&view=diff ============================================================================== --- llvm/trunk/test/BugPoint/remove_arguments_test.ll (original) +++ llvm/trunk/test/BugPoint/remove_arguments_test.ll Sat Mar 21 13:12:24 2009 @@ -1,4 +1,4 @@ -; RUN: bugpoint %s -bugpoint-crashcalls -silence-passes +; RUN: bugpoint %s -bugpoint-crashcalls -silence-passes ; Test to make sure that arguments are removed from the function if they are ; unnecessary. Modified: llvm/trunk/test/Makefile URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Makefile?rev=67451&r1=67450&r2=67451&view=diff ============================================================================== --- llvm/trunk/test/Makefile (original) +++ llvm/trunk/test/Makefile Sat Mar 21 13:12:24 2009 @@ -87,6 +87,11 @@ else DSYMUTIL=true endif +ifdef TargetCommonOpts +BUGPOINT_TOPTS="-gcc-tool-args $(TargetCommonOpts)" +else +BUGPOINT_TOPTS="" +endif FORCE: @@ -108,12 +113,13 @@ @echo 'set objdir "$(LLVM_OBJ_ROOT)/test"' >>site.tmp @echo 'set gccpath "$(CC)"' >>site.tmp @echo 'set gxxpath "$(CXX)"' >>site.tmp - @echo 'set compile_c "' $(CC) $(CPP.Flags) $(CompileCommonOpts) -c '"' >>site.tmp - @echo 'set compile_cxx "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) -c '"' >> site.tmp - @echo 'set link "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) $(LD.Flags) '"' >>site.tmp - @echo 'set llvmgcc "$(LLVMGCC) $(EXTRA_OPTIONS)"' >> site.tmp - @echo 'set llvmgxx "$(LLVMGCC) $(EXTRA_OPTIONS)"' >> site.tmp + @echo 'set compile_c "' $(CC) $(CPP.Flags) $(TargetCommonOpts) $(CompileCommonOpts) -c '"' >>site.tmp + @echo 'set compile_cxx "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) $(CompileCommonOpts) -c '"' >> site.tmp + @echo 'set link "' $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) '"' >>site.tmp + @echo 'set llvmgcc "$(LLVMGCC) $(TargetCommonOpts) $(EXTRA_OPTIONS)"' >> site.tmp + @echo 'set llvmgxx "$(LLVMGCC) $(TargetCommonOpts) $(EXTRA_OPTIONS)"' >> site.tmp @echo 'set llvmgccmajvers "$(LLVMGCC_MAJVERS)"' >> site.tmp + @echo 'set bugpoint_topts $(BUGPOINT_TOPTS)' >> site.tmp @echo 'set shlibext "$(SHLIBEXT)"' >> site.tmp @echo 'set ocamlc "$(OCAMLC) -cc $(CXX) -I $(LibDir)/ocaml"' >> site.tmp @echo 'set valgrind "$(VALGRIND)"' >> site.tmp Modified: llvm/trunk/test/lib/llvm.exp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lib/llvm.exp?rev=67451&r1=67450&r2=67451&view=diff ============================================================================== --- llvm/trunk/test/lib/llvm.exp (original) +++ llvm/trunk/test/lib/llvm.exp Sat Mar 21 13:12:24 2009 @@ -48,8 +48,8 @@ proc substitute { line test tmpFile } { global srcroot objroot srcdir objdir subdir target_triplet prcontext global llvmgcc llvmgxx llvmgcc_version llvmgccmajvers ocamlc - global gccpath gxxpath compile_c compile_cxx link shlibext llvmlibsdir llvmdsymutil - global valgrind grep gas + global gccpath gxxpath compile_c compile_cxx link shlibext llvmlibsdir + global llvmdsymutil valgrind grep gas bugpoint_topts set path [file join $srcdir $subdir] # Substitute all Tcl variables. @@ -77,6 +77,8 @@ regsub -all {%llvmdsymutil} $new_line "$llvmdsymutil" new_line #replace %llvmlibsdir with configure library directory regsub -all {%llvmlibsdir} $new_line "$llvmlibsdir" new_line + #replace %bugpoint_topts with actual bugpoint target options + regsub -all {%bugpoint_topts} $new_line "$bugpoint_topts" new_line #replace %p with path to source, regsub -all {%p} $new_line [file join $srcdir $subdir] new_line #replace %s with filename From baldrick at free.fr Sat Mar 21 16:27:31 2009 From: baldrick at free.fr (Duncan Sands) Date: Sat, 21 Mar 2009 21:27:31 -0000 Subject: [llvm-commits] [llvm] r67454 - in /llvm/trunk: include/llvm/GlobalVariable.h lib/Transforms/Scalar/InstructionCombining.cpp lib/Transforms/Scalar/SCCP.cpp lib/Transforms/Utils/CloneFunction.cpp Message-ID: <200903212127.n2LLRWm7029895@zion.cs.uiuc.edu> Author: baldrick Date: Sat Mar 21 16:27:31 2009 New Revision: 67454 URL: http://llvm.org/viewvc/llvm-project?rev=67454&view=rev Log: Factorize out a concept - no functionality change. Modified: llvm/trunk/include/llvm/GlobalVariable.h llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp llvm/trunk/lib/Transforms/Scalar/SCCP.cpp llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp Modified: llvm/trunk/include/llvm/GlobalVariable.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/GlobalVariable.h?rev=67454&r1=67453&r2=67454&view=diff ============================================================================== --- llvm/trunk/include/llvm/GlobalVariable.h (original) +++ llvm/trunk/include/llvm/GlobalVariable.h Sat Mar 21 16:27:31 2009 @@ -78,6 +78,15 @@ /// inline bool hasInitializer() const { return !isDeclaration(); } + /// hasDefinitiveInitializer - Whether the global variable has an initializer, + /// and this is the initializer that will be used in the final executable. + inline bool hasDefinitiveInitializer() const { + return hasInitializer() && + // The initializer of a global variable with weak linkage may change at + // link time. + !mayBeOverridden(); + } + /// getInitializer - Return the initializer for this global variable. It is /// illegal to call this method if the global is external, because we cannot /// tell what the value is initialized to! Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=67454&r1=67453&r2=67454&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Sat Mar 21 16:27:31 2009 @@ -11227,15 +11227,14 @@ // Instcombine load (constant global) into the value loaded. if (GlobalVariable *GV = dyn_cast(Op)) - if (GV->isConstant() && !GV->isDeclaration() && !GV->mayBeOverridden()) + if (GV->isConstant() && GV->hasDefinitiveInitializer()) return ReplaceInstUsesWith(LI, GV->getInitializer()); // Instcombine load (constantexpr_GEP global, 0, ...) into the value loaded. if (ConstantExpr *CE = dyn_cast(Op)) { if (CE->getOpcode() == Instruction::GetElementPtr) { if (GlobalVariable *GV = dyn_cast(CE->getOperand(0))) - if (GV->isConstant() && !GV->isDeclaration() && - !GV->mayBeOverridden()) + if (GV->isConstant() && GV->hasDefinitiveInitializer()) if (Constant *V = ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE)) return ReplaceInstUsesWith(LI, V); @@ -11259,7 +11258,7 @@ // If this load comes from anywhere in a constant global, and if the global // is all undef or zero, we know what it loads. if (GlobalVariable *GV = dyn_cast(Op->getUnderlyingObject())){ - if (GV->isConstant() && GV->hasInitializer() && !GV->mayBeOverridden()) { + if (GV->isConstant() && GV->hasDefinitiveInitializer()) { if (GV->getInitializer()->isNullValue()) return ReplaceInstUsesWith(LI, Constant::getNullValue(LI.getType())); else if (isa(GV->getInitializer())) Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=67454&r1=67453&r2=67454&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Sat Mar 21 16:27:31 2009 @@ -1131,7 +1131,7 @@ // Transform load (constant global) into the value loaded. if (GlobalVariable *GV = dyn_cast(Ptr)) { if (GV->isConstant()) { - if (!GV->isDeclaration() && !GV->mayBeOverridden()) { + if (GV->hasDefinitiveInitializer()) { markConstant(IV, &I, GV->getInitializer()); return; } @@ -1150,7 +1150,7 @@ if (ConstantExpr *CE = dyn_cast(Ptr)) if (CE->getOpcode() == Instruction::GetElementPtr) if (GlobalVariable *GV = dyn_cast(CE->getOperand(0))) - if (GV->isConstant() && !GV->isDeclaration() && !GV->mayBeOverridden()) + if (GV->isConstant() && GV->hasDefinitiveInitializer()) if (Constant *V = ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE)) { markConstant(IV, &I, V); Modified: llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp?rev=67454&r1=67453&r2=67454&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp Sat Mar 21 16:27:31 2009 @@ -335,8 +335,7 @@ if (ConstantExpr *CE = dyn_cast(Ops[0])) if (!LI->isVolatile() && CE->getOpcode() == Instruction::GetElementPtr) if (GlobalVariable *GV = dyn_cast(CE->getOperand(0))) - if (GV->isConstant() && !GV->isDeclaration() && - !GV->mayBeOverridden()) + if (GV->isConstant() && GV->hasDefinitiveInitializer()) return ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE); From baldrick at free.fr Sat Mar 21 16:27:44 2009 From: baldrick at free.fr (Duncan Sands) Date: Sat, 21 Mar 2009 22:27:44 +0100 Subject: [llvm-commits] [llvm] r67407 - in /llvm/trunk: lib/Transforms/Scalar/InstructionCombining.cpp lib/Transforms/Scalar/SCCP.cpp lib/Transforms/Utils/CloneFunction.cpp test/Feature/weak_constant.ll test/FrontendC/weak_constant.c In-Reply-To: References: <200903202153.n2KLrUQW000756@zion.cs.uiuc.edu> Message-ID: <200903212227.47042.baldrick@free.fr> > Perhaps a helper in GlobalVariable would be appropriate for this predicate? Good idea - done in commit 67454. Ciao, Duncan. From sabre at nondot.org Sat Mar 21 19:18:20 2009 From: sabre at nondot.org (Chris Lattner) Date: Sun, 22 Mar 2009 00:18:20 -0000 Subject: [llvm-commits] [llvm] r67458 - /llvm/trunk/include/llvm/Support/IRBuilder.h Message-ID: <200903220018.n2M0IKhW006836@zion.cs.uiuc.edu> Author: lattner Date: Sat Mar 21 19:18:18 2009 New Revision: 67458 URL: http://llvm.org/viewvc/llvm-project?rev=67458&view=rev Log: add method to access a template argument. Modified: llvm/trunk/include/llvm/Support/IRBuilder.h Modified: llvm/trunk/include/llvm/Support/IRBuilder.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/IRBuilder.h?rev=67458&r1=67457&r2=67458&view=diff ============================================================================== --- llvm/trunk/include/llvm/Support/IRBuilder.h (original) +++ llvm/trunk/include/llvm/Support/IRBuilder.h Sat Mar 21 19:18:18 2009 @@ -51,6 +51,10 @@ /// getFolder - Get the constant folder being used. const T& getFolder() { return Folder; } + /// isNamePreserving - Return true if this builder is configured to actually + /// add the requested names to IR created through it. + bool isNamePreserving() const { return preserveNames; } + //===--------------------------------------------------------------------===// // Builder configuration methods //===--------------------------------------------------------------------===// From kremenek at apple.com Sun Mar 22 01:45:12 2009 From: kremenek at apple.com (Ted Kremenek) Date: Sun, 22 Mar 2009 06:45:12 -0000 Subject: [llvm-commits] [llvm] r67463 - /llvm/tags/checker/checker-0.178/ Message-ID: <200903220645.n2M6jC3j030399@zion.cs.uiuc.edu> Author: kremenek Date: Sun Mar 22 01:45:12 2009 New Revision: 67463 URL: http://llvm.org/viewvc/llvm-project?rev=67463&view=rev Log: Removing checker-0.178. Removed: llvm/tags/checker/checker-0.178/ From kremenek at apple.com Sun Mar 22 01:46:04 2009 From: kremenek at apple.com (Ted Kremenek) Date: Sun, 22 Mar 2009 06:46:04 -0000 Subject: [llvm-commits] [llvm] r67465 - /llvm/tags/checker/checker-0.178/ Message-ID: <200903220646.n2M6k4sI030463@zion.cs.uiuc.edu> Author: kremenek Date: Sun Mar 22 01:46:04 2009 New Revision: 67465 URL: http://llvm.org/viewvc/llvm-project?rev=67465&view=rev Log: Tagging checker-0.178. Added: llvm/tags/checker/checker-0.178/ - copied from r67464, llvm/trunk/ From isanbard at gmail.com Sun Mar 22 03:28:16 2009 From: isanbard at gmail.com (Bill Wendling) Date: Sun, 22 Mar 2009 08:28:16 -0000 Subject: [llvm-commits] [llvm] r67467 - /llvm/branches/Apple/Dib/Makefile.rules Message-ID: <200903220828.n2M8SGq1010465@zion.cs.uiuc.edu> Author: void Date: Sun Mar 22 03:28:15 2009 New Revision: 67467 URL: http://llvm.org/viewvc/llvm-project?rev=67467&view=rev Log: A "dylib" should be built as a dylib and not a bundle. Modified: llvm/branches/Apple/Dib/Makefile.rules Modified: llvm/branches/Apple/Dib/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/Makefile.rules?rev=67467&r1=67466&r2=67467&view=diff ============================================================================== --- llvm/branches/Apple/Dib/Makefile.rules (original) +++ llvm/branches/Apple/Dib/Makefile.rules Sun Mar 22 03:28:15 2009 @@ -434,8 +434,8 @@ DARWIN_VERSION := $(shell echo $(DARWIN_VERSION)| sed -E 's/(10.[0-9]).*/\1/') # Get "4" out of 10.4 for later pieces in the makefile. DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/') - - SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -bundle \ + + SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -dylib \ -mmacosx-version-min=$(DARWIN_VERSION) CompileCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) else From isanbard at gmail.com Sun Mar 22 03:28:45 2009 From: isanbard at gmail.com (Bill Wendling) Date: Sun, 22 Mar 2009 08:28:45 -0000 Subject: [llvm-commits] [llvm] r67468 - /llvm/trunk/Makefile.rules Message-ID: <200903220828.n2M8Sjxs010566@zion.cs.uiuc.edu> Author: void Date: Sun Mar 22 03:28:45 2009 New Revision: 67468 URL: http://llvm.org/viewvc/llvm-project?rev=67468&view=rev Log: A dylib should be built as a dylib and not a bundle. Modified: llvm/trunk/Makefile.rules Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=67468&r1=67467&r2=67468&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Sun Mar 22 03:28:45 2009 @@ -434,8 +434,8 @@ DARWIN_VERSION := $(shell echo $(DARWIN_VERSION)| sed -E 's/(10.[0-9]).*/\1/') # Get "4" out of 10.4 for later pieces in the makefile. DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/') - - SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -bundle \ + + SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -dylib \ -mmacosx-version-min=$(DARWIN_VERSION) CompileCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) else From isanbard at gmail.com Sun Mar 22 03:56:28 2009 From: isanbard at gmail.com (Bill Wendling) Date: Sun, 22 Mar 2009 08:56:28 -0000 Subject: [llvm-commits] [llvm] r67469 - /llvm/trunk/Makefile.rules Message-ID: <200903220856.n2M8uVcE015702@zion.cs.uiuc.edu> Author: void Date: Sun Mar 22 03:56:15 2009 New Revision: 67469 URL: http://llvm.org/viewvc/llvm-project?rev=67469&view=rev Log: Really should pass -dylib to the linker... Modified: llvm/trunk/Makefile.rules Modified: llvm/trunk/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=67469&r1=67468&r2=67469&view=diff ============================================================================== --- llvm/trunk/Makefile.rules (original) +++ llvm/trunk/Makefile.rules Sun Mar 22 03:56:15 2009 @@ -435,7 +435,7 @@ # Get "4" out of 10.4 for later pieces in the makefile. DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/') - SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -dylib \ + SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -Wl,-dylib \ -mmacosx-version-min=$(DARWIN_VERSION) CompileCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) else From isanbard at gmail.com Sun Mar 22 03:57:06 2009 From: isanbard at gmail.com (Bill Wendling) Date: Sun, 22 Mar 2009 08:57:06 -0000 Subject: [llvm-commits] [llvm] r67470 - /llvm/branches/Apple/Dib/Makefile.rules Message-ID: <200903220857.n2M8v7pd015753@zion.cs.uiuc.edu> Author: void Date: Sun Mar 22 03:57:06 2009 New Revision: 67470 URL: http://llvm.org/viewvc/llvm-project?rev=67470&view=rev Log: Pass linker flags to the linker. Modified: llvm/branches/Apple/Dib/Makefile.rules Modified: llvm/branches/Apple/Dib/Makefile.rules URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Dib/Makefile.rules?rev=67470&r1=67469&r2=67470&view=diff ============================================================================== --- llvm/branches/Apple/Dib/Makefile.rules (original) +++ llvm/branches/Apple/Dib/Makefile.rules Sun Mar 22 03:57:06 2009 @@ -435,7 +435,7 @@ # Get "4" out of 10.4 for later pieces in the makefile. DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/') - SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -dylib \ + SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -Wl,-dylib \ -mmacosx-version-min=$(DARWIN_VERSION) CompileCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION) else From baldrick at free.fr Sun Mar 22 06:33:25 2009 From: baldrick at free.fr (Duncan Sands) Date: Sun, 22 Mar 2009 11:33:25 -0000 Subject: [llvm-commits] [llvm] r67471 - /llvm/trunk/docs/LangRef.html Message-ID: <200903221133.n2MBXUsP016225@zion.cs.uiuc.edu> Author: baldrick Date: Sun Mar 22 06:33:16 2009 New Revision: 67471 URL: http://llvm.org/viewvc/llvm-project?rev=67471&view=rev Log: Add some explanations of how apint loads and stores work. Modified: llvm/trunk/docs/LangRef.html Modified: llvm/trunk/docs/LangRef.html URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.html?rev=67471&r1=67470&r2=67471&view=diff ============================================================================== --- llvm/trunk/docs/LangRef.html (original) +++ llvm/trunk/docs/LangRef.html Sun Mar 22 06:33:16 2009 @@ -3486,7 +3486,13 @@ safe.

    Semantics:
    -

    The location of memory pointed to is loaded.

    +

    The location of memory pointed to is loaded. If the value being loaded +is of scalar type then the number of bytes read does not exceed the minimum +number of bytes needed to hold all bits of the type. For example, loading an +i24 reads at most three bytes. When loading a value of a type like +i20 with a size that is not an integral number of bytes, the result +is undefined if the value was not originally written using a store of the +same type.

    Examples:
      %ptr = alloca i32                               ; yields {i32*}:ptr
       
     
    Semantics:

    The contents of memory are updated to contain '<value>' -at the location specified by the '<pointer>' operand.

    +at the location specified by the '<pointer>' operand. +If '<value>' is of scalar type then the number of bytes +written does not exceed the minimum number of bytes needed to hold all +bits of the type. For example, storing an i24 writes at most +three bytes. When writing a value of a type like i20 with a +size that is not an integral number of bytes, it is unspecified what +happens to the extra bits that do not belong to the type, but they will +typically be overwritten.

    Example:
      %ptr = alloca i32                               ; yields {i32*}:ptr
       store i32 3, i32* %ptr                          ; yields {void}
    
    
    
    
    From sabre at nondot.org  Sun Mar 22 14:22:55 2009
    From: sabre at nondot.org (Chris Lattner)
    Date: Sun, 22 Mar 2009 19:22:55 -0000
    Subject: [llvm-commits] [llvm] r67473 -
    	/llvm/trunk/include/llvm/ADT/SmallVector.h
    Message-ID: <200903221922.n2MJMtdE006350@zion.cs.uiuc.edu>
    
    Author: lattner
    Date: Sun Mar 22 14:22:53 2009
    New Revision: 67473
    
    URL: http://llvm.org/viewvc/llvm-project?rev=67473&view=rev
    Log:
    Fix PR3860 by correcting a predicate.
    
    Modified:
        llvm/trunk/include/llvm/ADT/SmallVector.h
    
    Modified: llvm/trunk/include/llvm/ADT/SmallVector.h
    URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SmallVector.h?rev=67473&r1=67472&r2=67473&view=diff
    
    ==============================================================================
    --- llvm/trunk/include/llvm/ADT/SmallVector.h (original)
    +++ llvm/trunk/include/llvm/ADT/SmallVector.h Sun Mar 22 14:22:53 2009
    @@ -293,10 +293,11 @@
         // Uninvalidate the iterator.
         I = begin()+InsertElt;
     
    -    // If we already have this many elements in the collection, append the
    -    // dest elements at the end, then copy over the appropriate elements.  Since
    -    // we already reserved space, we know that this won't reallocate the vector.
    -    if (size() >= NumToInsert) {
    +    // If there are more elements between the insertion point and the end of the
    +    // range than there are being inserted, we can use a simple approach to
    +    // insertion.  Since we already reserved space, we know that this won't
    +    // reallocate the vector.
    +    if (size_t(end()-I) >= NumToInsert) {
           T *OldEnd = End;
           append(End-NumToInsert, End);
     
    @@ -341,10 +342,11 @@
         // Uninvalidate the iterator.
         I = begin()+InsertElt;
     
    -    // If we already have this many elements in the collection, append the
    -    // dest elements at the end, then copy over the appropriate elements.  Since
    -    // we already reserved space, we know that this won't reallocate the vector.
    -    if (size() >= NumToInsert) {
    +    // If there are more elements between the insertion point and the end of the
    +    // range than there are being inserted, we can use a simple approach to
    +    // insertion.  Since we already reserved space, we know that this won't
    +    // reallocate the vector.
    +    if (size_t(end()-I) >= NumToInsert) {
           T *OldEnd = End;
           append(End-NumToInsert, End);
     
    
    
    
    
    From evan.cheng at apple.com  Sun Mar 22 22:46:08 2009
    From: evan.cheng at apple.com (Evan Cheng)
    Date: Mon, 23 Mar 2009 03:46:08 -0000
    Subject: [llvm-commits] [llvm] r67500 - /llvm/trunk/Makefile.rules
    Message-ID: <200903230346.n2N3kAvZ030676@zion.cs.uiuc.edu>
    
    Author: evancheng
    Date: Sun Mar 22 22:45:56 2009
    New Revision: 67500
    
    URL: http://llvm.org/viewvc/llvm-project?rev=67500&view=rev
    Log:
    Missed this as part of r67451.
    
    Modified:
        llvm/trunk/Makefile.rules
    
    Modified: llvm/trunk/Makefile.rules
    URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=67500&r1=67499&r2=67500&view=diff
    
    ==============================================================================
    --- llvm/trunk/Makefile.rules (original)
    +++ llvm/trunk/Makefile.rules Sun Mar 22 22:45:56 2009
    @@ -437,7 +437,7 @@
     
       SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress -Wl,-dylib \
                         -mmacosx-version-min=$(DARWIN_VERSION)
    -  CompileCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION)
    +  TargetCommonOpts += -mmacosx-version-min=$(DARWIN_VERSION)
     else
       ifeq ($(OS),Cygwin)
         SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \
    @@ -536,10 +536,10 @@
     else
       ifeq ($(OS),Darwin)
         ifeq ($(ARCH),x86_64)
    -      CompileCommonOpts += -m64
    +      TargetCommonOpts = -m64
         else
           ifeq ($(ARCH),x86)
    -        CompileCommonOpts += -m32
    +        TargetCommonOpts = -m32
           endif
         endif
       endif
    @@ -560,33 +560,35 @@
     
     ifeq ($(BUILD_COMPONENT), 1)
       Compile.C     = $(BUILD_CC) $(CPP.Flags) $(C.Flags) $(C.Flags.NoRelink) \
    -                  $(CompileCommonOpts) -c
    +                  $(TargetCommonOpts) $(CompileCommonOpts) -c
       Compile.CXX   = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \
    -                  $(CompileCommonOpts) -c
    -  Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) \
    -                  $(CXX.Flags.NoRelink) -E
    +                  $(TargetCommonOpts) $(CompileCommonOpts) -c
    +  Preprocess.CXX= $(BUILD_CXX) $(CPP.Flags) $(TargetCommonOpts) \
    +                  $(CompileCommonOpts) $(CXX.Flags) $(CXX.Flags.NoRelink) -E
       Link          = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \
    -                  $(CompileCommonOpts) $(LD.Flags) $(Strip)
    -  Relink        = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \
    -		  $(Relink.Flags)
    +                  $(TargetCommonOpts) $(CompileCommonOpts) $(LD.Flags) $(Strip)
    +  Relink        = $(BUILD_CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) \
    +                  $(CompileCommonOpts) $(Relink.Flags)
     else
       Compile.C     = $(CC) $(CPP.Flags) $(C.Flags) $(C.Flags.NoRelink) \
    -                  $(CompileCommonOpts) -c
    +                  $(TargetCommonOpts) $(CompileCommonOpts) -c
       Compile.CXX   = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \
    -                  $(CompileCommonOpts) -c
    -  Preprocess.CXX= $(CXX) $(CPP.Flags) $(CompileCommonOpts) $(CXX.Flags) \
    -                  $(CXX.Flags.NoRelink) -E
    +                  $(TargetCommonOpts) $(CompileCommonOpts) -c
    +  Preprocess.CXX= $(CXX) $(CPP.Flags) $(TargetCommonOpts) \
    +                  $(CompileCommonOpts) $(CXX.Flags) $(CXX.Flags.NoRelink) -E
       Link          = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CXX.Flags.NoRelink) \
    -                  $(CompileCommonOpts) $(LD.Flags) $(Strip)
    -  Relink        = $(CXX) $(CPP.Flags) $(CXX.Flags) $(CompileCommonOpts) \
    -		  $(Relink.Flags)
    +                  $(TargetCommonOpts)  $(CompileCommonOpts) $(LD.Flags) $(Strip)
    +  Relink        = $(CXX) $(CPP.Flags) $(CXX.Flags) $(TargetCommonOpts) \
    +                  $(CompileCommonOpts) $(Relink.Flags)
     endif
     
    -BCCompile.C   = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts)
    -Preprocess.C  = $(CC) $(CPP.Flags) $(C.Flags) $(CompileCommonOpts) -E
    +BCCompile.C   = $(LLVMGCCWITHPATH) $(CPP.Flags) $(C.Flags) \
    +                $(TargetCommonOpts) $(CompileCommonOpts)
    +Preprocess.C  = $(CC) $(CPP.Flags) $(C.Flags) \
    +                $(TargetCommonOpts) $(CompileCommonOpts) -E
     
     BCCompile.CXX = $(LLVMGXXWITHPATH) $(CPP.Flags) $(CXX.Flags) \
    -                $(CompileCommonOpts)
    +                $(TargetCommonOpts) $(CompileCommonOpts)
     
     ProgInstall   = $(INSTALL) $(Install.StripFlag) -m 0755
     ScriptInstall = $(INSTALL) -m 0755
    
    
    
    
    From gohman at apple.com  Sun Mar 22 23:28:24 2009
    From: gohman at apple.com (Dan Gohman)
    Date: Mon, 23 Mar 2009 04:28:24 -0000
    Subject: [llvm-commits] [llvm] r67502 -
    	/llvm/trunk/lib/Target/X86/X86CallingConv.td
    Message-ID: <200903230428.n2N4SOp2000430@zion.cs.uiuc.edu>
    
    Author: djg
    Date: Sun Mar 22 23:28:24 2009
    New Revision: 67502
    
    URL: http://llvm.org/viewvc/llvm-project?rev=67502&view=rev
    Log:
    Add comments explaining why there's only one register for
    i8 return values.
    
    Modified:
        llvm/trunk/lib/Target/X86/X86CallingConv.td
    
    Modified: llvm/trunk/lib/Target/X86/X86CallingConv.td
    URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CallingConv.td?rev=67502&r1=67501&r2=67502&view=diff
    
    ==============================================================================
    --- llvm/trunk/lib/Target/X86/X86CallingConv.td (original)
    +++ llvm/trunk/lib/Target/X86/X86CallingConv.td Sun Mar 22 23:28:24 2009
    @@ -22,7 +22,12 @@
     
     // Return-value conventions common to all X86 CC's.
     def RetCC_X86Common : CallingConv<[
    -  // Scalar values are returned in AX first, then DX.
    +  // Scalar values are returned in AX first, then DX, except for i8 where
    +  // the convention is to return values in AL and AH. However, using AL and
    +  // is AH problematic -- a return of {i16,i8} would end up using AX and AH,
    +  // and one value would clobber the other. C front-ends are currently expected
    +  // to pack two i8 values into an i16 in the rare situations where this
    +  // is necessary.
       CCIfType<[i8] , CCAssignToReg<[AL]>>,
       CCIfType<[i16], CCAssignToReg<[AX, DX]>>,
       CCIfType<[i32], CCAssignToReg<[EAX, EDX]>>,
    
    
    
    
    From isanbard at gmail.com  Sun Mar 22 23:42:40 2009
    From: isanbard at gmail.com (Bill Wendling)
    Date: Sun, 22 Mar 2009 21:42:40 -0700
    Subject: [llvm-commits] [llvm] r67502 -
    	/llvm/trunk/lib/Target/X86/X86CallingConv.td
    In-Reply-To: <200903230428.n2N4SOp2000430@zion.cs.uiuc.edu>
    References: <200903230428.n2N4SOp2000430@zion.cs.uiuc.edu>
    Message-ID: <6BAA87BD-AC5B-49D4-8D39-FD6F4759B601@gmail.com>
    
    On Mar 22, 2009, at 9:28 PM, Dan Gohman wrote:
    
    > Author: djg
    > Date: Sun Mar 22 23:28:24 2009
    > New Revision: 67502
    >
    > URL: http://llvm.org/viewvc/llvm-project?rev=67502&view=rev
    > Log:
    > Add comments explaining why there's only one register for
    > i8 return values.
    >
    > Modified:
    >    llvm/trunk/lib/Target/X86/X86CallingConv.td
    >
    > Modified: llvm/trunk/lib/Target/X86/X86CallingConv.td
    > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86CallingConv.td?rev=67502&r1=67501&r2=67502&view=diff
    >
    > =
    > =
    > =
    > =
    > =
    > =
    > =
    > =
    > ======================================================================
    > --- llvm/trunk/lib/Target/X86/X86CallingConv.td (original)
    > +++ llvm/trunk/lib/Target/X86/X86CallingConv.td Sun Mar 22 23:28:24  
    > 2009
    > @@ -22,7 +22,12 @@
    >
    > // Return-value conventions common to all X86 CC's.
    > def RetCC_X86Common : CallingConv<[
    > -  // Scalar values are returned in AX first, then DX.
    > +  // Scalar values are returned in AX first, then DX, except for i8  
    > where
    > +  // the convention is to return values in AL and AH. However,  
    > using AL and
    > +  // is AH problematic -- a return of {i16,i8} would end up using  
    > AX and AH,
    
    s/is AH/AH is/
    
    -bw
    
    > +  // and one value would clobber the other. C front-ends are  
    > currently expected
    > +  // to pack two i8 values into an i16 in the rare situations where  
    > this
    > +  // is necessary.
    >   CCIfType<[i8] , CCAssignToReg<[AL]>>,
    >   CCIfType<[i16], CCAssignToReg<[AX, DX]>>,
    >   CCIfType<[i32], CCAssignToReg<[EAX, EDX]>>,
    >
    >
    > _______________________________________________
    > llvm-commits mailing list
    > llvm-commits at cs.uiuc.edu
    > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
    
    
    
    From sabre at nondot.org  Sun Mar 22 23:52:59 2009
    From: sabre at nondot.org (Chris Lattner)
    Date: Mon, 23 Mar 2009 04:52:59 -0000
    Subject: [llvm-commits] [llvm] r67504 - /llvm/trunk/docs/CodingStandards.html
    Message-ID: <200903230453.n2N4r0QX001703@zion.cs.uiuc.edu>
    
    Author: lattner
    Date: Sun Mar 22 23:52:53 2009
    New Revision: 67504
    
    URL: http://llvm.org/viewvc/llvm-project?rev=67504&view=rev
    Log:
    VC++ 6.0 is not future work :)
    
    Do not recommend llvm::OStream anymore.  Use raw_ostream or MemoryBuffer.
    
    Modified:
        llvm/trunk/docs/CodingStandards.html
    
    Modified: llvm/trunk/docs/CodingStandards.html
    URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CodingStandards.html?rev=67504&r1=67503&r2=67504&view=diff
    
    ==============================================================================
    --- llvm/trunk/docs/CodingStandards.html (original)
    +++ llvm/trunk/docs/CodingStandards.html Sun Mar 22 23:52:53 2009
    @@ -379,9 +379,8 @@
     
     

    In practice, this means that you shouldn't assume much about the host compiler, including its support for "high tech" features like partial -specialization of templates. In fact, Visual C++ 6 could be an important target -for our work in the future, and we don't want to have to rewrite all of our code -to support it.

    +specialization of templates. If these features are used, they should only be +an implementation detail of a library which has a simple exposed API.

    @@ -526,67 +525,9 @@ example) is allowed normally, it is just <iostream> that is causing problems.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Old WayNew Way
    #include <iostream>
    #include "llvm/Support/Streams.h"
    DEBUG(std::cerr << ...);
    -DEBUG(dump(std::cerr));
    DOUT << ...;
    -DEBUG(dump(DOUT));
    std::cerr << "Hello world\n";
    llvm::cerr << "Hello world\n";
    std::cout << "Hello world\n";
    llvm::cout << "Hello world\n";
    std::cin >> Var;
    llvm::cin >> Var;
    std::ostream
    llvm::OStream
    std::istream
    llvm::IStream
    std::stringstream
    llvm::StringStream
    void print(std::ostream &Out);
    -// ...
    -print(std::cerr);
    void print(llvm::OStream Out);1
    -// ...
    -print(llvm::cerr);
    -
    - -

    Notes:

    - -
    -
      -
    1. llvm::OStream is a light-weight class so it - should never be passed by reference. This is important because in some - configurations, DOUT is an rvalue.
    2. -
    -
    +

    The preferred replacement for stream functionality is the +raw_ostream class (for writing to output streams of various sorts) and +the MemoryBuffer API (for reading in files).

    From sabre at nondot.org Sun Mar 22 23:53:35 2009 From: sabre at nondot.org (Chris Lattner) Date: Mon, 23 Mar 2009 04:53:35 -0000 Subject: [llvm-commits] [llvm] r67505 - /llvm/trunk/docs/CodingStandards.html Message-ID: <200903230453.n2N4rZTK001764@zion.cs.uiuc.edu> Author: lattner Date: Sun Mar 22 23:53:34 2009 New Revision: 67505 URL: http://llvm.org/viewvc/llvm-project?rev=67505&view=rev Log: tt'ify. Modified: llvm/trunk/docs/CodingStandards.html Modified: llvm/trunk/docs/CodingStandards.html URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CodingStandards.html?rev=67505&r1=67504&r2=67505&view=diff ============================================================================== --- llvm/trunk/docs/CodingStandards.html (original) +++ llvm/trunk/docs/CodingStandards.html Sun Mar 22 23:53:34 2009 @@ -526,8 +526,8 @@ causing problems.

    The preferred replacement for stream functionality is the -raw_ostream class (for writing to output streams of various sorts) and -the MemoryBuffer API (for reading in files).

    +llvm::raw_ostream class (for writing to output streams of various +sorts) and the llvm::MemoryBuffer API (for reading in files).